module ADP.Fusion.Term.PeekIndex.Subword where

import Data.Strict.Tuple
import Data.Vector.Fusion.Stream.Monadic (map)
import Prelude hiding (map)

import Data.PrimitiveArray hiding (map)

import ADP.Fusion.Base
import ADP.Fusion.Term.PeekIndex.Type



instance
  ( Monad m
  , Element ls (Subword C)
  , MkStream m ls (Subword C)
  ) => MkStream m (ls :!: PeekIndex (Subword C)) (Subword C) where
  mkStream (ls :!: PeekIndex) Complemented h ij
    = map (\s -> let ri@(RiSwC k l) = getIdx s in ElmPeekIndex (subword k l) ri s)
    $ mkStream ls Complemented h ij
  {-# Inline mkStream #-}