[jhc] type of main

Daniel Gorín jcpetruzza at gmail.com
Sat Feb 11 06:47:40 CET 2012


I noticed that jhc is not checking what the type of the main function is. In particular, it rejects this module:

> main = return ()

because the inferred type, Monad m => m () is not monomorphic. This may typically happen if the most general type for main is MonadIO m => m ().

On the other hand, the following module is accepted:

> main :: [()]
> main = return ()

The resulting program does not crash (as I had expected!) but prints [()] instead.

In any case, according to the Haskell 98 Report (sec. 5), main has to be "a computation of type IO t, for some type t". I'm attaching a patch that enforces this (I think) by unifying, during the type-checking, the type of the main function with IO t. 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: type-of-main.dpatch
Type: application/octet-stream
Size: 4780 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/jhc/attachments/20120211/66a0ed64/attachment.obj>

More information about the jhc mailing list