Re: Do notation for arbitrary monads

From: Sebastian Fischer <>
Date: Wed, 07 Sep 2011 10:23:47 +0900

Hi Michael,

how difficult would it be to desugar do-notation into *unqualified* calls of
>>= and return to use whatever definitions are in scope? If type checking
and name resolution is done after desugaring do-notation it seems not too


On Wed, Sep 7, 2011 at 2:02 AM, Arthur Peters <> wrote:

> Hello there,
> I am currently working on writing a compiler from FlatCurry to OCaml
> (using an explicitly graph rewrite based evaluation engine). I am
> writing this compiler in curry (because there is a fairly nice
> FlatCurry lib). However I have run into a problem.
> I want to use a custom monad (a specialized state monad probably) for
> generating the OCaml code. And of course I want to use do notation
> to code with this monad. However I am getting errors like:
> "/home/amp/shared/school/
> Thesis/curry/State.curry", line 26.9: Type
> error in statement
> v <- return 2
> Term: return 2
> Inferred type: State _58 Prelude.Int
> Expected type: Prelude.IO _56
> Types Prelude.IO _56 and State _58 Prelude.Int are incompatible
> It seems that do notation only works with the IO monad. Is this the
> case? Is there any way around it or is this just what we are stuck
> with until curry gets type-classes? (which I know will be a long while
> because there is other more useful work to do on the language.)
> I'm pretty sure I could use IORefs to store the information I need in
> the IO monad but that seems like an ugly hack so I wanted to ask
> before I committed to that path.
> I am using PAKCS.
> -Arthur
> _______________________________________________
> curry mailing list
> curry_at_lists.RWTH-Aachen.DE
> http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry

curry mailing list
Received on Mi Sep 07 2011 - 09:16:54 CEST

This archive was generated by hypermail 2.3.0 : So Dez 03 2023 - 07:15:13 CET