[Haskell-cafe] Language.Haskell.Parser question

Neil Mitchell ndmitchell at gmail.com
Thu Mar 26 13:17:03 EDT 2009


Hi

> f1 = foo 5
> f2 = foo 8
> f3 = foo 9
>
>  I want to extract a list [5, 8, 9] (suppouse function takes only one argument)

Firstly, use haskell-src-exts and Language.Haskell.Exts - its a much
better library, deals with many extensions, and gives you everything
Language.Haskell did.

> parser works pretty good,
> but its output data type is terrible. As I understand, I need to
> extract all objects that looks like
> HsApp (HsVar (UnQual (HsIdent "foo"))) ....

It's trivial, if you use a generics solution, say  Uniplate:
http://community.haskell.org/~ndm/uniplate

[x | App foo x <- universeBi src, prettyPrint foo == "foo" ]

I often use prettyPrint to follow down Ident/Qual/UnQual paths without
having to know as much of the data type. Using universeBi makes it
easy to find everything that occurs everywhere.

If you attempt this without using a generics library, I'd say you are
destined to fail.

Thanks

Neil


More information about the Haskell-Cafe mailing list