repa-stream-4.1.0.1: Data/Repa/Stream/Concat.hs
module Data.Repa.Stream.Concat
(catMaybesS)
where
import Data.Vector.Fusion.Stream.Monadic (Stream(..), Step(..))
import qualified Data.Vector.Fusion.Stream.Size as S
#include "repa-stream.h"
-- | Return the `Just` elements from a stream, dropping the `Nothing`s.
catMaybesS
:: Monad m
=> Stream m (Maybe a)
-> Stream m a
catMaybesS (Stream istep si0 sz)
= Stream ostep si0 (S.toMax sz)
where
ostep si
= istep si >>= \m
-> case m of
Yield Nothing si' -> return $ Skip si'
Yield (Just x) si' -> return $ Yield x si'
Skip si' -> return $ Skip si'
Done -> return $ Done
{-# INLINE_INNER ostep #-}
{-# INLINE_STREAM catMaybesS #-}