[Haskell-beginners] Re: in which monad am I?

Maciej Piechotka uzytkownik2 at gmail.com
Sun Jan 3 17:28:17 EST 2010

On Sun, 2010-01-03 at 23:21 +0100, Francesco Guerrieri wrote:
> On Sun, Jan 3, 2010 at 11:06 PM, Rahul Kapoor <rk at trie.org> wrote:
> > I am not sure I completely understand your question (I think I do)
> It appears that you did. Thanks!
> > ghci is able to infer that the Monad's in question are the Maybe and
> > List respectively.
> > In (almost?) all cases type inference allows the compiler to pick
> > which overloaded
> > implementation is to be used.
> Why did you put the "almost"? Given the types on which the function is acting,
> either it finds a good match or not, in which case it is a
> compile-time error. What am I missing?

That further it may be lost (if I misunderstood the question then
sorry). liftM a b will now the correct monad as long as:
1. It knows monad in second parameter
2. It knows monad in result

Knowing (or defaulting in case of GHCi) is sufficient.

> >>and do poor
> >> haskell programmers never feel the need to explicitly state to which
> >> monad they "wish to lift" ?
> >
> > It is probably a matter of taste - but adding type signatures even in
> > the presence
> > of type inference is usually a good thing except for the most trivial cases It
> > serves as a documentation and a quick test by making sure that the
> > compiler and you
> > infer the same type since it is a compile error to specify a type
> > which is not compatible
> > with what the compiler infers.

Well. As far as 'global' signatures (i.e. the ones directly in module)
are concerned it is correct. However there is sometimes need to write
something like:
> sizeOf (undefined :: CInt)
> map (show :: Int -> String) . map read

> Great, I didn't recall that a wrong annotation was a compile error.

That's strong type system :)


More information about the Beginners mailing list