
#13105: Allow type families in RuntimeReps -------------------------------------+------------------------------------- Reporter: goldfire | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: | LevityPolymorphism Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/T13105 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by magesh.b): {{{#!haskell class Unbox (t :: *) (r :: TYPE k) | t -> r, r -> t where unbox :: t -> r box :: r -> t instance Unbox Int Int# where unbox (I# i) = i box i = I# i instance Unbox Char Char# where unbox (C# c) = c box c = C# c instance (Unbox a a', Unbox b b') => Unbox (a,b) (# a', b' #) where unbox (a,b) = (# unbox a, unbox b #) box (# a, b #) = (box a, box b) -- Works fine testInt :: Int testInt = box (unbox 1) -- Throws an error at call site {-error: • Couldn't match a lifted type with an unlifted type When matching the kind of ‘Int#’ • In the expression: box (unbox (1, 'a')) In an equation for ‘testTup’: testTup = box (unbox (1, 'a')) | 168 | testTup = box (unbox (1, 'a')) | ^^^^^^^^^^^^^^^^^^^^ -} testTup :: (Int, Char) testTup = box (unbox (1, 'a')) }}} Does this error related to same bug? Any chance of such code to work in future GHC release or is it fundamentally not possible to have a levity polymorphic class as a constraint in an instance declaration. One of the use case is, above code would have allowed me to pack user defined data type in to highly packed unboxed anonymous record (using nested Unboxed Tuple) making boxing/unboxing first class in GHC. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13105#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler