summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface/Ext/Ast.hs
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2020-05-25 16:11:10 -0400
committerRyan Scott <ryan.gl.scott@gmail.com>2020-06-13 07:17:43 -0400
commita948040ba1048e2f204677b70725bab3f07f054a (patch)
treef7da8f7883c0452d193f58beed20ed200b0a7676 /compiler/GHC/Iface/Ext/Ast.hs
parent8bba1c26193e704d2d6bb2be9a2fac668b0ea54c (diff)
downloadhaskell-wip/T18235.tar.gz
Use HsForAllTelescope to avoid inferred, visible forallswip/T18235
Currently, `HsForAllTy` permits the combination of `ForallVis` and `Inferred`, but you can't actually typecheck code that uses it (e.g., `forall {a} ->`). This patch refactors `HsForAllTy` to use a new `HsForAllTelescope` data type that makes a type-level distinction between visible and invisible `forall`s such that visible `forall`s do not track `Specificity`. That part of the patch is actually quite small; the rest is simply changing consumers of `HsType` to accommodate this new type. Fixes #18235. Bumps the `haddock` submodule.
Diffstat (limited to 'compiler/GHC/Iface/Ext/Ast.hs')
-rw-r--r--compiler/GHC/Iface/Ext/Ast.hs9
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/GHC/Iface/Ext/Ast.hs b/compiler/GHC/Iface/Ext/Ast.hs
index c50514ffe1..24a3aa7c5b 100644
--- a/compiler/GHC/Iface/Ext/Ast.hs
+++ b/compiler/GHC/Iface/Ext/Ast.hs
@@ -1633,8 +1633,13 @@ instance ToHie (LHsType GhcRn) where
instance ToHie (TScoped (LHsType GhcRn)) where
toHie (TS tsc (L span t)) = concatM $ makeNode t span : case t of
- HsForAllTy _ _ bndrs body ->
- [ toHie $ tvScopes tsc (mkScope $ getLoc body) bndrs
+ HsForAllTy _ tele body ->
+ let scope = mkScope $ getLoc body in
+ [ case tele of
+ HsForAllVis { hsf_vis_bndrs = bndrs } ->
+ toHie $ tvScopes tsc scope bndrs
+ HsForAllInvis { hsf_invis_bndrs = bndrs } ->
+ toHie $ tvScopes tsc scope bndrs
, toHie body
]
HsQualTy _ ctx body ->