{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE Rank2Types #-}
module Agda.Syntax.Concrete.Operators.Parser.Monad
( MemoKey(..)
, Parser
, parse
, sat'
, sat
, doc
, memoise
, memoiseIfPrinting
, grammar
) where
import Data.Hashable
import GHC.Generics (Generic)
import Text.PrettyPrint.HughesPJ
import Agda.Syntax.Common
import qualified Agda.Utils.Parser.MemoisedCPS as Parser
data MemoKey = NodeK (Either Integer Integer)
| PostLeftsK (Either Integer Integer)
| PreRightsK (Either Integer Integer)
| TopK
| AppK
| NonfixK
deriving (Eq, Show, Generic)
instance Hashable MemoKey
type Parser tok a =
#ifdef DEBUG
Parser.ParserWithGrammar
#else
Parser.Parser
#endif
MemoKey tok (MaybePlaceholder tok) a
parse :: forall tok a. Parser tok a -> [MaybePlaceholder tok] -> [a]
parse = Parser.parse
sat' :: (MaybePlaceholder tok -> Maybe a) -> Parser tok a
sat' = Parser.sat'
sat :: (MaybePlaceholder tok -> Bool) ->
Parser tok (MaybePlaceholder tok)
sat = Parser.sat
doc :: Doc -> Parser tok a -> Parser tok a
doc = Parser.doc
memoise :: MemoKey -> Parser tok tok -> Parser tok tok
memoise = Parser.memoise
memoiseIfPrinting :: MemoKey -> Parser tok tok -> Parser tok tok
memoiseIfPrinting = Parser.memoiseIfPrinting
grammar :: Parser tok a -> Doc
grammar = Parser.grammar