GHC bug,or Hugs feature?
Mark Tullsen
mtullsen@cse.ogi.edu
Fri, 09 Aug 2002 12:31:21 -0700
I believe the incompatibilities are explained thus:
In section 4.5.1 of the Haskell Report it only states that
"A dependency analysis transformation is first performed to increase
polymorphism"
But hugs appears to be using a more refined version of the dependency
analysis as explained in section 11.6.3 of Mark Jones' paper Typing
Haskell in Haskell. Read that section.
- Mark
Arthur Baars wrote:
> In Mark Jones' paper Typing Haskell in Haskell, I found the following
> example(in the section on binding-groups):
>
> f :: Eq a => a -> Bool
> f x = x==x || g True
> g y = y<=y || f True
>
> According to the paper the inferred type of g should be:
> g::Ord a => a -> Bool
>
> Hugs infers this type but GHC infers the following *ambiguous* type:
> *Main> :i g
> -- g is a variable, defined at Test.hs:25
> g :: forall a. (Eq a) => Bool -> Bool
>
> When adding an explicit type signature for g, Hugs happily accepts the code,
> but GHC gives the following error:
>
> f :: Eq a => a -> Bool
> f x = x==x || g True
> g :: Ord a => a -> Bool
> g y = y<=y || f True
>
> Test.hs:24:
> Couldn't match `{Ord a}' against `{Eq a1}'
> When matching the contexts of the signatures for
> g :: forall a. (Ord a) => a -> Bool
> f :: forall a. (Eq a) => a -> Bool
> The signature contexts in a mutually recursive group should all be
> identical
> When generalising the type(s) for g, f
> Failed, modules loaded: none.
>
> I think the problems are caused by differences in the binding group analysis
> in Hugs and GHC.
>
> Malcolm, could you check what NHC says about the examples above?
>
> Cheers,
> Arthur
>
> _______________________________________________
> Haskell mailing list
> Haskell@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
>