Define GHC.Types.Coercible
authorJoachim Breitner <mail@joachim-breitner.de>
Fri, 13 Sep 2013 16:45:35 +0000 (18:45 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Fri, 13 Sep 2013 19:59:21 +0000 (21:59 +0200)
This data type is required so that Coercible (which is actually a class
and is exported from GHC.Prim) has a info table etc., similar to ~

libraries/ghc-prim/GHC/Types.hs

index e7983e7..1a582bf 100644 (file)
@@ -85,3 +85,8 @@ newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
 -- has kind (? -> ? -> Fact) rather than (* -> * -> *)
 data (~) a b = Eq# ((~#) a b)
 
+-- | A data constructor used to box up unlifted representational equalities.
+--
+-- The type constructor is special as GHC pretends the field of EqR# has type
+-- (a ~R# b), which is not representable in Haskell, and turns it into a class.
+data Coercible a b = MkCoercible ((~#) a b)