On 04/16/12 18:21, Lorenzo Bolla wrote:
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.

Thanks, Lorenzo! It works now.

On 04/16/12 18:55, Ozgur Akgun wrote:
You can also use lazy pattern matching.

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
Thanks, Ozgur!