module ADP.Fusion.Term.Deletion.Subword where
import Data.Strict.Tuple
import Data.Vector.Fusion.Stream.Monadic as S
import Prelude hiding (map)
import Data.PrimitiveArray hiding (map)
import ADP.Fusion.Base
import ADP.Fusion.Term.Deletion.Type
instance
( Monad m
, TerminalStream m a is
) => TerminalStream m (TermSymbol a Deletion) (is:.Subword) where
terminalStream (a:|Deletion) (sv:.IStatic _) (is:.ij@(Subword (i:.j)))
= S.map (\(S6 s (zi:._) (zo:._) is os e) -> S6 s zi zo (is:.subword j j) (os:.subword 0 0) (e:.()))
. iPackTerminalStream a sv (is:.ij)
terminalStream (a:|Deletion) (sv:.IVariable _) (is:.ij@(Subword (i:.j)))
= S.map (\(S6 s (zi:.Subword (_:.l)) (zo:._) is os e) -> S6 s zi zo (is:.subword l l) (os:.subword 0 0) (e:.()))
. iPackTerminalStream a sv (is:.ij)
instance TermStaticVar Deletion Subword where
termStaticVar _ sv _ = sv
termStreamIndex _ _ ij = ij