相关疑难解决方法(0)

在c ++ 11中实现Haskell的Maybe Monad

我正在尝试使用C++ 11和模板中的lambda函数从Haskell实现Maybe monad.这是我到目前为止所拥有的

#include<functional>
#include<iostream>
using namespace std;

template<typename T1>
struct Maybe
{
  T1 data;
  bool valid;
};

template<typename T1, typename T2>
Maybe<T2> operator>>=(Maybe<T1> t, std::function < Maybe<T2> (T1)> &f)
{
  Maybe<T2> return_value;
  if(t.valid == false)
  {        
    return_value.valid = false;
    return return_value;
  }
  else
  {        
    return f(t.data);
  }            
}


int main()
{
  Maybe<int> x = {5, true};
  Maybe<int> y = {29, false};

  auto z = [](int a) -> Maybe<int>
    {
      Maybe<int> s;
      s.data = a+1;
      s.valid = true;
      return s; …
Run Code Online (Sandbox Code Playgroud)

c++ monads lambda haskell c++11

23
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×1

c++11 ×1

haskell ×1

lambda ×1

monads ×1