ADPfusion-0.6.0.0: ADP/Fusion/Core/Term/MultiChr.hs
-- |
--
-- TODO Rename @Chr@ to @Vtx@, a vertex parser is a generalization of
-- a char parser. But this is only semantics, so not super important to do
-- now.
module ADP.Fusion.Core.Term.MultiChr where
import Data.Strict.Tuple
import GHC.TypeNats
import qualified Data.Vector.Generic as VG
import Data.PrimitiveArray
import ADP.Fusion.Core.Classes
import ADP.Fusion.Core.Multi
-- | A multi-character parser.
data MultiChr (c ∷ Nat) (v ∷ * → *) (x ∷ *) where
MultiChr ∷ VG.Vector v x
⇒ !(v x)
→ MultiChr c v x
-- | smart constructor for regular 1-character parsers
multiChr :: VG.Vector v x => v x -> MultiChr c v x
multiChr = MultiChr
{-# Inline multiChr #-}
instance Build (MultiChr c v x)
instance
( Element ls i
) => Element (ls :!: MultiChr c v x) i where
data Elm (ls :!: MultiChr c v x) i = ElmMultiChr !(v x) !(RunningIndex i) !(Elm ls i)
type Arg (ls :!: MultiChr c v x) = Arg ls :. v x
getArg (ElmMultiChr x _ ls) = getArg ls :. x
getIdx (ElmMultiChr _ i _ ) = i
{-# Inline getArg #-}
{-# Inline getIdx #-}
deriving instance (Show i, Show (RunningIndex i), Show (v x), Show (Elm ls i)) => Show (Elm (ls :!: MultiChr c v x) i)
type instance TermArg (MultiChr c v x) = v x