[GHC] #12919: Equality not used for substitution
GHC
ghc-devs at haskell.org
Mon Dec 5 13:16:31 UTC 2016
#12919: Equality not used for substitution
-------------------------------------+-------------------------------------
Reporter: int-index | Owner: goldfire
Type: bug | Status: new
Priority: highest | Milestone:
Component: Compiler (Type | Version: 8.0.1
checker) |
Resolution: | Keywords: TypeInType
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by int-index:
@@ -10,1 +10,1 @@
- data Nat = Z
+ data N = Z
@@ -12,2 +12,2 @@
- data D :: Nat -> Type where
- DZ :: D Z
+ data V :: N -> Type where
+ VZ :: V Z
@@ -15,1 +15,1 @@
- type family VC (n :: Nat) :: Type where
+ type family VC (n :: N) :: Type where
@@ -18,2 +18,2 @@
- type family VF (xs :: D n) (f :: VC n) :: Type where
- VF DZ f = f
+ type family VF (xs :: V n) (f :: VC n) :: Type where
+ VF VZ f = f
@@ -24,1 +24,1 @@
- prop :: xs ~ DZ => Dict (VF xs f ~ f)
+ prop :: xs ~ VZ => Dict (VF xs f ~ f)
@@ -31,1 +31,1 @@
- Op.hs:20:8: error:
+ T12919.hs:22:8: error:
@@ -37,1 +37,1 @@
- at Op.hs:19:9
+ at T12919.hs:21:9
@@ -41,1 +41,1 @@
- prop :: Dict VF xs f ~ f (bound at Op.hs:20:1)
+ prop :: Dict VF xs f ~ f (bound at T12919.hs:22:1)
New description:
This code
{{{
{-# LANGUAGE TypeInType, TypeFamilies, GADTs, ConstraintKinds #-}
module T12919 where
import Data.Kind
data N = Z
data V :: N -> Type where
VZ :: V Z
type family VC (n :: N) :: Type where
VC Z = Type
type family VF (xs :: V n) (f :: VC n) :: Type where
VF VZ f = f
data Dict c where
Dict :: c => Dict c
prop :: xs ~ VZ => Dict (VF xs f ~ f)
prop = Dict
}}}
fails with this error:
{{{
T12919.hs:22:8: error:
• Couldn't match type ‘f’ with ‘VF 'VZ f’
arising from a use of ‘Dict’
‘f’ is a rigid type variable bound by
the type signature for:
prop :: forall (xs :: V 'Z) f. xs ~ 'VZ => Dict VF xs f ~ f
at T12919.hs:21:9
• In the expression: Dict
In an equation for ‘prop’: prop = Dict
• Relevant bindings include
prop :: Dict VF xs f ~ f (bound at T12919.hs:22:1)
}}}
However, if I substitute `xs` with `VZ` (by hand) in the type of `prop`,
it compiles. Can be reproduced with GHC 8.0.1 but not HEAD.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12919#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list