Skip to content

do notation translation

& Really there are two things:

Normally, (do True) fails to compile in GHC because there is no Monad Bool, whereas Haskell-98 translates it to (True).

With -fno-implicit-prelude, ( according to http://comonad.com/reader/2007/parameterized-monads-in-haskell/ ):

""" Caveat: It appears that GHC enforces the fact that the arguments and results of (>>=) must have a signature like

(>>=) :: forall m a. (...) => m a -> (a -> m b) -> m b

insofar as when you use the do-sugar, your types will not be able to vary. Ideally it should be able to get by with a more liberal signature, but it seems like no one has needed it before now. """

I think do-notation will be the simplest sugar (from one point of view at least) when it just translates to (>;=), (>>), fail, and let..in.. as specified in Haskell98 (or non-Prelude-qualified when -fno-implicit-prelude, of course).

It appears #303 (closed) was an older similar problem. Also, maybe the behavior (in the new version) should be explicitly documented somewhere in the User's Guide.

Edited by mnislaih
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information