[Haskell-cafe] Distinct types in a list

Ozgur Akgun ozgurakgun at gmail.com
Thu Jan 7 13:44:41 EST 2010


If I understand you correctly, what you want is very similar to catMaybes

isSuccess' (Success a) = Just a
isSuccess' _ = Nothing

result = catMaybes $ map isSuccess ps

This should do the trick.


2010/1/7 rodrigo.bonifacio <rodrigo.bonifacio at uol.com.br>

> Hi all,
>
> I have a family of parsers that return either (Success t) or (Fail), using
> the following data type:
>
> > data ParserResult a = Success a | Fail String
> >  deriving (Read, Show, Eq, Ord)
> >
> > isSuccess (Success _) = True
> > isSuccess (Fail _) = False
> > ...
>
> I want to add the results of different parsers to a list. Such as:
>
> > m1 = parseFirstModel file1   -- it returns a ParserResult of t1
> > m2 = parseSecondModel file2  -- it returns a ParserResult of t2
>
> > ps = [m1, m2]
>
> In such a way that I could write something like:
>
> > if and (map isSuccess ps)
> >  then process m1 m2
> >  else ...
>
> Actually, in the real program I have to check more than two input models.
> However, since Lists do only hold elements of a same type, I couldn't
> proceed in this way. Which improvements to the ParserResult data type should
> I wrote in order to proceed as I want to.
>
> Best regards,
>
> Rodrigo.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



-- 
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100107/f27d6a17/attachment.html


More information about the Haskell-Cafe mailing list