module ADP.Fusion.Unit.SynVar.Indices where
import Data.Proxy
import Data.Vector.Fusion.Stream.Monadic (map,Stream,head,mapM,Step(..))
import Data.Vector.Fusion.Util (delay_inline)
import Prelude hiding (map,head,mapM)
import Data.PrimitiveArray hiding (map)
import ADP.Fusion.Core
import ADP.Fusion.Unit.Core
type instance LeftPosTy (IStatic d) (TwITbl b s m arr EmptyOk (Unit I) x) (Unit I) = IStatic d
type instance LeftPosTy (IStatic d) (TwITblBt b s arr EmptyOk (Unit I) x mB mF r) (Unit I) = IStatic d
type instance LeftPosTy (OStatic d) (TwITbl b s m arr EmptyOk (Unit O) x) (Unit O) = OStatic d
type instance LeftPosTy (OStatic d) (TwITblBt b s arr EmptyOk (Unit O) x mB mF r) (Unit O) = OStatic d
type instance LeftPosTy Complement (TwITbl b s m arr EmptyOk (Unit I) x) (Unit C) = Complement
type instance LeftPosTy Complement (TwITblBt b s arr EmptyOk (Unit I) x mB mF r) (Unit C) = Complement
type instance LeftPosTy Complement (TwITbl b s m arr EmptyOk (Unit O) x) (Unit C) = Complement
type instance LeftPosTy Complement (TwITblBt b s arr EmptyOk (Unit O) x mB mF r) (Unit C) = Complement
instance
( AddIndexDenseContext ps elm x0 i0 cs c us (Unit I) is (Unit I)
, MinSize c
)
⇒ AddIndexDense (ps:.Unit d) elm (cs:.c) (us:.Unit I) (is:.Unit I) where
addIndexDenseGo Proxy (cs:._) (ubs:..ub) (us:..u) (is:.i)
= map (\(SvS s t y') → SvS s (t:.i) (y' :.: RiUnit))
. addIndexDenseGo (Proxy ∷ Proxy ps) cs ubs us is
{-# Inline addIndexDenseGo #-}
instance
( AddIndexDenseContext ps elm x0 i0 cs c us (Unit O) is (Unit O)
, MinSize c
)
⇒ AddIndexDense (ps:.Unit d) elm (cs:.c) (us:.Unit O) (is:.Unit O) where
addIndexDenseGo Proxy (cs:._) (ubs:..ub) (us:..u) (is:.i)
= map (\(SvS s t y') → SvS s (t:.i) (y' :.: RiUnit))
. addIndexDenseGo (Proxy ∷ Proxy ps) cs ubs us is
{-# Inline addIndexDenseGo #-}
instance
( AddIndexDenseContext ps elm x0 i0 cs c us (Unit I) is (Unit C)
, MinSize c
)
⇒ AddIndexDense (ps:.Unit d) elm (cs:.c) (us:.Unit I) (is:.Unit C) where
addIndexDenseGo Proxy (cs:._) (ubs:..ub) (us:..u) (is:.i)
= map (\(SvS s t y') → SvS s (t:.Unit) (y' :.: RiUnit))
. addIndexDenseGo (Proxy ∷ Proxy ps) cs ubs us is
{-# Inline addIndexDenseGo #-}
instance
( AddIndexDenseContext ps elm x0 i0 cs c us (Unit O) is (Unit C)
, MinSize c
)
⇒ AddIndexDense (ps:.Unit d) elm (cs:.c) (us:.Unit O) (is:.Unit C) where
addIndexDenseGo Proxy (cs:._) (ubs:..ub) (us:..u) (is:.i)
= map (\(SvS s t y') → SvS s (t:.Unit) (y' :.: RiUnit))
. addIndexDenseGo (Proxy ∷ Proxy ps) cs ubs us is
{-# Inline addIndexDenseGo #-}