
#14061: reflection -------------------------------------+------------------------------------- Reporter: zaoqi | Owner: (none) Type: feature request | Status: closed Priority: normal | Milestone: Component: Runtime System | Version: 8.0.2 Resolution: invalid | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by zaoqi): * component: Compiler => Runtime System Old description:
{{{#!hs {-# LANGUAGE KindSignatures, GADTs #-} data Dyn :: * where Dyn :: a -> Dyn }}} How to write the correct `instance Eq Dyn`, do not change `data Dyn`?
{{{#!hs {-# 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 }}} {{{#!hs 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 }}}
New description: {{{#!hs {-# LANGUAGE KindSignatures, GADTs #-} data Dyn :: * where Dyn :: a -> Dyn }}} How to write the correct `instance Eq Dyn`, do not change `data Dyn`? {{{#!hs {-# 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 }}} {{{#!hs 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, -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14061#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler