[GHC] #13197: Perplexing levity polymorphism issue
GHC
ghc-devs at haskell.org
Sat Jan 28 02:54:50 UTC 2017
#13197: Perplexing levity polymorphism issue
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner:
Type: bug | Status: new
Priority: highest | Milestone: 8.2.1
Component: Compiler | Version: 8.1
(Type checker) |
Keywords: typeable | 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:
-------------------------------------+-------------------------------------
I would have expected this to compile since the levity polymorphism patch
was merged, but sadly it seems the typechecker isn't quite clever enough
yet (or perhaps I'm the not clever one),
{{{#!hs
{-# LANGUAGE GADTs, PolyKinds, PatternSynonyms, RankNTypes,
TypeOperators, ViewPatterns #-}
{-# LANGUAGE TypeInType #-}
module Test where
import Data.Kind
import GHC.Exts
data TypeRep (a :: k) where
TypeCon :: String -> TypeRep a
TypeApp :: forall k1 k2 (f :: k1 -> k2) (x :: k1). TypeRep f -> TypeRep
x -> TypeRep (f x)
TypeFun :: forall r1 r2 (a :: TYPE r1) (b :: TYPE r2). TypeRep a ->
TypeRep b -> TypeRep (a -> b)
data SomeTypeRep where
SomeTypeRep :: forall k (a :: k). TypeRep a -> SomeTypeRep
data (a :: k1) :~~: (b :: k2) where
HRefl :: a :~~: a
eqTypeRep :: TypeRep (a :: k1) -> TypeRep (b :: k2) -> Maybe (a :~~: b)
eqTypeRep = undefined
typeRepKind :: forall (k :: *). forall (a :: k). TypeRep a -> TypeRep k
typeRepKind = undefined
toApp :: SomeTypeRep -> SomeTypeRep -> Maybe SomeTypeRep
toApp (SomeTypeRep f) (SomeTypeRep a)
| TypeFun arg res <- typeRepKind f
, Just HRefl <- arg `eqTypeRep` typeRepKind a
= Just $ SomeTypeRep (TypeApp f a)
toApp _ _ = Nothing
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13197>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list