From 8e6ec0fa7431b0454b09c0011a615f0845df1198 Mon Sep 17 00:00:00 2001 From: Alan Zimmerman Date: Fri, 19 May 2017 14:56:09 +0200 Subject: Udate hsSyn AST to use Trees that Grow Summary: See https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow This commit prepares the ground for a full extensible AST, by replacing the type parameter for the hsSyn data types with a set of indices into type families, data GhcPs -- ^ Index for GHC parser output data GhcRn -- ^ Index for GHC renamer output data GhcTc -- ^ Index for GHC typechecker output These are now used instead of `RdrName`, `Name` and `Id`/`TcId`/`Var` Where the original name type is required in a polymorphic context, this is accessible via the IdP type family, defined as type family IdP p type instance IdP GhcPs = RdrName type instance IdP GhcRn = Name type instance IdP GhcTc = Id These types are declared in the new 'hsSyn/HsExtension.hs' module. To gain a better understanding of the extension mechanism, it has been applied to `HsLit` only, also replacing the `SourceText` fields in them with extension types. To preserve extension generality, a type class is introduced to capture the `SourceText` interface, which must be honoured by all of the extension points which originally had a `SourceText`. The class is defined as class HasSourceText a where -- Provide setters to mimic existing constructors noSourceText :: a sourceText :: String -> a setSourceText :: SourceText -> a getSourceText :: a -> SourceText And the constraint is captured in `SourceTextX`, which is a constraint type listing all the extension points that make use of the class. Updating Haddock submodule to match. Test Plan: ./validate Reviewers: simonpj, shayan-najd, goldfire, austin, bgamari Subscribers: rwbarton, thomie, mpickering Differential Revision: https://phabricator.haskell.org/D3609 --- compiler/backpack/BkpSyn.hs | 3 +-- compiler/backpack/DriverBkp.hs | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'compiler/backpack') diff --git a/compiler/backpack/BkpSyn.hs b/compiler/backpack/BkpSyn.hs index a7e4db30dd..842c0df49d 100644 --- a/compiler/backpack/BkpSyn.hs +++ b/compiler/backpack/BkpSyn.hs @@ -18,7 +18,6 @@ module BkpSyn ( ) where import HsSyn -import RdrName import SrcLoc import Outputable import Module @@ -61,7 +60,7 @@ type LHsUnit n = Located (HsUnit n) -- or an include. data HsDeclType = ModuleD | SignatureD data HsUnitDecl n - = DeclD HsDeclType (Located ModuleName) (Maybe (Located (HsModule RdrName))) + = DeclD HsDeclType (Located ModuleName) (Maybe (Located (HsModule GhcPs))) | IncludeD (IncludeDecl n) type LHsUnitDecl n = Located (HsUnitDecl n) diff --git a/compiler/backpack/DriverBkp.hs b/compiler/backpack/DriverBkp.hs index a82e66b7b0..6123bc8133 100644 --- a/compiler/backpack/DriverBkp.hs +++ b/compiler/backpack/DriverBkp.hs @@ -709,7 +709,7 @@ summariseRequirement pn mod_name = do summariseDecl :: PackageName -> HscSource -> Located ModuleName - -> Maybe (Located (HsModule RdrName)) + -> Maybe (Located (HsModule GhcPs)) -> BkpM ModSummary summariseDecl pn hsc_src (L _ modname) (Just hsmod) = hsModuleToModSummary pn hsc_src modname hsmod summariseDecl _pn hsc_src lmodname@(L loc modname) Nothing @@ -736,7 +736,7 @@ summariseDecl _pn hsc_src lmodname@(L loc modname) Nothing hsModuleToModSummary :: PackageName -> HscSource -> ModuleName - -> Located (HsModule RdrName) + -> Located (HsModule GhcPs) -> BkpM ModSummary hsModuleToModSummary pn hsc_src modname hsmod = do -- cgit v1.2.1