
#14004: G -------------------------------------+------------------------------------- Reporter: zaoqi | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | 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: | -------------------------------------+------------------------------------- Comment (by bgamari): Moreover, there is no way to satisfy the `Eq a` constraint needed by `geq a b`. Afterall, the `a` type variable here is brought into scope by pattern-matching on the `Dyn` constructor which provides no constraints; not even `Typeable`, so it's not even possible to know at runtime whether the bound `a` and `b` values are of the same type. To be able to make this comparison work you would need something like, {{{#!hs data Dyn :: * where Dyn :: (Eq a, Typeable a) => a -> Dyn instance Eq Dyn where Dyn (a :: a) == Dyn (b :: b) | Just HRefl <- ra `eqTypeRep` rb = a == b | otherwise = False where ra = typeRep :: TypeRep a rb = typeRep :: TypeRep b }}} For instance, {{{ λ> Dyn (1 :: Int) == Dyn (2 :: Int) False λ> Dyn (1 :: Int) == Dyn (1 :: Int) True }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14004#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler