在the chain
documentation中,您可以找到:
那么 chain
函数会创建一个monad吗?
最佳答案
不,不是单子(monad),而是一个表情!它会将接受包装对象并返回正常值的函数转换为接受包装对象并返回包装对象的函数。作为Haskell类型签名,它将是:
(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
value
的类型签名为:Wrapped a -> a
这些正是您需要的东西。通常,第一个函数称为
extend
,第二个函数称为extract
。您可以将comonad视为具有某些额外上下文的值。当然,这正是
chain
所做的。有关comonads的更多信息,请参见this Stackoverflow question。