[Haskell-cafe] Scary type inference for monadic function definitions
Ahn, Ki Yung
kyagrd at gmail.com
Thu Jun 4 01:39:03 EDT 2009
Scary type inference for monadic function definitions
(or, why you'd want to annotate types for monadic function definitions)
This is a real example that I've experienced.
I defined the following function.
> checkOneVerseByLineWith readLine v =
> do mg <- readLine
> case mg of
> Just g -> return Just (v==g)
> Nothing -> return Nothing
My intention was to use it something like this:
checkOneVerseByLineWith (readline "% ")
where readline is the library function from System.Console.Readline.
As you can see, there is an obvious mistake which I forgot to
group (Just (v==g)) in parenthesis. However, GHC or any other
Haskell 98 compliant implementation will infer a type for you
and this will type check! Try it yourself if in doubt.
Of course, checkOneVerseByLineWith (readline "% ") won't type check
because checkOneVerseByLineWith has strange type. The reason why
the above definition type checks is because ((->) r) is an instance
of Monad.
More information about the Haskell-Cafe
mailing list