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