Along the same lines:
{-# LANGUAGE GADTs, TypeFamilies #-}
module Assoc where
data EqD k where EqD :: Eq k => EqD k
class MyClass k where
type AssociatedType k :: *
evidence :: k -> EqD (AssociatedType k)
instance MyClass () where
type AssociatedType () = Integer
evidence _ = EqD
eq :: MyClass k => k -> AssociatedType k -> AssociatedType k -> Bool
-- eq k k1 k2 = k1 == k2 -- doesn't work
eq k k1 k2 = case evidence k of EqD -> k1 == k2 -- works fine
On 17 Dec 2009, at 17:10, Miguel Mitrofanov wrote:
{-# LANGUAGE GADTs, TypeFamilies #-}
module Assoc where
data EqD k where EqD :: Eq k => EqD k
class MyClass k where
data AssociatedType k :: *
evidence :: AssociatedType k -> EqD (AssociatedType k)
eq :: MyClass k => AssociatedType k -> AssociatedType k -> Bool
-- eq k1 k2 = k1 == k2 -- doesn't work
eq k1 k2 = case evidence k1 of EqD -> k1 == k2 -- works fine
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe