[Haskell-beginners] splitAt implementation (using foldr) and infinite lists
Dmitriy Matrosov
sgf.dma at gmail.com
Mon Apr 16 10:52:02 CEST 2012
Hi all.
If i implement take using foldr
take' :: Int -> [a] -> [a]
take' n = foldr (\x z -> if fst x <= n then snd x : z else []) []
. zip [1..]
it'll work fine with infinite lists. But if i implement splitAt similarly
splitAt' :: Int -> [a] -> ([a], [a])
splitAt' n = foldr (\x (z1, z2) -> if fst x <= n then (snd x : z1, z2)
else ([], snd x : z2))
([], [])
. zip [1..]
and call it like this
*Main> fst $ splitAt' 4 [1..]
^CInterrupted.
it will hang. I don't understand, why it tries to compute second list
(z2), if it only needs first?
More information about the Beginners
mailing list