在该chain
的文档你会发现:
调用
chain
一个包装的对象,将导致未来所有的方法调用返回裹物为好。 当你完成计算,用value
来获取最终值。
正因为此,在chain
函数创建一个单子?
在该chain
的文档你会发现:
调用
chain
一个包装的对象,将导致未来所有的方法调用返回裹物为好。 当你完成计算,用value
来获取最终值。
正因为此,在chain
函数创建一个单子?
不,不是一个单子,但comonad! 它变成一个函数,一个包装对象,并返回一个正常值成一个函数,该函数取并返回一个包装对象。 作为Haskell的类型签名,这将是:
(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
类型签名value
是:
Wrapped a -> a
这些正是你所需要的comonad。 所述第一函数通常称为extend
和第二extract
。
你可以把comonad与一些额外的上下文的值。 这当然正是chain
一样。
见这个问题#1所有关于comonads。