Skip to content

QuantifiedConstraints: Problems with Typeable

This compiles

{-# Language GADTs, ConstraintKinds, ScopedTypeVariables, QuantifiedConstraints #-}

import Data.Typeable

data Ex cls where
  MkEx :: cls xx => xx -> Ex cls

a :: Ex Typeable -> TypeRep
a (MkEx (_::xx)) = typeRep @_ @xx Proxy

-- b :: (forall xx. cls xx => Typeable xx) => Ex cls -> TypeRep
-- b (MkEx (_::xx)) = typeRep @_ @xx Proxy

c :: (forall xx. cls xx => Show xx) => Ex cls -> String
c (MkEx xx) = show xx

but uncommenting b is too much:

$ qc hs/189-bug.hs
GHCi, version 8.5.20180128: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( hs/189-bug.hs, interpreted )

hs/189-bug.hs:12:20: error:
    • Could not deduce (Typeable xx) arising from a use of ‘typeRep’
      from the context: forall xx. cls xx => Typeable xx
        bound by the type signature for:
                   b :: forall (cls :: * -> Constraint).
                        (forall xx. cls xx => Typeable xx) =>
                        Ex cls -> TypeRep
        at hs/189-bug.hs:11:1-60
      or from: cls xx
        bound by a pattern with constructor:
                   MkEx :: forall xx (cls :: * -> Constraint). cls xx => xx -> Ex cls,
                 in an equation for ‘b’
        at hs/189-bug.hs:12:4-15
    • In the expression: typeRep @_ @xx Proxy
      In an equation for ‘b’: b (MkEx (_ :: xx)) = typeRep @_ @xx Proxy
   |
12 | b (MkEx (_::xx)) = typeRep @_ @xx Proxy
   |                    ^^^^^^^^^^^^^^^^^^^^
Failed, no modules loaded.
Prelude> 

This is maybe because of the Typeable solver.

Trac metadata
Trac field Value
Version 8.5
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information