Copyright | (c) George Ungureanu KTH/ICT/ESY 2015-2020 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | ugeorge@kth.se |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
Extensions | PostfixOperators |
This module implements general purpose utility functions. It mainly hosts functions dealing with tuples. Utility are provided for up until 9-tuples. Follow the examples in the source code in case it does not suffice.
IMPORTANT!!! Most of the multi-parameter higher-order functions provided by the
library API are named along the lines of functionMN
where M
represents the
number of curried inputs (i.e. a1 -> a2 -> ... -> aM
), while N
represents
the number of tupled outputs (i.e. (b1,b2,...,bN)
). To avoid repetition we
document only functions with 2 inputs and 2 outputs (i.e. function22
).
Documentation
at22 :: (a1, a2) -> a2 Source #
The at
xy functions return the y-th element of an x-tuple.
ForSyDe.Atom.Utility exports the constructors below. Please follow the examples in the source code if they do not suffice:
at21, at22, at31, at32, at33, at41, at42, at43, at44, at51, at52, at53, at54, at55, at61, at62, at63, at64, at65, at66, at71, at72, at73, at74, at75, at76, at77, at81, at82, at83, at84, at85, at86, at87, at88, at91, at92, at93, at94, at95, at96, at97, at98, at99,
Example:
>>>
at53 (1,2,3,4,5)
3
(||<) :: (Functor f1, Functor f2) => f1 (f2 (a1, a2)) -> (f1 (f2 a1), f1 (f2 a2)) infixl 3 Source #
This set of utility functions "unzip" nested n-tuples, provided
as postfix operators. They are crucial for reconstructing data
types from higher-order functions which input functions with
multiple outputs. It relies on the nested types being instances of
Functor
.
The operator convention is (|+<+)
, where the number of |
represent the number of layers the n-tuple is lifted, while the
number of <
+ 1 is the order n of the n-tuple.
ForSyDe.Atom.Utility exports the constructors below. Please follow the examples in the source code if they do not suffice:
|<, |<<, |<<<, |<<<<, |<<<<<, |<<<<<<, |<<<<<<<, |<<<<<<<<, ||<, ||<<, ||<<<, ||<<<<, ||<<<<<, ||<<<<<<, ||<<<<<<<, ||<<<<<<<<, |||<, |||<<, |||<<<, |||<<<<, |||<<<<<, |||<<<<<<, |||<<<<<<<, |||<<<<<<<<, ||||<, ||||<<, ||||<<<, ||||<<<<, ||||<<<<<, ||||<<<<<<, ||||<<<<<<<, ||||<<<<<<<<,
Example:
>>>
:set -XPostfixOperators
>>>
([Just (1,2,3), Nothing, Just (4,5,6)] ||<<)
([Just 1,Nothing,Just 4],[Just 2,Nothing,Just 5],[Just 3,Nothing,Just 6])
(><) :: (a1 -> a2 -> b1) -> (a1, a2) -> b1 infixl 6 Source #
Infix currying operators used for convenience.
The operator convention is (><+)
, where the number of <
+ 1 is
the order n of the n-tuple.
ForSyDe.Atom.Utility exports the constructors below. Please follow the examples in the source code if they do not suffice:
><, ><<, ><<<, ><<<<, ><<<<<, ><<<<<<, ><<<<<<<, ><<<<<<<<
Example:
>>>
(+) >< (1,2)
3
($$) :: (a1 -> b1, a2 -> b2) -> (a1, a2) -> (b1, b2) infixl 6 Source #
Infix function application operator for tuples.
The operator convention is ($+)
, where the number of $
is the
order n of the n-tuple. For Applying a function on nontuples we
rely on $
provided by Prelude.
ForSyDe.Atom.Utility exports the constructors below. Please follow the examples in the source code if they do not suffice:
$$, $$$, $$$$, $$$$$, $$$$$$, $$$$$$$, $$$$$$$$, $$$$$$$$$
Example:
>>>
((+),(-)) $$ (1,1) $$ (2,2)
(3,-1)