mpc
Haskell-like feature supports in C++
either.hpp File Reference
#include <functional>
#include <variant>
#include <mpc/control/holding.hpp>
#include <mpc/control/monad.hpp>
#include <mpc/prelude.hpp>
#include <mpc/utility/alternative_value_t.hpp>
#include <mpc/utility/single.hpp>

Go to the source code of this file.

Classes

struct  mpc::detail::is_either_impl< class >
 
struct  mpc::detail::is_either_impl< either< T, U > >
 
struct  mpc::holding< either< T, U > >
 
struct  mpc::functor_traits< either< T1, T2 > >
 
struct  mpc::functor_traits< either< T1, T2 > >::fmap_op
 fmap :: (a -> b) -> f a -> f b More...
 
struct  mpc::monad_traits< either< T1, T2 > >
 
struct  mpc::monad_traits< either< T1, T2 > >::bind_op
 bind :: forall a b. m a -> (a -> m b) -> m b More...
 
struct  mpc::applicative_traits< either< T1, T2 > >
 
struct  mpc::applicative_traits< either< T1, T2 > >::pure_op
 pure :: a -> f a More...
 
struct  mpc::applicative_traits< either< T1, T2 > >::seq_apply_op
 seq_apply :: f (a -> b) -> f a -> f b More...
 

Namespaces

namespace  mpc::detail
 Implementation details are here.
 

Typedefs

template<class T >
using mpc::left_t = single< T, std::false_type >
 
template<class T >
using mpc::right_t = single< T, std::true_type >
 
template<class T , class U >
using mpc::either = std::variant< left_t< T >, right_t< U > >
 data Either a b = Left a | Right b
 

Functions

template<class T >
constexpr left_t< std::unwrap_ref_decay_t< T > > mpc::make_left (T &&t)
 
template<class T >
constexpr right_t< std::unwrap_ref_decay_t< T > > mpc::make_right (T &&t)