module Data.Repa.Flow.Simple.Base
( Source, Sink
, finalize_i
, finalize_o
, wrapI_i
, wrapI_o)
where
import Data.Repa.Flow.States
import qualified Data.Repa.Flow.Generic as G
#include "repa-flow.h"
type Source m e = G.Sources () m e
type Sink m e = G.Sinks () m e
finalize_i
:: States () m
=> m ()
-> Source m a -> m (Source m a)
finalize_i f s0 = G.finalize_i (\_ -> f) s0
finalize_o
:: States () m
=> m ()
-> Sink m a -> m (Sink m a)
finalize_o f s0 = G.finalize_o (\_ -> f) s0
wrapI_i :: G.Sources Int m e -> Maybe (Source m e)
wrapI_i (G.Sources n pullX)
| n /= 1 = Nothing
| otherwise
= let pullX' _ eat eject
= pullX 0 eat eject
in Just $ G.Sources () pullX'
wrapI_o :: G.Sinks Int m e -> Maybe (Sink m e)
wrapI_o (G.Sinks n eatX ejectX)
| n /= 1 = Nothing
| otherwise
= let eatX' _ x = eatX 0 x
ejectX' _ = ejectX 0
in Just $ G.Sinks () eatX' ejectX'