Iros
 
Loading...
Searching...
No Matches
di::function::monad Namespace Reference

Classes

struct  BindFunction
 
struct  EnableMonadFunction
 
struct  FailFunction
 
struct  FMapFunction
 
struct  FMapRightFunction
 
class  MonadInterface
 

Functions

template<typename M, typename F>
constexpr auto operator% (M &&m, F &&f) -> decltype(fmap(util::forward< M >(m), util::forward< F >(f)))
 
template<typename M, typename F>
constexpr auto operator>> (M &&m, F &&f) -> decltype(bind(util::forward< M >(m), util::forward< F >(f)))
 
template<typename M, typename F>
constexpr auto operator<< (M &&m, F &&f) -> decltype(fail(util::forward< M >(m), util::forward< F >(f)))
 
template<typename M, typename F>
constexpr auto operator& (M &&m, F &&f) -> decltype(fmap_right(util::forward< M >(m), util::forward< F >(f)))
 
template<template< typename... > typename M, typename T>
requires (concepts::Monad<M> && requires(T&& value) { M { util::forward<T>(value) }; })
constexpr auto unit (T &&value) -> concepts::MonadInstance auto
 

Variables

constexpr auto bind = BindFunction {}
 
constexpr auto enable_monad = EnableMonadFunction {}
 
constexpr auto fail = FailFunction {}
 
constexpr auto fmap = FMapFunction {}
 
constexpr auto fmap_right = FMapRightFunction {}
 

Function Documentation

◆ operator%()

template<typename M, typename F>
auto di::function::monad::operator% ( M && m,
F && f ) -> decltype(fmap(util::forward<M>(m), util::forward<F>(f)))
constexpr

◆ operator&()

template<typename M, typename F>
auto di::function::monad::operator& ( M && m,
F && f ) -> decltype(fmap_right(util::forward<M>(m), util::forward<F>(f)))
constexpr

◆ operator<<()

template<typename M, typename F>
auto di::function::monad::operator<< ( M && m,
F && f ) -> decltype(fail(util::forward<M>(m), util::forward<F>(f)))
constexpr

◆ operator>>()

template<typename M, typename F>
auto di::function::monad::operator>> ( M && m,
F && f ) -> decltype(bind(util::forward<M>(m), util::forward<F>(f)))
constexpr

◆ unit()

template<template< typename... > typename M, typename T>
requires (concepts::Monad<M> && requires(T&& value) { M { util::forward<T>(value) }; })
auto di::function::monad::unit ( T && value) -> concepts::MonadInstance auto
constexpr

Variable Documentation

◆ bind

auto di::function::monad::bind = BindFunction {}
inlineconstexpr

◆ enable_monad

auto di::function::monad::enable_monad = EnableMonadFunction {}
inlineconstexpr

◆ fail

auto di::function::monad::fail = FailFunction {}
inlineconstexpr

◆ fmap

auto di::function::monad::fmap = FMapFunction {}
inlineconstexpr

◆ fmap_right

auto di::function::monad::fmap_right = FMapRightFunction {}
inlineconstexpr