packages feed

evoke-0.2021.8.25: src/lib/Evoke/Hs.hs

module Evoke.Hs
  ( app
  , bindStmt
  , doExpr
  , explicitList
  , explicitTuple
  , fieldOcc
  , funBind
  , grhs
  , grhss
  , importDecls
  , lam
  , lastStmt
  , lit
  , match
  , mg
  , opApp
  , par
  , qual
  , qualTyVar
  , qualVar
  , recField
  , recFields
  , recordCon
  , string
  , tupArg
  , tyVar
  , unqual
  , var
  , varPat
  ) where

import qualified GHC.Hs as Ghc
import qualified GhcPlugins as Ghc
import qualified TcEvidence as Ghc

app
  :: Ghc.SrcSpan
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
app s f = Ghc.L s . Ghc.HsApp Ghc.noExtField f

bindStmt
  :: Ghc.SrcSpan
  -> Ghc.LPat Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LStmt Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
bindStmt s p e =
  Ghc.L s $ Ghc.BindStmt Ghc.noExtField p e noSyntaxExpr noSyntaxExpr

doExpr :: Ghc.SrcSpan -> [Ghc.ExprLStmt Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
doExpr s = Ghc.L s . Ghc.HsDo Ghc.noExtField Ghc.DoExpr . Ghc.L s

explicitList
  :: Ghc.SrcSpan -> [Ghc.LHsExpr Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
explicitList s = Ghc.L s . Ghc.ExplicitList Ghc.noExtField Nothing

explicitTuple
  :: Ghc.SrcSpan -> [Ghc.LHsTupArg Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
explicitTuple s xs = Ghc.L s $ Ghc.ExplicitTuple Ghc.noExtField xs Ghc.Boxed

fieldOcc :: Ghc.SrcSpan -> Ghc.LIdP Ghc.GhcPs -> Ghc.LFieldOcc Ghc.GhcPs
fieldOcc s = Ghc.L s . Ghc.FieldOcc Ghc.noExtField

funBind
  :: Ghc.SrcSpan
  -> Ghc.OccName
  -> Ghc.MatchGroup Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
  -> Ghc.LHsBind Ghc.GhcPs
funBind s f g =
  Ghc.L s $ Ghc.FunBind Ghc.noExtField (unqual s f) g Ghc.WpHole []

grhs
  :: Ghc.SrcSpan
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LGRHS Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
grhs s = Ghc.L s . Ghc.GRHS Ghc.noExtField []

grhss
  :: Ghc.SrcSpan
  -> [Ghc.LGRHS Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)]
  -> Ghc.GRHSs Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
grhss s xs =
  Ghc.GRHSs Ghc.noExtField xs . Ghc.L s $ Ghc.EmptyLocalBinds Ghc.noExtField

importDecl
  :: Ghc.SrcSpan
  -> Ghc.ModuleName
  -> Ghc.ModuleName
  -> Ghc.LImportDecl Ghc.GhcPs
importDecl s m n = Ghc.L s $ Ghc.ImportDecl
  Ghc.noExtField
  Ghc.NoSourceText
  (Ghc.L s m)
  Nothing
  False
  False
  Ghc.QualifiedPre
  False
  (Just $ Ghc.L s n)
  Nothing

importDecls
  :: Ghc.SrcSpan
  -> [(Ghc.ModuleName, Ghc.ModuleName)]
  -> [Ghc.LImportDecl Ghc.GhcPs]
importDecls = fmap . uncurry . importDecl

lam
  :: Ghc.SrcSpan
  -> Ghc.MatchGroup Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
  -> Ghc.LHsExpr Ghc.GhcPs
lam s = Ghc.L s . Ghc.HsLam Ghc.noExtField

lastStmt
  :: Ghc.SrcSpan
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LStmt Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
lastStmt s e = Ghc.L s $ Ghc.LastStmt Ghc.noExtField e False noSyntaxExpr

lit :: Ghc.SrcSpan -> Ghc.HsLit Ghc.GhcPs -> Ghc.LHsExpr Ghc.GhcPs
lit s = Ghc.L s . Ghc.HsLit Ghc.noExtField

noSyntaxExpr :: Ghc.SyntaxExpr Ghc.GhcPs
noSyntaxExpr = Ghc.SyntaxExpr Ghc.noExpr [] Ghc.WpHole

match
  :: Ghc.SrcSpan
  -> Ghc.HsMatchContext Ghc.RdrName
  -> [Ghc.LPat Ghc.GhcPs]
  -> Ghc.GRHSs Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
  -> Ghc.LMatch Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
match s c ps = Ghc.L s . Ghc.Match Ghc.noExtField c ps

mg
  :: Ghc.Located [Ghc.LMatch Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)]
  -> Ghc.MatchGroup Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
mg ms = Ghc.MG Ghc.noExtField ms Ghc.Generated

opApp
  :: Ghc.SrcSpan
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
opApp s l o = Ghc.L s . Ghc.OpApp Ghc.noExtField l o

par :: Ghc.SrcSpan -> Ghc.LHsExpr Ghc.GhcPs -> Ghc.LHsExpr Ghc.GhcPs
par s = Ghc.L s . Ghc.HsPar Ghc.noExtField

qual :: Ghc.SrcSpan -> Ghc.ModuleName -> Ghc.OccName -> Ghc.LIdP Ghc.GhcPs
qual s m = Ghc.L s . Ghc.mkRdrQual m

qualTyVar
  :: Ghc.SrcSpan -> Ghc.ModuleName -> Ghc.OccName -> Ghc.LHsType Ghc.GhcPs
qualTyVar s m = tyVar s . qual s m

qualVar
  :: Ghc.SrcSpan -> Ghc.ModuleName -> Ghc.OccName -> Ghc.LHsExpr Ghc.GhcPs
qualVar s m = var s . qual s m

recFields
  :: [Ghc.LHsRecField Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)]
  -> Ghc.HsRecFields Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
