module Language.Haskell.GHC.HappyParser
    ( fullStatement
    , fullImport
    , fullDeclaration
    , fullExpression
    , fullTypeSignature
    , fullModule
    ) where

import GHC.Parser
import GHC.Types.SrcLoc

-- compiler/hsSyn
import GHC.Hs

-- compiler/utils
import GHC.Data.OrdList

-- compiler/parser
import GHC.Parser.Lexer

import GHC.Parser.PostProcess (ECP(..), runPV)

fullStatement :: P (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
fullStatement :: P (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
fullStatement = P (Maybe (LStmt GhcPs (LHsExpr GhcPs)))
P (Maybe
     (GenLocated
        SrcSpanAnnA
        (StmtLR GhcPs GhcPs (GenLocated SrcSpanAnnA (HsExpr GhcPs)))))
parseStmt

fullImport :: P (LImportDecl GhcPs)
fullImport :: P (LImportDecl GhcPs)
fullImport = P (LImportDecl GhcPs)
P (GenLocated SrcSpanAnnA (ImportDecl GhcPs))
parseImport

fullDeclaration :: P (OrdList (LHsDecl GhcPs))
fullDeclaration :: P (OrdList (LHsDecl GhcPs))
fullDeclaration = (GenLocated SrcSpanAnnA (HsDecl GhcPs)
 -> OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs)))
-> P (GenLocated SrcSpanAnnA (HsDecl GhcPs))
-> P (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs)))
forall a b. (a -> b) -> P a -> P b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GenLocated SrcSpanAnnA (HsDecl GhcPs)
-> OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))
forall a. a -> OrdList a
unitOL P (GenLocated SrcSpanAnnA (HsDecl GhcPs))
parseDeclaration

fullExpression :: P (LHsExpr GhcPs)
fullExpression :: P (LHsExpr GhcPs)
fullExpression = P ECP
parseExpression P ECP
-> (ECP -> P (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> P (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall a b. P a -> (a -> P b) -> P b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \ECP
p -> PV (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> P (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall a. PV a -> P a
runPV (PV (GenLocated SrcSpanAnnA (HsExpr GhcPs))
 -> P (GenLocated SrcSpanAnnA (HsExpr GhcPs)))
-> PV (GenLocated SrcSpanAnnA (HsExpr GhcPs))
-> P (GenLocated SrcSpanAnnA (HsExpr GhcPs))
forall a b. (a -> b) -> a -> b
$ ECP -> forall b. DisambECP b => PV (LocatedA b)
unECP ECP
p

fullTypeSignature :: P (Located (OrdList (LHsDecl GhcPs)))
fullTypeSignature :: P (Located (OrdList (LHsDecl GhcPs)))
fullTypeSignature = (GenLocated SrcSpanAnnA (HsDecl GhcPs)
 -> Located (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))))
-> P (GenLocated SrcSpanAnnA (HsDecl GhcPs))
-> P (Located (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))))
forall a b. (a -> b) -> P a -> P b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))
-> Located (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs)))
forall e. e -> Located e
noLoc (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))
 -> Located (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))))
-> (GenLocated SrcSpanAnnA (HsDecl GhcPs)
    -> OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs)))
-> GenLocated SrcSpanAnnA (HsDecl GhcPs)
-> Located (OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenLocated SrcSpanAnnA (HsDecl GhcPs)
-> OrdList (GenLocated SrcSpanAnnA (HsDecl GhcPs))
forall a. a -> OrdList a
unitOL) P (GenLocated SrcSpanAnnA (HsDecl GhcPs))
parseTypeSignature

fullModule :: P (Located (HsModule GhcPs))
fullModule :: P (Located (HsModule GhcPs))
fullModule = P (Located (HsModule GhcPs))
parseModule