{-# OPTIONS --without-K --safe #-}
open import Text.Parser.Types.Core using (Parameters)
module Text.Parser.Success {l} (P : Parameters l) where
open import Level.Bounded as Level≤ using (_≤l_; Set≤; Σ; _×_; mkSet≤; theSet; lift; lower)
open import Data.Nat.Base using (ℕ; zero; suc; _≤_; _<_)
open import Data.Nat.Properties using (≤-trans; <⇒≤; ≤-refl)
open import Data.Maybe.Base as Maybe using (Maybe; nothing; just)
open import Data.Product using (_,_)
open import Data.List.Sized.Interface using (Sized)
open import Function.Base using (_∘′_; _$_)
open import Relation.Unary using (IUniversal; _⇒_)
open Text.Parser.Types.Core
open import Text.Parser.Types P
open Parameters P
open Success
module _ {A B : Set≤ l} where
map : (theSet A → theSet B) → ∀[ Success Toks A ⇒ Success Toks B ]
map f (a ^ m≤n , s) = Level≤.map f a ^ m≤n , s
guardM : (theSet A → Maybe (theSet B)) →
∀[ Success Toks A ⇒ Maybe ∘′ Success Toks B ]
guardM f (a ^ m≤n , s) = Maybe.map ((_^ m≤n , s) ∘′ lift) (f (lower a))
module _ {A : Set≤ l} {m n : ℕ} where
≤-lift : .(le : m ≤ n) → Success Toks A m → Success Toks A n
≤-lift m≤n (a ^ p<m , s) = a ^ ≤-trans p<m m≤n , s
<-lift : .(le : m < n) → Success Toks A m → Success Toks A n
<-lift m<n = ≤-lift (<⇒≤ m<n)
module _ {A : Set≤ l} {b} {{b≤l : b ≤l l}} {B : theSet A → Set b} where
and : ∀ {n} (p : Success Toks A n) →
Success Toks (mkSet≤ (B (lower $ value p))) (size p) →
Success Toks (Σ A B) n
and (a ^ m<n , v) q = <-lift m<n (map (lower a ,_) q)
module _ {A B : Set≤ l} where
and′ : ∀ {n} (p : Success Toks A n) → Success Toks B (size p) →
Success Toks (A × B) n
and′ (a ^ m<n , v) q = <-lift m<n (map (lower a ,_) q)
module _ {{𝕊 : Sized Tok Toks}} where
view : ∀ {n} → theSet (Toks n) → Maybe (Success Toks Tok n)
view {zero} ts = nothing
view {suc n} ts = just $ let (t , ts) = lower (Sized.view 𝕊 (lift ts))
in lift t ^ ≤-refl , lift ts