
On Mon, Aug 14, 2006 at 02:17:05PM +0200, Tim Walkenhorst wrote:
I've stumbled over the following (code *extremely* simplified):
f :: Bool f = g 1
g :: Num a => a -> Bool g _ = f
This results in the following error message (on GHC):
Contexts differ in length When matching the contexts of the signatures for f :: Bool g :: forall a. (Num a) => a -> Bool The signature contexts in a mutually recursive group should all be identical
My first question is:
1) Is there a name for this restriction: I can't clearly identify it as some case of Let-Bound Polymorphism or the monomorphism restriction. [http://www.cs.auckland.ac.nz/references/haskell/haskell-intro-html/pitfalls....]
This probably doesn't answer everything, but it is discussed in the following section of the Haskell Language Report: http://haskell.org/onlinereport/decls.html#sect4.5.2 A problem with the Report is that sometimes it tells you the rules, but it doesn't always justify them with detailed comments. I had a feeling this was discussed in "Typing Haskell in Haskell" by Mark Jones, but after a quick skim I can't find it again (I thought it would be in Section 11.6 of his paper). Cheers, Bernie.