O'Haskell OOP Polymorphic Functions

Ashley Yakeley ashley@semantic.org
Tue, 16 Jan 2001 14:20:50 -0800


At 2001-01-16 14:04, Tom Pledger wrote:

>The subtyping (struct Derived < Base ...) makes the two instances
>overlap, with 'instance TheValue Derived' being strictly more specific
>than 'instance TheValue Base'.  If the system preferred the less
>specific one, the more specific one would never be used.
>
>This is quite similar to the way overlapping instances are handled
>when they occur via substitutions for type variables (e.g. 'instance C
>[Char]' is strictly more specific than 'instance C [a]') in
>implementations which support than language extension.

Subtyping-overlapping is quite different from type-substitution 
overlapping.

Consider:

struct B

struct D1 < Base = 
     a1 :: Int

struct D2 < Base = 
     a2 :: Int

class TheValue a where theValue :: a -> Int
instance TheValue B  where theValue _ = 0
instance TheValue D1 where theValue _ = 1
instance TheValue D2 where theValue _ = 2

struct M < D1,D2

m = struct
 a1 = 0
 a2 = 0

f = theValue m

What's the value of f?

-- 
Ashley Yakeley, Seattle WA