Iros
 
Loading...
Searching...
No Matches
monad_operator.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/util/forward.h"
9
10namespace di::function::monad {
11template<typename M, typename F>
12constexpr auto operator%(M&& m, F&& f) -> decltype(fmap(util::forward<M>(m), util::forward<F>(f))) {
13 return fmap(util::forward<M>(m), util::forward<F>(f));
14}
15
16template<typename M, typename F>
17constexpr auto operator>>(M&& m, F&& f) -> decltype(bind(util::forward<M>(m), util::forward<F>(f))) {
18 return bind(util::forward<M>(m), util::forward<F>(f));
19}
20
21template<typename M, typename F>
22constexpr auto operator<<(M&& m, F&& f) -> decltype(fail(util::forward<M>(m), util::forward<F>(f))) {
23 return fail(util::forward<M>(m), util::forward<F>(f));
24}
25
26template<typename M, typename F>
27constexpr auto operator&(M&& m, F&& f) -> decltype(fmap_right(util::forward<M>(m), util::forward<F>(f))) {
28 return fmap_right(util::forward<M>(m), util::forward<F>(f));
29}
30}
Definition monad_bind.h:6
constexpr auto bind
Definition monad_bind.h:14
constexpr auto fmap
Definition monad_fmap.h:14
constexpr auto operator<<(M &&m, F &&f) -> decltype(fail(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:22
constexpr auto operator%(M &&m, F &&f) -> decltype(fmap(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:12
constexpr auto fmap_right
Definition monad_fmap_right.h:14
constexpr auto fail
Definition monad_fail.h:14
constexpr auto operator>>(M &&m, F &&f) -> decltype(bind(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:17
constexpr auto operator&(M &&m, F &&f) -> decltype(fmap_right(util::forward< M >(m), util::forward< F >(f)))
Definition monad_operator.h:27