-- | -- -- TODO the 'mkStream' instances here are probably wonky for everything that is -- non-static. -- -- TODO should @d@ in each case here be @d==0@? What is the exact meaning @d@ -- should convey? module ADP.Fusion.Unit.Core where import Data.Proxy import Data.Vector.Fusion.Stream.Monadic (singleton,map,filter,Step(..)) import Debug.Trace import Prelude hiding (map,filter) import Data.PrimitiveArray hiding (map) import ADP.Fusion.Core.Classes import ADP.Fusion.Core.Multi type instance InitialContext (Unit I) = IStatic 0 type instance InitialContext (Unit O) = OStatic 0 type instance InitialContext (Unit C) = Complement data instance RunningIndex (Unit t) = RiUnit instance ( Monad m ) ⇒ MkStream m (IStatic d) S (Unit I) where mkStream Proxy S grd LtUnit Unit = staticCheck# grd . singleton $ ElmS RiUnit {-# Inline mkStream #-} instance ( Monad m ) ⇒ MkStream m (IVariable d) S (Unit I) where mkStream Proxy S grd LtUnit Unit = staticCheck# grd . singleton $ ElmS RiUnit {-# Inline mkStream #-} instance ( Monad m ) ⇒ MkStream m (OStatic d) S (Unit O) where mkStream Proxy S grd LtUnit Unit = staticCheck# grd . singleton $ ElmS RiUnit {-# Inline mkStream #-} instance ( Monad m ) ⇒ MkStream m Complement S (Unit C) where mkStream Proxy S grd LtUnit Unit = staticCheck# grd . singleton $ ElmS RiUnit {-# Inline mkStream #-} --instance -- forall m ps p is -- . ( Monad m -- , MkStream m ps S is -- ) -- ⇒ MkStream m ('(:.) ps p) S (is:.Unit I) where -- mkStream Proxy S grd (us:.._) (is:._) -- = map (\(ElmS zi) -> ElmS $ zi :.: RiU) -- $ mkStream (Proxy ∷ Proxy ps) S grd us is -- {-# Inline mkStream #-} -- --instance -- forall m ps p is -- . ( Monad m -- , MkStream m ps S is -- ) -- ⇒ MkStream m ('(:.) ps p) S (is:.Unit O) where -- mkStream Proxy S grd (us:.._) (is:._) -- = map (\(ElmS zi) -> ElmS $ zi :.: RiU) -- $ mkStream (Proxy ∷ Proxy ps) S grd us is -- {-# Inline mkStream #-} -- --instance -- forall m ps p is -- . ( Monad m -- , MkStream m ps S is -- ) -- ⇒ MkStream m ('(:.) ps p) S (is:.Unit C) where -- mkStream Proxy S grd (us:.._) (is:._) -- = map (\(ElmS zi) -> ElmS $ zi :.: RiU) -- $ mkStream (Proxy ∷ Proxy ps) S grd us is -- {-# Inline mkStream #-} -- -- -- --instance TableStaticVar pos c u (Unit I) where -- tableStreamIndex _ _ _ _ = Unit -- {-# Inline [0] tableStreamIndex #-} -- --instance TableStaticVar pos c u (Unit O) where -- tableStreamIndex _ _ _ _ = Unit -- {-# Inline [0] tableStreamIndex #-} -- --instance TableStaticVar pos c u (Unit C) where -- tableStreamIndex _ _ _ _ = Unit -- {-# Inline [0] tableStreamIndex #-}