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.html] 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. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe