Applicative and parsec3
Christian Maeder
Christian.Maeder at dfki.de
Thu Jan 27 11:29:02 CET 2011
Am 27.01.2011 07:16, schrieb Kazu Yamamoto (山本和彦):
> Hello,
>
> I'm using parsec3 with the applicative style. Since the functions in
> Control.Applicative and parsec3 conflicts, I need to use the "hiding"
> keyword as follows:
>
> import Control.Applicative hiding (many,optional,(<|>))
> import Text.Parsec
Another problem:
Control.Applicative.optional corresponds to
Text.Parsec.Combinator.optionMaybe whereas
Text.Parsec.Combinator.optional returns "()".
> This is inconvenient for me. I would like to use them as follows:
>
> import Control.Applicative
> import Text.Parsec
>
> Christian, the maintainer of parsec3, told me that it is possible to
> use the functions of Control.Applicative in parsec3 instead of
> implementing its own functions. But (<|>) of parsec3 is "infixr 1"
> while that of Control.Applicative is "infixl 3". This may be an
> issue.
>
> Any ideas to solve this issue?
If we are lucky removing the "infixr 1 <|>" operator does not break too
much existing code, because the combination with "infixl 1 >>" needs
always brackets, currently. (But a changed interpretation might be hard
to notice.)
However, using "a >> b <|> c" would then no longer be an error and
interpreted as "a >> (b <|> c)", whereas "a *> b <|> c" would be "(a *>
b) <|> c".
Christian
>
> --Kazu
More information about the Libraries
mailing list