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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe