|
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 |
|