Type resolution problem

Juan Carlos Arevalo Baeza jcab@roningames.com
Mon, 28 May 2001 17:53:38 -0700

    I'm having a little of a problem with a project of mine. Just check out 
this, which is the minimum piece of code that will show this problem:

type MyType a = a

(+++) :: MyType a -> MyType a -> MyType a
a +++ b = a

class MyClass a where
     baseVal :: a

val1 :: MyClass a => MyType a
val1 = baseVal

val2 :: MyClass a => MyType a
val2 = baseVal

-- combVal :: MyClass a => MyType a
combVal = val1 +++ val2      -- line 18 is here...

    Trying this in Hugs returns the following error:

ERROR E:\JCAB\Haskell\testcv.hs:18 - Unresolved top-level overloading
*** Binding             : combVal
*** Outstanding context : MyClass b

    Now, how can it possibly say that the context "MyClass b" is 
outstanding? What does this mean?

    Uncommenting the type expression above clears the error. But, why can't 
the compiler deduce it by itself? I mean, if a function has type shaped 
like in (a -> a -> a) and it is used with parameters (cv => a) where the 
constrains are identical, then the result MUST be (cv => a) too, right? Or 
am I missing something here?

    Don't get me wrong, I can just put type declarations everywhere in my 
code. It's a good thing, too. But this problem is really nagging at me 
because I don't get where the problem is.

    Any ideas or pointers?


Juan Carlos "JCAB" Arevalo Baeza    | http://www.roningames.com
Senior Technology programmer        | mailto:jcab@roningames.com
Ronin Entertainment                 | ICQ: 10913692
                        (my opinions are only mine)
JCAB's Rumblings: http://www.metro.net/jcab/Rumblings/html/index.html