Thanks, Lorenzo! It works now.Try something like this: splitAt' n = foldr (\x zs -> if fst x <= n then (snd x : fst zs, snd zs) else ([], snd x : snd zs)) ([], []) . zip [1..] I'm no Haskell expert, but I suspect that when pattern-matching z2, it tries to evaluate it and it hangs... My version does not hang... hth, L.
You can also use lazy pattern matching.Thanks, Ozgur!
http://en.wikibooks.org/wiki/Haskell/Laziness#Lazy_pattern_matching
On 16 April 2012 15:21, Lorenzo Bolla <lbolla@gmail.com> wrote:
> 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..]
Ozgur