[Haskell-cafe] What monad am I in?

Ryan Ingram ryani.spam at gmail.com
Tue Sep 2 20:33:02 EDT 2008


ghci has some crazy defaulting rules for expressions at the top level.

In particular, it tries to unify those expressions with a few
different types, including IO.

On the other hand, the let-expression is typed like regular Haskell
and you run into the monomorphism restriction.

  -- ryan

On Tue, Sep 2, 2008 at 1:25 PM, Henry Laxen <nadine.and.henry at pobox.com> wrote:
> Dear Group,
>
> When I fire up ghci and define:
>
> increment x = return (x+1)
>
> I can say:
> Main> increment 1
>
> and ghci dutifully replies 2. Also as expected, the type signature of
> increment is:  (Num a, Monad m) => a -> m a
>
> However, if I say:
>
> Main> let a = increment 1
>
> I get:
>
> <interactive>:1:8:
>    Ambiguous type variable `m' in the constraint:
>      `Monad m' arising from a use of `increment' at <interactive>:1:8-18
>    Probable fix: add a type signature that fixes these type variable(s)
>
>
> Have I, like Monsier Jourdain, been running in the IO monad all my
> life, and didn't even know it?
>
> Thanks,
> Henry Laxen
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list