Class Dart中的单子类

Class Dart中的单子类,class,haskell,dart,monads,Class,Haskell,Dart,Monads,在Haskell中,类Monad的定义如下: class Monad m其中 (>>=)::MA->(a->MB)->MB (>>)::MA->MB->MB return::a->ma 失败::字符串->MA 我想用Dart来表达上面Haskell代码中的m所说的:每个Monad类都必须有方法对同一个Monad的对象进行计算。可能吗?如何实现?未来的是一元的,所以您可以查看它来了解在Dart中是如何实现的。首先要注意的是,Dart的类型系统不能完全键入所有操作,但它们的工作原理基本相同 Fut

在Haskell中,类
Monad
的定义如下:

class Monad m其中
(>>=)::MA->(a->MB)->MB
(>>)::MA->MB->MB
return::a->ma
失败::字符串->MA

我想用Dart来表达上面Haskell代码中的
m
所说的:每个
Monad
类都必须有方法对同一个Monad的对象进行计算。可能吗?如何实现?

未来的
是一元的,所以您可以查看它来了解在Dart中是如何实现的。首先要注意的是,Dart的类型系统不能完全键入所有操作,但它们的工作原理基本相同

Future.then()
充当绑定(
>=

如果Dart具有泛型方法和联合类型,则未来的接口可能如下所示:

未来{
Future then(Future | B回调(A值));
}
(注意:那不是真正的飞镖!)

then()
接受一个回调函数,该函数接受
a
并返回
Future
B
。如果回调返回一个
B
,它将自动转换为
未来的

>
等效的方法是忽略回调参数

如果不进行自动值到monad的转换,可以获得更好的类型,但是由于缺少泛型方法,无法像Haskell那样精确。你可以这样写:

类单子{
Monad/**/bind(Monad/**/callback(A值));
}

您认为DART是函数式编程语言吗?你知道其他语言的例子吗?我认为,如果存在其他语言的示例(非功能性),那么与直接类比Haskell示例(来自wikipedia)相比,Dart更容易适应Dart;你也许能够完成同样的事情,但肯定不是以同样的表达方式。