Solución:
Recuerde que puede buscar la definición de funciones de Prelude.
http://www.haskell.org/onlinereport/standard-prelude.html
Mirando allí, la definición de words
es,
words :: String -> [String]
words s = case dropWhile Char.isSpace s of
"" -> []
s' -> w : words s''
where (w, s'') = break Char.isSpace s'
Entonces, cámbielo por una función que tome un predicado:
wordsWhen :: (Char -> Bool) -> String -> [String]
wordsWhen p s = case dropWhile p s of
"" -> []
s' -> w : wordsWhen p s''
where (w, s'') = break p s'
¡Entonces llámalo con el predicado que quieras!
main = print $ wordsWhen (==',') "break,this,string,at,commas"
Hay un paquete para esto llamado split.
cabal install split
Úselo así:
ghci> import Data.List.Split
ghci> splitOn "," "my,comma,separated,list"
["my","comma","separated","list"]
Viene con muchas otras funciones para dividir en delimitadores coincidentes o tener varios delimitadores.
Si usa Data.Text, hay splitOn:
http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text.html#v:splitOn
Esto está integrado en la plataforma Haskell.
Entonces, por ejemplo:
import qualified Data.Text as T
main = print $ T.splitOn (T.pack " ") (T.pack "this is a test")
o:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
main = print $ T.splitOn " " "this is a test"
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)