Take a look at
http://www.haskell.org/haskellwiki/GHC/AdvancedOverlap
Tom Hawkins wrote:
On Mon, Sep 15, 2008 at 3:11 PM, apfelmus <[EMAIL PROTECTED]> wrote:
So, in other words, in order to test whether terms constructed with Equal are
equal, you have to compare two terms of different type for equality. Well,
nothing easier than that:
(===) :: Expr a -> Expr b -> Bool
Const === Const = True
(Equal a b) === (Equal a' b') = a === a' && b === b'
_ === _ = False
instance Eq (Expr a) where
(==) = (===)
OK. But let's modify Expr so that Const carries values of different types:
data Expr :: * -> * where
Const :: a -> Term a
Equal :: Term a -> Term a -> Term Bool
How would you then define:
Const a === Const b = ...
-Tom
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe