packages feed

evoke-0.2022.8.26: source/library/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 GHC.Plugins as Ghc
import qualified GHC.Types.SourceText as Ghc

app ::
  Ghc.SrcSpan ->
  Ghc.LHsExpr Ghc.GhcPs ->
  Ghc.LHsExpr Ghc.GhcPs ->
  Ghc.LHsExpr Ghc.GhcPs
app s f = Ghc.reLocA . Ghc.L s . Ghc.HsApp Ghc.noAnn 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.reLocA . Ghc.L s $ Ghc.BindStmt Ghc.noAnn p e

doExpr :: Ghc.SrcSpan -> [Ghc.ExprLStmt Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
doExpr s = Ghc.reLocA . Ghc.L s . Ghc.HsDo Ghc.noAnn (Ghc.DoExpr Nothing) . Ghc.reLocA . Ghc.L s

explicitList ::
  Ghc.SrcSpan -> [Ghc.LHsExpr Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
explicitList s = Ghc.reLocA . Ghc.L s . Ghc.ExplicitList Ghc.noAnn

explicitTuple ::
  Ghc.SrcSpan -> [Ghc.HsTupArg Ghc.GhcPs] -> Ghc.LHsExpr Ghc.GhcPs
explicitTuple s xs = Ghc.reLocA . Ghc.L s $ Ghc.ExplicitTuple Ghc.noAnn 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.reLocA . Ghc.L s $ Ghc.FunBind Ghc.noExtField (unqual s f) g []

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

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

importDecl ::
  Ghc.SrcSpan ->
  Ghc.ModuleName ->
  Ghc.ModuleName ->
  Ghc.LImportDecl Ghc.GhcPs
importDecl s m n =
  Ghc.reLocA . Ghc.L s $
    Ghc.ImportDecl
      Ghc.noAnn
      Ghc.NoSourceText
      (Ghc.reLocA $ Ghc.L s m)
      Nothing
      Ghc.NotBoot
      False
      Ghc.QualifiedPre
      False
      (Just . Ghc.reLocA $ 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.reLocA . 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.reLocA . Ghc.L s $ Ghc.LastStmt Ghc.noExtField e Nothing noSyntaxExpr

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

noSyntaxExpr :: Ghc.SyntaxExpr Ghc.GhcPs
noSyntaxExpr = Ghc.noSyntaxExpr

match ::
  Ghc.SrcSpan ->
  Ghc.HsMatchContext (Ghc.NoGhcTc Ghc.GhcPs) ->
  [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.reLocA . Ghc.L s . Ghc.Match Ghc.noAnn 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 (Ghc.reLocA 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.reLocA . Ghc.L s . Ghc.OpApp Ghc.noAnn l o

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

qual :: Ghc.SrcSpan -> Ghc.ModuleName -> Ghc.OccName -> Ghc.LIdP Ghc.GhcPs
qual s m = Ghc.reLocA . 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.reLocA . Ghc.L s $ Ghc.HsRecField Ghc.noAnn f e False

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

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

tupArg :: Ghc.LHsExpr Ghc.GhcPs -> Ghc.HsTupArg Ghc.GhcPs
tupArg = Ghc.Present Ghc.noAnn

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

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

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

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