isTySuperKind, isCoSuperKind,
tySuperKindTyCon, coSuperKindTyCon,
- isCoercionKindTyCon,
-
pprKind, pprParendKind
) where
#include "HsVersions.h"
import {-# SOURCE #-} DataCon( DataCon, dataConName )
-import Monad ( guard )
-- friends:
import Var ( Var, Id, TyVar, tyVarKind )
import Name ( Name, NamedThing(..), BuiltInSyntax(..), mkWiredInName )
import OccName ( mkOccNameFS, tcName, parenSymOcc )
import BasicTypes ( IPName, tupleParens )
-import TyCon ( TyCon, mkFunTyCon, tyConArity, tupleTyConBoxity, isTupleTyCon, isRecursiveTyCon, isNewTyCon, mkVoidPrimTyCon, mkSuperKindTyCon, isSuperKindTyCon, mkCoercionTyCon )
+import TyCon ( TyCon, mkFunTyCon, tyConArity, tupleTyConBoxity, isTupleTyCon,
+ isRecursiveTyCon, isNewTyCon, mkVoidPrimTyCon,
+ mkSuperKindTyCon )
import Class ( Class )
-- others
coSuperKindTyConKey, liftedTypeKindTyConKey,
openTypeKindTyConKey, unliftedTypeKindTyConKey,
ubxTupleKindTyConKey, argTypeKindTyConKey, listTyConKey,
- parrTyConKey, hasKey, eqCoercionKindTyConKey )
+ parrTyConKey, hasKey )
import Outputable
\end{code}
type SuperKind = Type -- Invariant: a super kind is always
-- TyConApp SuperKindTyCon ...
-type Coercion = Type
-
-type CoercionKind = Kind
-
data TyNote = FTVNote TyVarSet -- The free type variables of the noted expression
\end{code}
unliftedTypeKindTyCon = mkKindTyCon unliftedTypeKindTyConName
ubxTupleKindTyCon = mkKindTyCon ubxTupleKindTyConName
argTypeKindTyCon = mkKindTyCon argTypeKindTyConName
-eqCoercionKindTyCon =
- mkCoercionTyCon eqCoercionKindTyConName 2 (\ _ -> coSuperKind)
mkKindTyCon :: Name -> TyCon
mkKindTyCon name = mkVoidPrimTyCon name tySuperKind 0
liftedTypeKindTyConName = mkPrimTyConName FSLIT("*") liftedTypeKindTyConKey liftedTypeKindTyCon
openTypeKindTyConName = mkPrimTyConName FSLIT("?") openTypeKindTyConKey openTypeKindTyCon
unliftedTypeKindTyConName = mkPrimTyConName FSLIT("#") unliftedTypeKindTyConKey unliftedTypeKindTyCon
-ubxTupleKindTyConName = mkPrimTyConName FSLIT("(##)") ubxTupleKindTyConKey ubxTupleKindTyCon
+ubxTupleKindTyConName = mkPrimTyConName FSLIT("(#)") ubxTupleKindTyConKey ubxTupleKindTyCon
argTypeKindTyConName = mkPrimTyConName FSLIT("??") argTypeKindTyConKey argTypeKindTyCon
funTyConName = mkPrimTyConName FSLIT("(->)") funTyConKey funTyCon
-eqCoercionKindTyConName = mkWiredInName gHC_PRIM (mkOccNameFS tcName (FSLIT(":=:")))
- eqCoercionKindTyConKey Nothing (ATyCon eqCoercionKindTyCon)
- BuiltInSyntax
-
mkPrimTyConName occ key tycon = mkWiredInName gHC_PRIM (mkOccNameFS tcName occ)
key
- Nothing -- No parent object
(ATyCon tycon)
BuiltInSyntax
-- All of the super kinds and kinds are defined in Prim and use BuiltInSyntax,
isCoSuperKind (TyConApp kc []) = kc `hasKey` coSuperKindTyConKey
isCoSuperKind other = False
-isCoercionKindTyCon kc = kc `hasKey` eqCoercionKindTyConKey
-
-
-------------------
-- lastly we need a few functions on Kinds