Subject: Re: Export lists in modules
Type signatures currently do more than state the type of a variable. They potentially (i) enable polymorphic recursion, and (ii) disable the monomorphism restriction, thus losing sharing. It would be very strange if a type signature *in an export list* were to have these effects--the export list surely should not change the way a module is compiled and type-checked. One good principle is that commenting out the export list should not change the way any definition is compiled, only what is exported. After all, commenting out the exports (so that all definitions can be tested) is a common step when debugging a module.

I would conclude that polymorphic recursion should be enabled only if a type signature appears *in the body of the module*, similarly the M-R should be disabled only if an overloaded type signature appears in the body of the module.

The same principle should apply to any other type signatures that change the way a definition is type-checked, if they are included in Haskell', such as rank-2 or rank-N type signatures.

John

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime

Reply via email to