takeWhile : recebe uma condição e uma lista e retorna o segmento inicial da lista cujos elementos satisfazem a condição dada

takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile p [] = []
takeWhile p (x:xs) | p x       = x : takeWhile p xs
                   | otherwise = []

> takeWhile (>3) 
[5,7,1,8,2]

dropWhile : recebe uma condição e uma lista e retorna a lista sem o segmento inicial de elementos que satisfazem a condição dada

dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile p [] = []
dropWhile p (x:xs) | p x       = dropWhile p xs
                   | otherwise = x:xs

> dropWhile (>3) [5,7,1,8,2]
[1,8,2]

span : É uma função que calcula simultaneamente o resultado das funções takeWhile e dropWhile. Ou seja, span p l = (takeWhile p l, dropWhile p l)

span :: (a -> Bool) -> [a] -> ([a],[a])

Exemplo :

A função lines (do Prelude) que parte uma string numa lista de linhas :

lines :: String -> [String]
lines [] = []
lines s = let (l,r) = span (/='\\n') s
          in case r of
                  []  -> [l]
                  x:r -> l : lines r

> lines "   **\\n**edjw\\tjqwji**\\n**23jsj**\\n\\n**4853h"
["   ","edjw\\tjqwji","23jsj", " ","4853h"]