[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
or
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)
or
> map (show :: Int -> String) . map read
> Great, I didn't recall that a wrong annotation was a compile error.
>
That's strong type system :)
Regards
More information about the Beginners
mailing list