Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

Provides operator of variable-arguments function composition.

- class SuperComposition a b c | a b -> c where

# Documentation

class SuperComposition a b c | a b -> c where Source #

This type class allows to implement variadic composition operator.

(...) :: a -> b -> c infixl 8 Source #

Allows to apply function to result of another function with multiple arguments.

`>>>`

"3"`(show ... (+)) 1 2`

`>>>`

"5"`show ... 5`

`>>>`

True`(null ... zip5) [1] [2] [3] [] [5]`

Inspired by http://stackoverflow.com/questions/9656797/variadic-compose-function.

#### Performance

To check the performance there was done a bunch of benchmarks. Benchmarks were made on
examples given above and also on the functions of many arguments.
The results are showing that the operator (`...`

) performs as fast as
plain applications of the operator (`.`

) on almost all the tests, but (`...`

)
leads to the performance draw-down if `ghc`

fails to inline it.
Slow behavior was noticed on functions without type specifications.
That's why keep in mind that providing explicit type declarations for functions is very
important when using (`...`

).
Relying on type inference will lead to the situation when all optimizations
disappear due to very general inferred type. However, functions without type
specification but with applied `INLINE`

pragma are fast again.

((~) * a c, (~) * r b) => SuperComposition (a -> b) c r Source # | |

(SuperComposition (a -> b) d r1, (~) * r (c -> r1)) => SuperComposition (a -> b) (c -> d) r Source # | |