Skip to content

reflection

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

How to write the correct instance Eq Dyn, do not change data Dyn?

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}

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

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

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

If Haskell supports reflections like Java,

Edited by zaoqi
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information