Safe Haskell | None |
---|
Fusion type system. Use re-exported in Data.Yarr.Flow functions.
- class Fusion r fr l sh where
- fmap :: (USource r l sh a, USource fr l sh b) => (a -> b) -> UArray r l sh a -> UArray fr l sh b
- fmapM :: (USource r l sh a, USource fr l sh b) => (a -> IO b) -> UArray r l sh a -> UArray fr l sh b
- 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
- 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
- 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
- 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
- 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
- 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
- class Fusion r fr l sh => DefaultFusion r fr l sh | r -> fr where
- dmap :: (USource r l sh a, USource fr l sh b) => (a -> b) -> UArray r l sh a -> UArray fr l sh b
- dmapM :: (USource r l sh a, USource fr l sh b) => (a -> IO b) -> UArray r l sh a -> UArray fr l sh b
- 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
- 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
- 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
- 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
- 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
- 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
- class PreferredWorkIndex fl sh sh => IFusion r l fr fl sh | r l fr -> fl where
- fimap :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> b) -> UArray r l sh a -> UArray fr fl sh b
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- class IFusion r l fr fl sh => DefaultIFusion r l fr fl sh | r l -> fr where
- imap :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> b) -> UArray r l sh a -> UArray fr fl sh b
- 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
- 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
- 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
- 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
- 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
- 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
- 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
Documentation
class Fusion r fr l sh whereSource
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.
fmapM :: (USource r l sh a, USource fr l sh b) => (a -> IO b) -> UArray r l sh a -> UArray fr l sh bSource
:: (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 |
:: (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 |
:: (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 |
:: (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 |
class Fusion r fr l sh => DefaultFusion r fr l sh | r -> fr whereSource
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 arrays -
sh
- 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.
:: (USource r l sh a, USource fr l sh b) | |
=> (a -> b) | Element mapper function |
-> UArray r l sh a | Source array |
-> UArray fr l sh b | Result array |
O(1) Pure element mapping.
Main basic "map" in Yarr.
:: (USource r l sh a, USource fr l sh b) | |
=> (a -> IO b) | Monadic element mapper function |
-> UArray r l sh a | Source array |
-> UArray fr l sh b | Result array |
O(1) Monadic element mapping.
:: (USource r l sh a, USource r l sh b, USource fr l sh c) | |
=> (a -> b -> c) | Pure element zipper function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray fr l sh c | Fused result array |
O(1) Zipping 2 arrays of the same type indexes and shapes.
Example:
let productArr = dzip2 (*) arr1 arr2
:: (USource r l sh a, USource r l sh b, USource fr l sh c) | |
=> (a -> b -> IO c) | Monadic element zipper function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray fr l sh c | Result array |
O(1) Monadic version of dzip2
function.
:: (USource r l sh a, USource r l sh b, USource r l sh c, USource fr l sh d) | |
=> (a -> b -> c -> d) | Pure element zipper function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray r l sh c | 3rd source array |
-> UArray fr l sh d | Result array |
O(1) Zipping 3 arrays of the same type indexes and shapes.
:: (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) | Monadic element zipper function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray r l sh c | 3rd source array |
-> UArray fr l sh d | Fused result array |
O(1) Monadic version of dzip3
function.
:: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) | |
=> Fun n a b | Wrapped function positionally accepts elements from source arrays and emits element for fused array |
-> VecList n (UArray r l sh a) | Source arrays |
-> UArray fr l sh b | Result array |
O(1) Generalized element zipping with pure function.
Zipper function is wrapped in Fun
for injectivity.
:: (USource r l sh a, USource fr l sh b, Arity n, n ~ S n0) | |
=> Fun n a (IO b) | Wrapped monadic zipper |
-> VecList n (UArray r l sh a) | Source arrays |
-> UArray fr l sh b | Result array |
O(1) Monadic version of dzip
function.
Shape sh => DefaultFusion D D SH sh | |
DefaultFusion D D L sh | |
DefaultFusion FS D L sh | |
DefaultFusion F D L sh | |
DefaultFusion MB D L sh | |
DefaultFusion B D L sh | |
Shape sh => DefaultFusion CV CV CVL sh | |
(DefaultFusion r D l sh, Fusion (SE r) D l sh) => DefaultFusion (SE r) D l sh |
class PreferredWorkIndex fl sh sh => IFusion r l fr fl sh | r l fr -> fl whereSource
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.
:: (USource r l sh a, USource fr fl sh b) | |
=> (sh -> a -> b) | . |
-> UArray r l sh a | |
-> UArray fr fl sh b |
fimapM :: (USource r l sh a, USource fr fl sh b) => (sh -> a -> IO b) -> UArray r l sh a -> UArray fr fl sh bSource
:: (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 |
:: (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 |
:: (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 |
:: (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 |
class IFusion r l fr fl sh => DefaultIFusion r l fr fl sh | r l -> fr whereSource
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 type -
fr
(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 type -
sh
- shape of arrays
All functions are already defined,
using non-injective versions from IFusion
class.
The class doesn't have vector counterpart.
:: (USource r l sh a, USource fr fl sh b) | |
=> (sh -> a -> b) | Indexed mapping function |
-> UArray r l sh a | Source array |
-> UArray fr fl sh b | Fused result array |
O(1) Pure element mapping with array index.
:: (USource r l sh a, USource fr fl sh b) | |
=> (sh -> a -> IO b) | Indexed monadic mapping function |
-> UArray r l sh a | Source array |
-> UArray fr fl sh b | Result fused array |
O(1) Monadic element mapping with index.
:: (USource r l sh a, USource r l sh b, USource fr fl sh c) | |
=> (sh -> a -> b -> c) | Indexed zipping function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray fr fl sh c | Fused result array |
O(1) Pure zipping of 2 arrays with index.
:: (USource r l sh a, USource r l sh b, USource fr fl sh c) | |
=> (sh -> a -> b -> IO c) | Indexed monadic zipping function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray fr fl sh c | Fused result array |
O(1) Monadic zipping of 2 arrays with index.
:: (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) | Indexed zipping function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray r l sh c | 3rd source array |
-> UArray fr fl sh d | Fused result array |
O(1) Pure zipping of 3 arrays with index.
:: (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) | Indexed monadic zipping function |
-> UArray r l sh a | 1st source array |
-> UArray r l sh b | 2nd source array |
-> UArray r l sh c | 3rd source array |
-> UArray fr fl sh d | Fused result array |
O(1) Monadic zipping of 3 arrays with index.
:: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) | |
=> (sh -> Fun n a b) | Accepts index in array and returns wrapped zipper, which positionally accepts elements from source arrays and emits element for the result array |
-> VecList n (UArray r l sh a) | Bunch of source arrays |
-> UArray fr fl sh b | Result fused array |
O(1) Generalized pure element zipping with index in arrays.
Zipper function is wrapped in Fun
for injectivity.
:: (USource r l sh a, USource fr fl sh b, Arity n, n ~ S n0) | |
=> (sh -> Fun n a (IO b)) | Monadic indexed zipper |
-> VecList n (UArray r l sh a) | Source arrays |
-> UArray fr fl sh b | Result fused array |
O(1) Monadic version of izip
function.
Shape sh => DefaultIFusion D SH D SH sh | |
Shape sh => DefaultIFusion D L D SH sh | |
Shape sh => DefaultIFusion FS L D SH sh | |
Shape sh => DefaultIFusion F L D SH sh | |
Shape sh => DefaultIFusion MB L D SH sh | |
Shape sh => DefaultIFusion B L D SH sh | |
Shape sh => DefaultIFusion CV CVL CV CVL sh | |
(DefaultIFusion r l D SH sh, IFusion (SE r) l D SH sh) => DefaultIFusion (SE r) l D SH sh |