Skip to content

G

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}

class GEq a b where
    geq :: a -> b -> Bool

instance {-# OVERLAPPING #-} Eq a => GEq a a where
    geq = (==)

instance GEq a b where
    geq _ _ = False
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> :load GEq.hs 
[1 of 1] Compiling Main             ( GEq.hs, interpreted )
Ok, modules loaded: Main.
*Main> geq::a->b->Bool

<interactive>:3:1:
    Overlapping instances for GEq a1 b1 arising from a use of ‘geq’
    Matching instances:
      instance GEq a b -- Defined at GEq.hs:9:10
      instance [overlapping] Eq a => GEq a a -- Defined at GEq.hs:6:30
    (The choice depends on the instantiation of ‘a1, b1’
     To pick the first instance above, use IncoherentInstances
     when compiling the other instance declarations)
    In the expression: geq :: a -> b -> Bool
    In an equation for ‘it’: it = geq :: a -> b -> Bool
*Main> 

In order to

{-# LANGUAGE KindSignatures, GADTs #-}
data Dyn :: * where
    Dyn :: a -> Dyn

instance Eq Dyn where
    Dyn a == Dyn b = geq a b
Edited by zaoqi
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information