
#14190: Typeable imposes seemingly redundant constraints on polykinded instances -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.4.1 Component: Compiler (Type | Version: 8.2.1 checker) | Keywords: Resolution: | TypeableReflection 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 RyanGlScott): Sorry, I think I woefully misunderstood the point you were making. You're not arguing that we shouldn't require `k` to be a `Typeable` instance, but rather than if you have `Typeable (a :: k)`, then that //implies// `Typeable k`. I must admit I wasn't aware of the `weGotThis` trick you showed off above. Here's a version that doesn't depend on the `constraints` library: {{{#!hs {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeInType #-} import Type.Reflection hm :: forall k (a :: k). Typeable a => TypeRep k hm = withTypeable (typeRepKind (typeRep @a)) (typeRep @k) }}} In light of this, your suggestion to make `Typeable k` a superclass of `Typeable (a :: k)` makes much more sense. In fact, there was some [https://github.com/ghc-proposals/ghc- proposals/pull/16#issuecomment-255645119 discussion] about this on the corresponding GHC proposal, but it didn't seem to make it into [http://git.haskell.org/ghc.git/blob/055d73c6576bed2affaf96ef6a6b89aeb2cd2e9f... GHC's implementation] of it. Ben, do you know what became of this idea? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14190#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler