diff options
author | sheaf <sam.derbyshire@gmail.com> | 2021-10-15 23:09:39 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-10-17 14:06:46 -0400 |
commit | 81740ce83976e9d6b68594f8a4b489452cca56e5 (patch) | |
tree | 7b41d1529975c2f78eaced81e26e4722d34c212f /testsuite/tests/backpack | |
parent | 65bf3992aebb3c08f0c4e13a3fb89dd5620015a9 (diff) | |
download | haskell-81740ce83976e9d6b68594f8a4b489452cca56e5.tar.gz |
Introduce Concrete# for representation polymorphism checks
PHASE 1: we never rewrite Concrete# evidence.
This patch migrates all the representation polymorphism checks to
the typechecker, using a new constraint form
Concrete# :: forall k. k -> TupleRep '[]
Whenever a type `ty` must be representation-polymorphic
(e.g. it is the type of an argument to a function), we emit a new
`Concrete# ty` Wanted constraint. If this constraint goes
unsolved, we report a representation-polymorphism error to the user.
The 'FRROrigin' datatype keeps track of the context of the
representation-polymorphism check, for more informative error messages.
This paves the way for further improvements, such as
allowing type families in RuntimeReps and improving the soundness
of typed Template Haskell. This is left as future work (PHASE 2).
fixes #17907 #20277 #20330 #20423 #20426
updates haddock submodule
-------------------------
Metric Decrease:
T5642
-------------------------
Diffstat (limited to 'testsuite/tests/backpack')
-rw-r--r-- | testsuite/tests/backpack/should_run/T20133.bkp | 34 | ||||
-rw-r--r-- | testsuite/tests/backpack/should_run/all.T | 1 |
2 files changed, 35 insertions, 0 deletions
diff --git a/testsuite/tests/backpack/should_run/T20133.bkp b/testsuite/tests/backpack/should_run/T20133.bkp new file mode 100644 index 0000000000..304f857ae9 --- /dev/null +++ b/testsuite/tests/backpack/should_run/T20133.bkp @@ -0,0 +1,34 @@ +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE PolyKinds #-} +{-# LANGUAGE DataKinds #-} + +unit number-unknown where + signature NumberUnknown where + import GHC.Types + data Rep a :: RuntimeRep + instance Concrete (Rep a) + data Number a :: TYPE (Rep a) + plus :: Number a -> Number a -> Number a + multiply :: Number a -> Number a -> Number a + module NumberStuff where + import NumberUnknown + funcA :: Number a -> Number a -> Number a + funcA x y = plus x (multiply x y) + +unit number-unboxed-int where + module NumberUnknown where + import GHC.Types + import GHC.Prim + type Rep a = IntRep + type Number a = Int# + plus :: Int# -> Int# -> Int# + plus = (+#) + multiply :: Int# -> Int# -> Int# + multiply = (*#) + +unit main1 where + dependency number-unknown[NumberUnknown=number-unboxed-int:NumberUnknown] + module Main where + import NumberStuff + import GHC.Types + main = print (I# (funcA 2# 3#)) diff --git a/testsuite/tests/backpack/should_run/all.T b/testsuite/tests/backpack/should_run/all.T index c0cde0fdc1..d4deb4f4a8 100644 --- a/testsuite/tests/backpack/should_run/all.T +++ b/testsuite/tests/backpack/should_run/all.T @@ -10,3 +10,4 @@ test('bkprun09', normal, backpack_run, ['-O']) test('T13955', normal, backpack_run, ['']) test('T15138', normal, backpack_run, ['']) test('T15379', normal, backpack_run,['']) +test('T20133', expect_broken(20133), backpack_run, ['']) |