Estimados,
La solución que se plantea es la siguiente:
splitOn :: Eq a => a -> [a] -> [[a]]
splitOn x = foldr split [[ ]]
where
split v (y : ys)
| v == x = [ ] : y : ys
| otherwise = (v : y) : ys
Tengo la siguiente duda con la ejecución de: splitOn 'x' "holaxquextalx".
Entiendo que en el primero paso del cálculo de foldr se hace lo siguiente:
split "x" ([ ] : [ ]) y me devuelve [ ] : [ ] : [ ] que es [[ ], [ ]].
En el segundo cálculo del foldr se hace lo siguiente:
split "l" ([ ] : [[ ]]) y me devuelve ("l":[ ]):[[ ]] que es [["l"],[ ]].
En el tercer cálculo del foldr (que es donde tengo la duda) se hace lo siguiente:
split "a" (["l"]:[[ ]]) y me devuelve ("a":["l"]):[[ ]] que es [["a","l"],[ ]], pero en realidad debería devolver [["al"],[ ]].
Agradezco si alguien me puede dar una mano para entender qué es lo que estoy razonando mal.