diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2017, Sylvain Henry
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Sylvain Henry nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/ghc-api-compat.cabal b/ghc-api-compat.cabal
new file mode 100644
--- /dev/null
+++ b/ghc-api-compat.cabal
@@ -0,0 +1,300 @@
+name:                ghc-api-compat
+version:             8.6
+synopsis:            GHC-API compatibility helpers
+description:
+   GHC codebase is a moving target. This package provides
+   compatibility for codes relying on an older GHC-API version.
+license:             BSD3
+license-file:        LICENSE
+author:              Sylvain Henry
+maintainer:          sylvain@haskus.fr
+copyright:           Sylvain Henry 2020
+category:            Development
+build-type:          Simple
+cabal-version:       1.22
+
+library
+   build-depends:
+      ghc >= 8.6
+   default-language:    Haskell2010
+
+   if impl(ghc >= 8.10) && impl(ghc < 8.11)
+      reexported-modules:
+         GHC.Hs.PlaceHolder             as PlaceHolder
+
+   if impl(ghc >= 8.10)
+      reexported-modules:
+           GHC.Hs.Binds                   as HsBinds
+         , GHC.Hs.Decls                   as HsDecls
+         , GHC.Hs.Doc                     as HsDoc
+         , GHC.Hs.Dump                    as HsDumpAst
+         , GHC.Hs.Expr                    as HsExpr
+         , GHC.Hs.Extension               as HsExtension
+         , GHC.Hs                         as HsSyn
+         , GHC.Hs.ImpExp                  as HsImpExp
+         , GHC.Hs.Instances               as HsInstances
+         , GHC.Hs.Lit                     as HsLit
+         , GHC.Hs.Pat                     as HsPat
+         , GHC.Hs.Types                   as HsTypes
+         , GHC.Hs.Utils                   as HsUtils
+
+         , GHC.Platform.ARM64             as CodeGen.Platform.ARM64
+         , GHC.Platform.ARM               as CodeGen.Platform.ARM
+         , GHC.Platform.NoRegs            as CodeGen.Platform.NoRegs
+         , GHC.Platform.PPC               as CodeGen.Platform.PPC
+         , GHC.Platform.Regs              as CodeGen.Platform
+         , GHC.Platform.SPARC             as CodeGen.Platform.SPARC
+         , GHC.Platform.X86_64            as CodeGen.Platform.X86_64
+         , GHC.Platform.X86               as CodeGen.Platform.X86
+
+         , GHC.StgToCmm.ArgRep            as StgCmmArgRep
+         , GHC.StgToCmm.Bind              as StgCmmBind
+         , GHC.StgToCmm.CgUtils           as CgUtils
+         , GHC.StgToCmm.Closure           as StgCmmClosure
+         , GHC.StgToCmm.DataCon           as StgCmmCon
+         , GHC.StgToCmm.Env               as StgCmmEnv
+         , GHC.StgToCmm.Expr              as StgCmmExpr
+         , GHC.StgToCmm.ExtCode           as StgCmmExtCode
+         , GHC.StgToCmm.Foreign           as StgCmmForeign
+         , GHC.StgToCmm.Heap              as StgCmmHeap
+         , GHC.StgToCmm.Hpc               as StgCmmHpc
+         , GHC.StgToCmm                   as StgCmm
+         , GHC.StgToCmm.Layout            as StgCmmLayout
+         , GHC.StgToCmm.Monad             as StgCmmMonad
+         , GHC.StgToCmm.Prim              as StgCmmPrim
+         , GHC.StgToCmm.Prof              as StgCmmProf
+         , GHC.StgToCmm.Ticky             as StgCmmTicky
+         , GHC.StgToCmm.Utils             as StgCmmUtils
+
+         , GHC.ThToHs                     as Convert
+
+         , GHC.HsToCore.PmCheck           as Check
+         , GHC.HsToCore.PmCheck.Oracle    as PmOracle
+         , GHC.HsToCore.PmCheck.Ppr       as PmPpr
+         , GHC.HsToCore.PmCheck.Types     as PmTypes
+
+
+   if impl(ghc >= 8.11)
+      reexported-modules:
+           GHC.Rename.Binds               as RnBinds
+         , GHC.Rename.Env                 as RnEnv
+         , GHC.Rename.Expr                as RnExpr
+         , GHC.Rename.Fixity              as RnFixity
+         , GHC.Rename.Doc                 as RnHsDoc
+         , GHC.Rename.Names               as RnNames
+         , GHC.Rename.Pat                 as RnPat
+         , GHC.Rename.Source              as RnSource
+         , GHC.Rename.Splice              as RnSplice
+         , GHC.Rename.Types               as RnTypes
+         , GHC.Rename.Unbound             as RnUnbound
+         , GHC.Rename.Utils               as RnUtils
+
+         , GHC.Types.RepType              as RepType
+
+         , GHC.Cmm.BlockId                as BlockId
+         , GHC.Cmm.CLabel                 as CLabel
+         , GHC.Cmm.CallConv               as CmmCallConv
+         , GHC.Cmm.CommonBlockElim        as CmmCommonBlockElim
+         , GHC.Cmm.ContFlowOpt            as CmmContFlowOpt
+         , GHC.Cmm.Expr                   as CmmExpr
+         , GHC.Cmm                        as Cmm
+         , GHC.Cmm.Switch                 as CmmSwitch
+         , GHC.Cmm.Switch.Implement       as CmmImplementSwitchPlans
+         , GHC.Cmm.Info                   as CmmInfo
+         , GHC.Cmm.Info.Build             as CmmBuildInfoTables
+         , GHC.Cmm.LayoutStack            as CmmLayoutStack
+         , GHC.Cmm.Lint                   as CmmLint
+         , GHC.Cmm.Liveness               as CmmLive
+         , GHC.Cmm.MachOp                 as CmmMachOp
+         , GHC.Cmm.Monad                  as CmmMonad
+         , GHC.Cmm.Node                   as CmmNode
+         , GHC.Cmm.Opt                    as CmmOpt
+         , GHC.Cmm.Pipeline               as CmmPipeline
+         , GHC.Cmm.ProcPoint              as CmmProcPoint
+         , GHC.Cmm.Sink                   as CmmSink
+         , GHC.Cmm.Type                   as CmmType
+         , GHC.Cmm.Utils                  as CmmUtils
+         , GHC.Cmm.DebugBlock             as Debug
+         , GHC.Cmm.Dataflow.Block         as Hoopl.Block
+         , GHC.Cmm.Dataflow.Collections   as Hoopl.Collections
+         , GHC.Cmm.Dataflow               as Hoopl.Dataflow
+         , GHC.Cmm.Dataflow.Graph         as Hoopl.Graph
+         , GHC.Cmm.Dataflow.Label         as Hoopl.Label
+         , GHC.Cmm.Graph                  as MkGraph
+         , GHC.Cmm.Ppr.Decl               as PprCmmDecl
+         , GHC.Cmm.Ppr.Expr               as PprCmmExpr
+         , GHC.Cmm.Ppr                    as PprCmm
+         , GHC.Cmm.Lexer                  as CmmLex
+         , GHC.Cmm.Parser                 as CmmParse
+
+         , GHC.CmmToC                     as PprC
+
+         , GHC.HsToCore                   as Desugar
+         , GHC.HsToCore.Coverage          as Coverage
+         , GHC.HsToCore.Arrows            as DsArrows
+         , GHC.HsToCore.Binds             as DsBinds
+         , GHC.HsToCore.Foreign.Call      as DsCCall
+         , GHC.HsToCore.Foreign.Decl      as DsForeign
+         , GHC.HsToCore.Expr              as DsExpr
+         , GHC.HsToCore.GuardedRHSs       as DsGRHSs
+         , GHC.HsToCore.ListComp          as DsListComp
+         , GHC.HsToCore.Quote             as DsMeta
+         , GHC.HsToCore.Monad             as DsMonad
+         , GHC.HsToCore.Usage             as DsUsage
+         , GHC.HsToCore.Utils             as DsUtils
+         , GHC.HsToCore.Docs              as ExtractDocs
+         , GHC.HsToCore.Match             as Match
+         , GHC.HsToCore.Match.Constructor as MatchCon
+         , GHC.HsToCore.Match.Literal     as MatchLit
+
+         , GHC.Stg.Pipeline               as SimplStg
+         , GHC.Stg.CSE                    as StgCse
+         , GHC.Stg.Stats                  as StgStats
+         , GHC.Stg.Unarise                as UnariseStg
+         , GHC.Stg.FVs                    as StgFVs
+         , GHC.Stg.Lint                   as StgLint
+         , GHC.Stg.Subst                  as StgSubst
+         , GHC.Stg.Syntax                 as StgSyn
+
+         , GHC.Stg.Lift                   as StgLiftLams
+         , GHC.Stg.Lift.Analysis          as StgLiftLams.Analysis
+         , GHC.Stg.Lift.Monad             as StgLiftLams.LiftM
+
+         , GHC.CoreToStg                  as CoreToStg
+         , GHC.CoreToStg.Prep             as CorePrep
+
+         , GHC.Iface.Binary               as BinIface
+         , GHC.Iface.Env                  as IfaceEnv
+         , GHC.Iface.Syntax               as IfaceSyn
+         , GHC.Iface.Type                 as IfaceType
+         , GHC.Iface.Load                 as LoadIface
+         , GHC.Iface.Utils                as MkIface
+         , GHC.Iface.Rename               as RnModIface
+         , GHC.Iface.Tidy                 as TidyPgm
+
+         , GHC.Iface.Ext.Ast              as HieAst
+         , GHC.Iface.Ext.Binary           as HieBin
+         , GHC.Iface.Ext.Debug            as HieDebug
+         , GHC.Iface.Ext.Types            as HieTypes
+         , GHC.Iface.Ext.Utils            as HieUtils
+
+         , GHC.IfaceToCore                as TcIface
+         , GHC.CoreToIface                as ToIface
+
+         , GHC.Data.Bitmap                as Bitmap
+
+         , GHC.Runtime.Debugger           as Debugger
+         , GHC.Runtime.Interpreter        as GHCi
+         , GHC.Runtime.Linker             as Linker
+         , GHC.Runtime.Linker.Types       as LinkerTypes
+         , GHC.Runtime.Loader             as DynamicLoading
+         , GHC.Runtime.Eval               as InteractiveEval
+         , GHC.Runtime.Eval.Types         as InteractiveEvalTypes
+         , GHC.Runtime.Heap.Layout        as SMRep
+         , GHC.Runtime.Heap.Inspect       as RtClosureInspect
+
+         , GHC.ByteCode.Asm               as ByteCodeAsm
+         , GHC.ByteCode.Instr             as ByteCodeInstr
+         , GHC.ByteCode.InfoTable         as ByteCodeItbls
+         , GHC.ByteCode.Linker            as ByteCodeLink
+         , GHC.ByteCode.Types             as ByteCodeTypes
+
+         , GHC.CoreToByteCode             as ByteCodeGen
+
+         , GHC.Llvm.MetaData              as Llvm.MetaData
+         , GHC.Llvm.Ppr                   as Llvm.PpLlvm
+         , GHC.Llvm.Types                 as Llvm.Types
+         , GHC.Llvm.Syntax                as Llvm.AbsSyn
+         , GHC.Llvm                       as Llvm
+         , GHC.CmmToLlvm                  as LlvmCodeGen
+         , GHC.CmmToLlvm.Mangler          as LlvmMangler
+         , GHC.CmmToLlvm.Base             as LlvmCodeGen.Base
+         , GHC.CmmToLlvm.CodeGen          as LlvmCodeGen.CodeGen
+         , GHC.CmmToLlvm.Data             as LlvmCodeGen.Data
+         , GHC.CmmToLlvm.Ppr              as LlvmCodeGen.Ppr
+         , GHC.CmmToLlvm.Regs             as LlvmCodeGen.Regs
+         , GHC.Driver.Backpack.Syntax     as BkpSyn
+         , GHC.Driver.Backpack            as DriverBkp
+         , GHC.Driver.CmdLine             as CmdLineParser
+         , GHC.Driver.CodeOutput          as CodeOutput
+         , GHC.Driver.Finder              as Finder
+         , GHC.Driver.MakeFile            as DriverMkDepend
+         , GHC.Driver.Main                as HscMain
+         , GHC.Driver.Make                as GhcMake
+         , GHC.Driver.Hooks               as Hooks
+         , GHC.Driver.Session             as DynFlags
+         , GHC.Driver.Packages            as Packages
+         , GHC.Driver.Phases              as DriverPhases
+         , GHC.Driver.Pipeline            as DriverPipeline
+         , GHC.Driver.Pipeline.Monad      as PipelineMonad
+         , GHC.Driver.Plugins             as Plugins
+         , GHC.Driver.Monad               as GhcMonad
+         , GHC.Driver.Types               as HscTypes
+         , GHC.Plugins                    as GhcPlugins
+         , GHC                            as GHC
+         , GHC.CmmToAsm                          as AsmCodeGen
+         , GHC.CmmToAsm.BlockLayout              as BlockLayout
+         , GHC.CmmToAsm.CFG                      as CFG
+         , GHC.CmmToAsm.CFG.Dominators           as Dominators
+         , GHC.CmmToAsm.CPrim                    as CPrim
+         , GHC.CmmToAsm.Dwarf.Constants          as Dwarf.Constants
+         , GHC.CmmToAsm.Dwarf                    as Dwarf
+         , GHC.CmmToAsm.Dwarf.Types              as Dwarf.Types
+         , GHC.CmmToAsm.Format                   as Format
+         , GHC.CmmToAsm.Instr                    as Instruction
+         , GHC.CmmToAsm.Monad                    as NCGMonad
+         , GHC.CmmToAsm.PIC                      as PIC
+         , GHC.CmmToAsm.Ppr                      as PprBase
+         , GHC.CmmToAsm.Reg.Graph.Base           as RegAlloc.Graph.ArchBase
+         , GHC.CmmToAsm.Reg.Graph.X86            as RegAlloc.Graph.ArchX86
+         , GHC.CmmToAsm.Reg.Graph.Coalesce       as RegAlloc.Graph.Coalesce
+         , GHC.CmmToAsm.Reg.Graph                as RegAlloc.Graph.Main
+         , GHC.CmmToAsm.Reg.Graph.SpillClean     as RegAlloc.Graph.SpillClean
+         , GHC.CmmToAsm.Reg.Graph.SpillCost      as RegAlloc.Graph.SpillCost
+         , GHC.CmmToAsm.Reg.Graph.Spill          as RegAlloc.Graph.Spill
+         , GHC.CmmToAsm.Reg.Graph.Stats          as RegAlloc.Graph.Stats
+         , GHC.CmmToAsm.Reg.Graph.TrivColorable  as RegAlloc.Graph.TrivColorable
+         , GHC.CmmToAsm.Reg.Linear.Base          as RegAlloc.Linear.Base
+         , GHC.CmmToAsm.Reg.Linear.JoinToTargets as RegAlloc.Linear.JoinToTargets
+         , GHC.CmmToAsm.Reg.Linear               as RegAlloc.Linear.Main
+         , GHC.CmmToAsm.Reg.Linear.StackMap      as RegAlloc.Linear.StackMap
+         , GHC.CmmToAsm.Reg.Linear.State         as RegAlloc.Linear.State
+         , GHC.CmmToAsm.Reg.Linear.Stats         as RegAlloc.Linear.Stats
+         , GHC.CmmToAsm.Reg.Linear.FreeRegs      as RegAlloc.Linear.FreeRegs
+         , GHC.CmmToAsm.Reg.Linear.PPC           as RegAlloc.Linear.PPC.FreeRegs
+         , GHC.CmmToAsm.Reg.Linear.SPARC         as RegAlloc.Linear.SPARC.FreeRegs
+         , GHC.CmmToAsm.Reg.Linear.X86_64        as RegAlloc.Linear.X86_64.FreeRegs
+         , GHC.CmmToAsm.Reg.Linear.X86           as RegAlloc.Linear.X86.FreeRegs
+         , GHC.Platform.Reg                      as Reg
+         , GHC.Platform.Reg.Class                as RegClass
+         , GHC.CmmToAsm.Reg.Liveness             as RegAlloc.Liveness
+         , GHC.CmmToAsm.Reg.Target               as TargetReg
+         , GHC.CmmToAsm.PPC.CodeGen              as PPC.CodeGen
+         , GHC.CmmToAsm.PPC.Cond                 as PPC.Cond
+         , GHC.CmmToAsm.PPC.Instr                as PPC.Instr
+         , GHC.CmmToAsm.PPC.Ppr                  as PPC.Ppr
+         , GHC.CmmToAsm.PPC.RegInfo              as PPC.RegInfo
+         , GHC.CmmToAsm.PPC.Regs                 as PPC.Regs
+         , GHC.CmmToAsm.SPARC.AddrMode           as SPARC.AddrMode
+         , GHC.CmmToAsm.SPARC.Base               as SPARC.Base
+         , GHC.CmmToAsm.SPARC.CodeGen.Amode      as SPARC.CodeGen.Amode
+         , GHC.CmmToAsm.SPARC.CodeGen.Base       as SPARC.CodeGen.Base
+         , GHC.CmmToAsm.SPARC.CodeGen.CondCode   as SPARC.CodeGen.CondCode
+         , GHC.CmmToAsm.SPARC.CodeGen.Expand     as SPARC.CodeGen.Expand
+         , GHC.CmmToAsm.SPARC.CodeGen.Gen32      as SPARC.CodeGen.Gen32
+         , GHC.CmmToAsm.SPARC.CodeGen.Gen64      as SPARC.CodeGen.Gen64
+         , GHC.CmmToAsm.SPARC.CodeGen            as SPARC.CodeGen
+         , GHC.CmmToAsm.SPARC.CodeGen.Sanity     as SPARC.CodeGen.Sanity
+         , GHC.CmmToAsm.SPARC.Cond               as SPARC.Cond
+         , GHC.CmmToAsm.SPARC.Imm                as SPARC.Imm
+         , GHC.CmmToAsm.SPARC.Instr              as SPARC.Instr
+         , GHC.CmmToAsm.SPARC.Ppr                as SPARC.Ppr
+         , GHC.CmmToAsm.SPARC.Regs               as SPARC.Regs
+         , GHC.CmmToAsm.SPARC.ShortcutJump       as SPARC.ShortcutJump
+         , GHC.CmmToAsm.SPARC.Stack              as SPARC.Stack
+         , GHC.CmmToAsm.X86.CodeGen              as X86.CodeGen
+         , GHC.CmmToAsm.X86.Cond                 as X86.Cond
+         , GHC.CmmToAsm.X86.Instr                as X86.Instr
+         , GHC.CmmToAsm.X86.Ppr                  as X86.Ppr
+         , GHC.CmmToAsm.X86.RegInfo              as X86.RegInfo
+         , GHC.CmmToAsm.X86.Regs                 as X86.Regs
