module FP.Parser.Effects where
import FP.Prelude
import FP.Pretty
import FP.Parser.Common
data ParserEnv t = ParserEnv
{ parserEnvRenderFormat ∷ [Format]
, parserEnvErrorStack ∷ ([𝕊],𝕊)
, parserEnvLevel ∷ ℕ
, parserEnvBumped ∷ 𝔹
}
makeLenses ''ParserEnv
makePrettyRecord ''ParserEnv
parserEnv₀ ∷ ParserEnv t
parserEnv₀ = ParserEnv [] ([],"<top level>") (𝕟 0) False
data ParserOut t = ParserOut
{ parserOutSuccess ∷ 𝔹
, parserOutError ∷ SourceErrorMaybe t
}
makeLenses ''ParserOut
makePrettyRecord ''ParserOut
instance Monoid (ParserOut t) where
null = ParserOut bot null
ParserOut sd₁ er₁ ⧺ ParserOut sd₂ er₂ = ParserOut (sd₁ ⊔ sd₂) (er₁ ⧺ er₂)
data ParserState t = ParserState
{ parserStateInput ∷ SourceInput t
, parserStateErrorContext ∷ SourceContextPrefix t
, parserStateCaptureContext ∷ SourceContextPrefix t
}
makeLenses ''ParserState
makePrettyRecord ''ParserState
parserState₀ ∷ Stream (SourceToken t) → ParserState t
parserState₀ ss = ParserState (sourceInput₀ ss) null null