The simplest program
Wolfgang Thaller
wolfgang.thaller at gmx.net
Thu Feb 13 16:41:21 EST 2003
Axel Simon wrote:
> This bug is older! ghc 5.04 does not enforce that the return type of
> main
> is (). In fact with 5.04 you can return anything you want and get very
> fancy exception on termination if you return a more complex data type.
I don't know about an exception on termination (Is it a known bug? If
not, it should be reported), but returning anything is allowed. The
Haskell Report, section 5, says:
> A Haskell program is a collection of modules, one of which, by
> convention, must be called Main and must export the value main. The
> value of the program is the value of the identifier main in module
> Main, which must be a computation of type IO t for some type t (see
> Section 7). When the program is executed, the computation main is
> performed, and its result (of type t) is discarded.
The problem with that no-op program is that the type checker doesn't
seem to know that main has to be in the IO monad.
On the other hand...
> module Main where
> main :: Monad m => m ()
> main = return ()
is legal according to both GHC 5.04 and 5.05. Now I'm beginning to see
why GHC complains.
It would be nice, though, if "main = return ()" was legal without
additional type signatures. I've been bitten by this before: I wrote
some datatypes and functions in a "Main" module, but I left the main
action empty at first. Then I just wanted to check syntax and typing
and got a strange error message...
Cheers,
Wolfgang
More information about the Glasgow-haskell-bugs
mailing list