Marjoram  0.01
Library for Functional Programming in C++
Reader

Reader Monad, supporting constants and functions. More...

Classes

class  ma::Reader< A, R >
 Reader Monad. More...
 

Detailed Description

Reader Monad, supporting constants and functions.

template <class A, class R> Reader;

Represents computation that requires a shared resource A to run. Can be used to implement Dependency Injection (see test/test_reader.cxx and this blogpost for illustration).


Class Documentation

◆ ma::Reader

class ma::Reader

template<class A, class R>
class ma::Reader< A, R >

Reader Monad.

Essentially std::function with sugar on top.

Represents computations that require a shared resource A to run. map/flatMap composes further computations.

Public Member Functions

 Reader (std::function< R(A)> f)
 
run (const A &a) const
 Run the function.
 
template<typename F >
auto map (F f) const -> Reader< A, std::result_of_t< F(R)>>
 
template<typename F >
auto flatMap (F f) -> std::result_of_t< F(R)>
 

Member Function Documentation

◆ flatMap()

template<class A, class R>
template<typename F >
auto ma::Reader< A, R >::flatMap ( f) -> std::result_of_t<F(R)>
inline
Parameters
fFunction object.

Type requirement:

  • F::operator() when called with const R& argument has return type Reader<A, C>, where C is non void
Returns
Reader<A, C>.

◆ map()

template<class A, class R>
template<typename F >
auto ma::Reader< A, R >::map ( f) const -> Reader<A, std::result_of_t<F(R)>>
inline
Parameters
fFunction object.

Type requirement:

  • F::operator() when called with const R& argument has non-void return type C.
Returns
Reader<A, C>.