module Data.Repa.Array.Internals.Operator.Compact
( compact
, compactIn)
where
import Data.Repa.Array.Internals.Layout as A
import Data.Repa.Array.Internals.Target as A
import Data.Repa.Array.Internals.Bulk as A
import Data.Repa.Eval.Stream as A
import Data.Repa.Stream as S
import Prelude hiding (concat)
#include "repa-array.h"
compact :: (BulkI lSrc a, TargetI lDst b)
=> Name lDst
-> (s -> a -> (s, Maybe b))
-> s
-> Array lSrc a
-> Array lDst b
compact nDst f s0 arr
= A.unstreamToArray nDst
$ S.compactS f s0
$ A.streamOfArray arr
compactIn
:: (BulkI lSrc a, TargetI lDst a)
=> Name lDst
-> (a -> a -> (a, Maybe a))
-> Array lSrc a
-> Array lDst a
compactIn nDst f arr
= A.unstreamToArray nDst
$ S.compactInS f
$ A.streamOfArray arr