repa-flow-4.2.2.1: Data/Repa/Flow/Auto/Select.hs
module Data.Repa.Flow.Auto.Select
( select_i, select_o
, discard_i, discard_o
, mask_i, mask_o)
where
import Data.Repa.Array as A
import Data.Repa.Flow.Auto.Base as F
import Data.Repa.Scalar.Singleton.Nat as D
import Data.Repa.Scalar.Product as D
import qualified Data.Repa.Flow.Generic as G
#include "repa-array.h"
---------------------------------------------------------------------------------------------------
-- | Select a single column from a flow of rows of fields.
select_i
:: ( Select n (Array fs)
, Select' n (Array fs) ~ Array (Select' n fs))
=> Nat n -- ^ Index of column to keep.
-> Sources fs -- ^ Sources of complete rows.
-> IO (Sources (Select' n fs)) -- ^ Sources of selected column.
select_i n ss
= G.map_i (select n) ss
{-# INLINE_FLOW select_i #-}
-- | Select a single column from a flow of fields.
select_o
:: ( Select n (Array fs)
, Select' n (Array fs) ~ Array (Select' n fs))
=> Nat n -- ^ Index of column to keep.
-> Sinks (Select' n fs) -- ^ Sinks for selected column.
-> IO (Sinks fs) -- ^ Sinks for complete rows.
select_o n ss
= G.map_o (select n) ss
{-# INLINE_FLOW select_o #-}
---------------------------------------------------------------------------------------------------
-- | Discard a single column from a flow of fields.
discard_i
:: ( Discard n (Array fs)
, Discard' n (Array fs) ~ Array (Discard' n fs))
=> Nat n -- ^ Index of column to discard.
-> Sources fs -- ^ Sources of complete rows.
-> IO (Sources (Discard' n fs)) -- ^ Sources of partial rows.
discard_i n ss
= G.map_i (discard n) ss
{-# INLINE_FLOW discard_i #-}
-- | Discard a single column from a flow of fields.
discard_o
:: ( Discard n (Array fs)
, Discard' n (Array fs) ~ Array (Discard' n fs))
=> Nat n -- ^ Index of column to discard.
-> Sinks (Discard' n fs) -- ^ Sinks for partial rows.
-> IO (Sinks fs) -- ^ Sinks for complete rows.
discard_o n ss
= G.map_o (discard n) ss
{-# INLINE_FLOW discard_o #-}
---------------------------------------------------------------------------------------------------
-- | Mask columns from a flow of fields.
mask_i :: ( Mask ms (Array fs)
, Mask' ms (Array fs) ~ Array (Mask' ms fs))
=> ms -- ^ Column mask.
-> Sources fs -- ^ Sources of complete rows.
-> IO (Sources (Mask' ms fs)) -- ^ Sources of masked rows.
mask_i ms ss
= G.map_i (mask ms) ss
{-# INLINE_FLOW mask_i #-}
-- | Mask columns from a flow of fields.
mask_o :: ( Mask ms (Array fs)
, Mask' ms (Array fs) ~ Array (Mask' ms fs))
=> ms -- ^ Column mask.
-> Sinks (Mask' ms fs) -- ^ Sources of complete rows.
-> IO (Sinks fs) -- ^ Sources of masked rows.
mask_o ms ss
= G.map_o (mask ms) ss
{-# INLINE_FLOW mask_o #-}