gpt4 book ai didi

Haskell - 是否有扩展的 monad 类型 [ m (a -> m b) -> m a -> m b ]

转载 作者:行者123 更新时间:2023-12-04 14:31:49 28 4
gpt4 key购买 nike

仿函数有

(a -> b) -> m a -> m b

应用程序有

f (a -> b) -> f a -> f b

Monad 有

m a -> (a -> m b) -> m b

但是,是否有扩展的 monad 类型有

m a -> m (a -> m b) -> m b

m (a -> m b) -> m a -> m b

?

最佳答案

A Monad约束足以实现具有该类型签名的(合理的)函数:

foo :: Monad m => m (a -> m b) -> m a -> m b
foo mf ma = do
f <- mf
a <- ma
f a

或者,如果您愿意:

foo' :: Monad m => m (a -> m b) -> m a -> m b
foo' mf ma = mf >>= \f -> ma >>= f

这意味着您建议的操作,即使它看起来像通常的 >>= 的概括绑定(bind)操作,实际上并不是一个概括。任何>>=操作可以写成 foo , 和任何 foo操作可以写成 >>= , 所以它们是等价“幂”的运算。

相比之下,其他操作具有同等能力。任何应用操作<*>可以写成 >>=return , 但你一般不能实现 >>=<*> 方面, 所以 >>=是一个严格的更强大的操作,等等。

关于Haskell - 是否有扩展的 monad 类型 [ m (a -> m b) -> m a -> m b ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68750855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com