 |
LeechCraft
0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
|
Go to the documentation of this file.
23 template<
template<
typename...>
class Monad,
typename... Args,
typename V>
26 return Pure<Monad, Args...> (v);
29 template<
typename MV,
typename F>
30 using BindResult_t =
typename InstanceMonad<MV>::template BindResult_t<F>;
34 template<
template<
typename...>
class Monad,
typename... Args1,
typename... Args2>
43 template<
typename T1,
typename T2>
50 constexpr T*
declptr () noexcept
55 template<
typename T1,
typename T2>
62 template<
typename MV,
typename F>
66 "Incompatible function return type");
70 template<
typename MV,
typename F>
73 return Bind (value,
f);
77 auto Do (
const MV& value)
82 template<
typename MV,
typename FHead,
typename... FArgs>
83 auto Do (
const MV& value,
const FHead& fHead,
const FArgs&... fArgs)
85 return Do (
Bind (value, fHead), fArgs...);
105 template<
typename L,
typename R>
117 return R_t::Left (value.
GetLeft ());
BindResult_t< MV, F > Bind(const MV &value, const F &f)
constexpr bool IsCompatibleMonadImpl(const Monad< Args1... > *, const Monad< Args2... > *, int)
const R & GetRight() const
auto operator>>(const MV &value, const F &f) -> decltype(Bind(value, f))
constexpr T * declptr() noexcept
typename InstanceMonad< MV >::template BindResult_t< F > BindResult_t
constexpr bool IsCompatibleMonad()
const L & GetLeft() const
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
std::result_of_t< F(T)> BindResult_t