Am Dienstag 01 Dezember 2009 20:21:27 schrieb Evan Laforge:
> This is only peripherally related, but I also have a lot of list
> functions that can possibly be an error, but usually processing can
> continue.  So they tend to return [Either Error Result].  I have
> another function thus:
>
> -- A foldr version is not lazy enough and overflows the stack.

try

foldr (\e ~(ls,rs) -> case e of { Left l -> (l:ls,rs); Right r -> (ls,r:rs) }) 
([],[])

with the lazy pattern, it should be lazy enough.

> partition_either [] = ([], [])
> partition_either (x:xs) =
>     let (ls, rs) = partition_either xs
>     in case x of
>         Left l -> (l:ls, rs)
>         Right r -> (ls, r:rs)
>
> I was a little surprised I couldn't find this in the standard
> library... or maybe it is?

Data.Either.partitionEithers

Data.List.partition isLeft

isLeft (Left _) = True
isLeft _ = False


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to