summaryrefslogtreecommitdiff
path: root/testsuite/tests/indexed-types
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2018-07-11 12:28:38 -0400
committerRyan Scott <ryan.gl.scott@gmail.com>2018-07-11 12:28:38 -0400
commit1c3536239cb5e83ff1427ac410d8fa2549e7d9c0 (patch)
tree585787904cb8ce8b1b755ca85fb11eeec206fe6c /testsuite/tests/indexed-types
parente24da5edb4709bdb050c8d0676f302d0b87b8446 (diff)
downloadhaskell-1c3536239cb5e83ff1427ac410d8fa2549e7d9c0.tar.gz
Use IfaceAppArgs to store an IfaceAppTy's arguments
Summary: Currently, an `IfaceAppTy` has no way to tell whether its argument is visible or not, so it simply treats all arguments as visible, leading to #15330. We already have a solution for this problem in the form of the `IfaceTcArgs` data structure, used by `IfaceTyConApp` to represent the arguments to a type constructor. Therefore, it makes sense to reuse this machinery for `IfaceAppTy`, so this patch does just that. This patch: 1. Renames `IfaceTcArgs` to `IfaceAppArgs` to reflect its more general purpose. 2. Changes the second field of `IfaceAppTy` from `IfaceType` to `IfaceAppArgs`, and propagates the necessary changes through. In particular, pretty-printing an `IfaceAppTy` now goes through the `IfaceAppArgs` pretty-printer, which correctly displays arguments as visible or not for free, fixing #15330. 3. Changes `toIfaceTypeX` and related functions so that when converting an `AppTy` to an `IfaceAppTy`, it flattens as many argument `AppTy`s as possible, and then converts those arguments into an `IfaceAppArgs` list, using the kind of the function `Type` as a guide. (Doing so minimizes the number of times we need to call `typeKind`, which is more expensive that finding the kind of a `TyCon`.) Test Plan: make test TEST=T15330 Reviewers: goldfire, simonpj, bgamari Reviewed By: simonpj Subscribers: rwbarton, thomie, carter GHC Trac Issues: #15330 Differential Revision: https://phabricator.haskell.org/D4938
Diffstat (limited to 'testsuite/tests/indexed-types')
-rw-r--r--testsuite/tests/indexed-types/should_fail/T14369.stderr6
1 files changed, 3 insertions, 3 deletions
diff --git a/testsuite/tests/indexed-types/should_fail/T14369.stderr b/testsuite/tests/indexed-types/should_fail/T14369.stderr
index 4cac995464..96e55d2f1e 100644
--- a/testsuite/tests/indexed-types/should_fail/T14369.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T14369.stderr
@@ -1,9 +1,9 @@
T14369.hs:27:5: error:
• Couldn't match type ‘Demote a’ with ‘Demote a1’
- Expected type: Sing (x a) -> Maybe (Demote a1)
- Actual type: Sing (x a) -> Demote (Maybe a)
+ Expected type: Sing x -> Maybe (Demote a1)
+ Actual type: Sing x -> Demote (Maybe a)
• In the expression: fromSing
In an equation for ‘f’: f = fromSing
• Relevant bindings include
- f :: Sing (x a) -> Maybe (Demote a1) (bound at T14369.hs:27:1)
+ f :: Sing x -> Maybe (Demote a1) (bound at T14369.hs:27:1)