>>> span undefined [] ([],[]) >>> fst (span (const False) undefined) *** Exception: Prelude.undefined >>> fst (span (const False) (undefined : undefined)) [] >>> take 1 (fst (span (const True) (1 : undefined))) [1]span produces the first component of the tuple lazily:
>>> take 10 (fst (span (const True) [1..])) [1,2,3,4,5,6,7,8,9,10]
>>> span (< 3) [1,2,3,4,1,2,3,4] ([1,2],[3,4,1,2,3,4])
>>> span (< 9) [1,2,3] ([1,2,3],[])
>>> span (< 0) [1,2,3] ([],[1,2,3])
'span' p xs == ('takeWhile' p xs, 'dropWhile' p xs) xs == ys ++ zs where (ys, zs) = 'span' p xs
>>> T.span (=='0') "000AB" ("000","AB")
>>> span (< 3) [1,2,3,4,1,2,3,4] ([1,2],[3,4,1,2,3,4]) >>> span (< 9) [1,2,3] ([1,2,3],[]) >>> span (< 0) [1,2,3] ([],[1,2,3])span p xs is equivalent to (takeWhile p xs, dropWhile p xs)
span $ span $ toHtml "foo"Result:
<span><span>foo</span></span>
div ! span "bar" $ "Hello."Result:
<div span="bar">Hello.</div>
forAllPredicates $ \p xs -> Rev.span p xs == swap (mapPair (reverse, reverse) (List.span p (reverse xs)))
forAllPredicates $ \p xs -> Rev.span p xs == (Rev.dropWhile p xs, Rev.takeWhile p xs)
\x xs pad -> defined $ Match.take (pad::[()]) $ fst $ Rev.span ((x::Char)/=) $ cycle $ x:xs
forAllPredicates $ \p xs -> Rev.span p xs == swap (mapPair (reverse, reverse) (List.span p (reverse xs)))
forAllPredicates $ \p xs -> Rev.span p xs == (Rev.dropWhile p xs, Rev.takeWhile p xs)
\x xs pad -> defined $ mapFst length $ Rev.span ((x::Char)/=) $ Match.replicate (pad::[()]) undefined ++ x:xs
span (< 3) [1,2,3,4,1,2,3,4] == ([1,2],[3,4,1,2,3,4]) span (< 9) [1,2,3] == ([1,2,3],[]) span (< 0) [1,2,3] == ([],[1,2,3])span p xs is equivalent to (takeWhile p xs, dropWhile p xs)