diff options
Diffstat (limited to 'testsuite/tests/rep-poly/RepPolyBackpack5.bkp')
-rw-r--r-- | testsuite/tests/rep-poly/RepPolyBackpack5.bkp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/testsuite/tests/rep-poly/RepPolyBackpack5.bkp b/testsuite/tests/rep-poly/RepPolyBackpack5.bkp new file mode 100644 index 0000000000..691094d7c9 --- /dev/null +++ b/testsuite/tests/rep-poly/RepPolyBackpack5.bkp @@ -0,0 +1,46 @@ +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE PolyKinds #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE RoleAnnotations #-} +{-# LANGUAGE StandaloneKindSignatures #-} +{-# LANGUAGE UnliftedDatatypes #-} + +unit number-unknown where + signature NumberUnknown where + import GHC.Types + import GHC.Exts + data Rep (l :: Levity) :: RuntimeRep + data Number l :: TYPE (Rep l) + fromInt :: Int -> Number l + internal_toInt :: Number Lifted -> Int + -- representation-polymorphism in return position: no problem + module SomeNumber where + import GHC.Types + import NumberUnknown + someNumber :: proxy l -> Number l + someNumber _ = fromInt 1728 + toInt :: Number Lifted -> Int + toInt = internal_toInt + +unit number-int where + module NumberUnknown where + import GHC.Types + type Rep = 'BoxedRep + + type Number :: forall (l :: Levity) -> TYPE (Rep l) + data Number l = MkNumber Int + type role Number nominal + + fromInt :: Int -> Number l + fromInt = MkNumber + internal_toInt (MkNumber i) = i + +unit main where + dependency number-unknown[NumberUnknown=number-int:NumberUnknown] + module Main where + import SomeNumber + import Data.Proxy + import GHC.Exts + main = + case someNumber (Proxy @Lifted) of + number -> print (toInt number) |