>>> takeWhile (const False) undefined *** Exception: Prelude.undefined
>>> takeWhile (const False) (undefined : undefined) []
>>> take 1 (takeWhile (const True) (1 : undefined)) [1]
>>> takeWhile (< 3) [1,2,3,4,1,2,3,4] [1,2]
>>> takeWhile (< 9) [1,2,3] [1,2,3]
>>> takeWhile (< 0) [1,2,3] []
>>> takeWhile (< 3) [1,2,3,4,1,2,3,4] [1,2] >>> takeWhile (< 9) [1,2,3] [1,2,3] >>> takeWhile (< 0) [1,2,3] []
takeWhile (pure True) = cat takeWhile (liftA2 (&&) p1 p2) = takeWhile p1 >-> takeWhile p2
forAllPredicates $ \p xs -> Rev.takeWhile p xs == reverse (List.takeWhile p (reverse xs))
forAllPredicates $ \p xs -> Rev.takeWhile p xs == reverse (List.takeWhile p (reverse xs))
\x xs pad -> defined $ Rev.takeWhile ((x::Char)/=) $ Match.replicate (pad::[()]) undefined ++ x:xs
>>> takeWhile (< 3) [1,2,3,4,1,2,3,4] [1,2] >>> takeWhile (< 9) [1,2,3] [1,2,3] >>> takeWhile (< 0) [1,2,3] []Laziness:
>>> takeWhile (const False) undefined *** Exception: Prelude.undefined >>> takeWhile (const False) (undefined : undefined) [] >>> take 1 (takeWhile (const True) (1 : undefined)) [1]
S.takeWhile thus = void . S.span thusTo preserve the information - but thus also force the rest of the stream to be developed - write
S.drained . S.span thusas dropWhile thus is
S.effects . S.span thus
takeWhile (< 3) [1,2,3,4,1,2,3,4] == [1,2] takeWhile (< 9) [1,2,3] == [1,2,3] takeWhile (< 0) [1,2,3] == []