guard

Synopsis

template <class MonadTag, class C>
struct guard
{
  // unspecified
};

Description

When C is true, it returns return_<MonadTag, mpl::void_>, when it is false, it returns mzero<MonadTag>.

It can be used to implement guards when using do notation for implementing list comprehension.

#include <mpllibs/metamonad/guard.hpp>

Expression semantics

For any monad_plus_tag tag and c nullary metafunction

guard<monad_plus_tag, c>

is equivalent to

if_<B, return_<monad_plus_tag, boost::mpl::void_>, mzero<monad_plus_tag>>

Example

do_c<list_tag,
  set<i, list_c<int, 1, 2>>,
  set<j, range_c<int, 1, 5>>,
  guard<list_tag, equal_to<i, j>>,
  do_return<pair<i, j>>
>

[up]