Safe Haskell | None |
---|---|
Language | Haskell98 |
Fusion type system. Use re-exported in Data.Yarr.Flow functions.
- class Fusion r fr l sh where
- class Fusion r fr l sh => DefaultFusion r fr l sh | r -> fr where
- class PreferredWorkIndex fl sh sh => IFusion r l fr fl sh | r l fr -> fl where
- class IFusion r l fr fl sh => DefaultIFusion r l fr fl sh | r l -> fr where
Documentation
class Fusion r fr l sh where Source #
Generalized, non-injective version of DefaultFusion
. Used internally.
Minimum complete defenition: fmapM
, fzip2M
, fzip3M
and fzipM
.
The class doesn't have vector counterpart, it's role play top-level functions from Data.Yarr.Repr.Separate module.
fmap :: (USource r l sh a, USource fr l sh b) => (a -> b) -> UArray r l sh a -> UArray fr l sh b Source #
fmapM :: (USource r l sh a, USource fr l sh b) => (a -> IO b) -> UArray r l sh a -> UArray fr l sh b Source #
fzip2 :: (USource r l sh a, USource r l sh b, USource fr l sh c) => (a -> b -> c) -> UArray r l sh a -> UArray r l sh b -> UArray fr l sh c Source #
fzip2M :: (USource r l sh a, USource r l sh b, USource fr l sh c) => (a -> b -> IO c) -> UArray r l sh a -> UArray r l sh b -> UArray fr l sh c Source #
fzip3 :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr l sh d) => (a -> b -> c -> d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr l sh d Source #
fzip3M :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr l sh d) => (a -> b -> c -> IO d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr l sh d Source #
fzip :: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) => Fun n a b -> VecList n (UArray r l sh a) -> UArray fr l sh b Source #
fzipM :: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) => Fun n a (IO b) -> VecList n (UArray r l sh a) -> UArray fr l sh b Source #
class Fusion r fr l sh => DefaultFusion r fr l sh | r -> fr where Source #
This class abstracts pair of array types, which could be (preferably should be)
mapped (fused) one to another. Injective version of Fusion
class.
Parameters:
r
- source array representation. It determines result representation.fr
(fused repr) - result (fused) array representation. Result array isn't indeed presented in memory, finally it should becompute
d orLoad
ed toManifest
representation.l
- load type, common for source and fused arrayssh
- shape of arrays
All functions are already defined, using non-injective versions from Fusion
class.
The class doesn't have vector counterpart, it's role play top-level functions from Data.Yarr.Repr.Separate module.
dmap :: (USource r l sh a, USource fr l sh b) => (a -> b) -> UArray r l sh a -> UArray fr l sh b Source #
O(1) Pure element mapping.
Main basic "map" in Yarr.
dmapM :: (USource r l sh a, USource fr l sh b) => (a -> IO b) -> UArray r l sh a -> UArray fr l sh b Source #
O(1) Monadic element mapping.
dzip2 :: (USource r l sh a, USource r l sh b, USource fr l sh c) => (a -> b -> c) -> UArray r l sh a -> UArray r l sh b -> UArray fr l sh c Source #
O(1) Zipping 2 arrays of the same type indexes and shapes.
Example:
let productArr = dzip2 (*) arr1 arr2
dzip2M :: (USource r l sh a, USource r l sh b, USource fr l sh c) => (a -> b -> IO c) -> UArray r l sh a -> UArray r l sh b -> UArray fr l sh c Source #
O(1) Monadic version of dzip2
function.
dzip3 :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr l sh d) => (a -> b -> c -> d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr l sh d Source #
O(1) Zipping 3 arrays of the same type indexes and shapes.
dzip3M :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr l sh d) => (a -> b -> c -> IO d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr l sh d Source #
O(1) Monadic version of dzip3
function.
dzip :: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) => Fun n a b -> VecList n (UArray r l sh a) -> UArray fr l sh b Source #
O(1) Generalized element zipping with pure function.
Zipper function is wrapped in Fun
for injectivity.
dzipM :: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) => Fun n a (IO b) -> VecList n (UArray r l sh a) -> UArray fr l sh b Source #
O(1) Monadic version of dzip
function.
Shape sh => DefaultFusion D D SH sh Source # | |
DefaultFusion D D L sh Source # | |
DefaultFusion FS D L sh Source # | |
DefaultFusion F D L sh Source # | |
DefaultFusion MB D L sh Source # | |
DefaultFusion B D L sh Source # | |
Shape sh => DefaultFusion CV CV CVL sh Source # | |
(DefaultFusion r D l sh, Fusion (SE r) D l sh) => DefaultFusion (SE r) D l sh Source # | |
class PreferredWorkIndex fl sh sh => IFusion r l fr fl sh | r l fr -> fl where Source #
Like Fusion
, for mappings/zippings with array index. Used to define
functions in DefaultIFusion
.
Minimum complete defenition: fimapM
, fizip2M
, fizip3M
and fizipM
.
The class doesn't have vector counterpart.
fimap :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> b) -> UArray r l sh a -> UArray fr fl sh b Source #
fimapM :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> IO b) -> UArray r l sh a -> UArray fr fl sh b Source #
fizip2 :: (USource r l sh a, USource r l sh b, USource fr fl sh c) => (sh -> a -> b -> c) -> UArray r l sh a -> UArray r l sh b -> UArray fr fl sh c Source #
fizip2M :: (USource r l sh a, USource r l sh b, USource fr fl sh c) => (sh -> a -> b -> IO c) -> UArray r l sh a -> UArray r l sh b -> UArray fr fl sh c Source #
fizip3 :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr fl sh d) => (sh -> a -> b -> c -> d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr fl sh d Source #
fizip3M :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr fl sh d) => (sh -> a -> b -> c -> IO d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr fl sh d Source #
fizip :: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) => (sh -> Fun n a b) -> VecList n (UArray r l sh a) -> UArray fr fl sh b Source #
fizipM :: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) => (sh -> Fun n a (IO b)) -> VecList n (UArray r l sh a) -> UArray fr fl sh b Source #
class IFusion r l fr fl sh => DefaultIFusion r l fr fl sh | r l -> fr where Source #
Like DefaultFusion
, this class abstracts the pair array types,
which should be fused one to another
on maps and zips which accept index of element
(several elements for zips) in array (arrays).
Parameters:
r
- source array representation. Determines result representation.l
- source load typefr
(fused repr) - result (fused) array representation. Result array isn't indeed presented in memory, finally it should becompute
d orLoad
ed toManifest
representation.fl
- result, "shaped" load typesh
- shape of arrays
All functions are already defined,
using non-injective versions from IFusion
class.
The class doesn't have vector counterpart.
imap :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> b) -> UArray r l sh a -> UArray fr fl sh b Source #
O(1) Pure element mapping with array index.
imapM :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> IO b) -> UArray r l sh a -> UArray fr fl sh b Source #
O(1) Monadic element mapping with index.
izip2 :: (USource r l sh a, USource r l sh b, USource fr fl sh c) => (sh -> a -> b -> c) -> UArray r l sh a -> UArray r l sh b -> UArray fr fl sh c Source #
O(1) Pure zipping of 2 arrays with index.
izip2M :: (USource r l sh a, USource r l sh b, USource fr fl sh c) => (sh -> a -> b -> IO c) -> UArray r l sh a -> UArray r l sh b -> UArray fr fl sh c Source #
O(1) Monadic zipping of 2 arrays with index.
izip3 :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr fl sh d) => (sh -> a -> b -> c -> d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr fl sh d Source #
O(1) Pure zipping of 3 arrays with index.
izip3M :: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr fl sh d) => (sh -> a -> b -> c -> IO d) -> UArray r l sh a -> UArray r l sh b -> UArray r l sh c -> UArray fr fl sh d Source #
O(1) Monadic zipping of 3 arrays with index.
izip :: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) => (sh -> Fun n a b) -> VecList n (UArray r l sh a) -> UArray fr fl sh b Source #
O(1) Generalized pure element zipping with index in arrays.
Zipper function is wrapped in Fun
for injectivity.
izipM :: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) => (sh -> Fun n a (IO b)) -> VecList n (UArray r l sh a) -> UArray fr fl sh b Source #
O(1) Monadic version of izip
function.
Shape sh => DefaultIFusion D SH D SH sh Source # | |
Shape sh => DefaultIFusion D L D SH sh Source # | |
Shape sh => DefaultIFusion FS L D SH sh Source # | |
Shape sh => DefaultIFusion F L D SH sh Source # | |
Shape sh => DefaultIFusion MB L D SH sh Source # | |
Shape sh => DefaultIFusion B L D SH sh Source # | |
Shape sh => DefaultIFusion CV CVL CV CVL sh Source # | |
(DefaultIFusion r l D SH sh, IFusion (SE r) l D SH sh) => DefaultIFusion (SE r) l D SH sh Source # | |