recFields = flip Ghc.HsRecFields Nothing

recField
  :: Ghc.SrcSpan
  -> Ghc.LFieldOcc Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
  -> Ghc.LHsRecField Ghc.GhcPs (Ghc.LHsExpr Ghc.GhcPs)
recField s f e = Ghc.L s $ Ghc.HsRecField f e False

recordCon
  :: Ghc.SrcSpan
  -> Ghc.LIdP Ghc.GhcPs
  -> Ghc.HsRecordBinds Ghc.GhcPs
  -> Ghc.LHsExpr Ghc.GhcPs
recordCon s c = Ghc.L s . Ghc.RecordCon Ghc.noExtField c

string :: String -> Ghc.HsLit Ghc.GhcPs
string = Ghc.HsString Ghc.NoSourceText . Ghc.mkFastString

tupArg :: Ghc.SrcSpan -> Ghc.LHsExpr Ghc.GhcPs -> Ghc.LHsTupArg Ghc.GhcPs
tupArg s = Ghc.L s . Ghc.Present Ghc.noExtField

tyVar :: Ghc.SrcSpan -> Ghc.LIdP Ghc.GhcPs -> Ghc.LHsType Ghc.GhcPs
tyVar s = Ghc.L s . Ghc.HsTyVar Ghc.noExtField Ghc.NotPromoted

unqual :: Ghc.SrcSpan -> Ghc.OccName -> Ghc.LIdP Ghc.GhcPs
unqual s = Ghc.L s . Ghc.mkRdrUnqual

var :: Ghc.SrcSpan -> Ghc.LIdP Ghc.GhcPs -> Ghc.LHsExpr Ghc.GhcPs
var s = Ghc.L s . Ghc.HsVar Ghc.noExtField

varPat :: Ghc.SrcSpan -> Ghc.LIdP Ghc.GhcPs -> Ghc.LPat Ghc.GhcPs
varPat s = Ghc.L s . Ghc.VarPat Ghc.noExtField