diff options
author | sheaf <sam.derbyshire@gmail.com> | 2023-05-15 15:23:49 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-05-15 18:03:00 -0400 |
commit | 4d29ecdfcc79ad663e066d9f7d6d17b64c8c6c41 (patch) | |
tree | 985890c63aee54a2e94e31aa85cbec44652987b9 /testsuite/tests/backpack/should_compile/bkp61.bkp | |
parent | d69cbd78999071d2d6479be40ae90ddd83b9942a (diff) | |
download | haskell-4d29ecdfcc79ad663e066d9f7d6d17b64c8c6c41.tar.gz |
Migrate errors to diagnostics in GHC.Tc.Module
This commit migrates the errors in GHC.Tc.Module to use the new
diagnostic infrastructure.
It required a significant overhaul of the compatibility checks between
an hs-boot or signature module and its implementation; we now use
a Writer monad to accumulate errors; see the BootMismatch datatype
in GHC.Tc.Errors.Types, with its panoply of subtypes.
For the sake of readability, several local functions inside the
'checkBootTyCon' function were split off into top-level functions.
We split off GHC.Types.HscSource into a "boot or sig" vs "normal hs file"
datatype, as this mirrors the logic in several other places where we
want to treat hs-boot and hsig files in a similar fashion.
This commit also refactors the Backpack checks for type synonyms
implementing abstract data, to correctly reject implementations that
contain qualified or quantified types (this fixes #23342 and #23344).
Diffstat (limited to 'testsuite/tests/backpack/should_compile/bkp61.bkp')
-rw-r--r-- | testsuite/tests/backpack/should_compile/bkp61.bkp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/testsuite/tests/backpack/should_compile/bkp61.bkp b/testsuite/tests/backpack/should_compile/bkp61.bkp new file mode 100644 index 0000000000..3ad7d721bb --- /dev/null +++ b/testsuite/tests/backpack/should_compile/bkp61.bkp @@ -0,0 +1,36 @@ +-- Check that we can implement abstract data using a data family. + +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE TypeFamilies #-} + +unit p where + signature H where + import Data.Kind + type T :: Bool -> Type + data T b + turnOff :: T True -> T False + turnOn :: T False -> T True + module A where + import H + foo :: T True -> T True + foo = turnOn . turnOff + +unit q where + module H where + import Data.Kind + type D :: Bool -> Type + data family D a + data instance D True = DT + data instance D False = DF + turnOff DT = DF + turnOn DF = DT + + type S = D + type T = S + +unit r where + dependency q + dependency p[H=q:H] + module N where + import A + bar = foo . foo |