sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-04 14:31:49 28 4
mua khóa gpt4 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

hoặc

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

?

1 Câu trả lời

MỘT 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)操作,实际上并不是一个概括。任何>>=操作可以写成 đồ ăn , 和任何 đồ ăn操作可以写成 >>= , 所以它们是等价“幂”的运算。

相比之下,其他操作KHÔNG具有同等能力。任何应用操作<*>可以写成 >>=trở lại , 但你一般不能实现 >>=hiện hữu <*> 方面, 所以 >>=是一个严格的更强大的操作,等等。

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

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com