{-# OPTIONS --without-K --safe #-}
module Text.Parser.Types.Core where
open import Level using (Level; Setω)
open import Level.Bounded using (Set≤; theSet; Lift; ⊤)
open import Data.Nat.Base using (ℕ; _<_)
--------------------------------------------------------------------------------
-- PARAMETERS
-- A parser is parametrised by some types, type constructors and one function.
record Parameters (l : Level) : Setω where
field
-- Token-related parameters:
-- * Tok: tokens
Tok : Set≤ l
-- * Toks: sized input (~ Vec Tok)
Toks : ℕ → Set≤ l
-- The monad stack used
M : Set l → Set l
-- The action allowing us to track consumed tokens
recordToken : theSet Tok → M (Lift ⊤)
--------------------------------------------------------------------------------
-- SUCCESS
-- A successful partial parse of an A is a value A together leftovers
-- which are proven to be smaller than the input
infix 1 _^_,_
record Success {l} (Toks : ℕ → Set≤ l) (A : Set≤ l) (n : ℕ) : Set l where
constructor _^_,_
field
value : Lift A
{size} : ℕ
.small : size < n
leftovers : Lift (Toks size)