gpt4 book ai didi

haskell - 函数应用作为身份 Monad : how is it an instance of the Monad typeclass?

转载 作者:行者123 更新时间:2023-12-02 06:34:34 24 4
gpt4 key购买 nike

我在看 The Craft of Functional Programming (2nd edition),其中第 404 页简要提到函数应用程序也是一个 Monad,作者称其为 identity Monad。

但是我很难想象函数应用程序如何在 Haskell 中成为类型类 Monad 的实例,就像 Maybe 数据结构成为 Monad 类型类的实例一样。

这也引出了另一个问题:函数应用程序如何成为类型构造函数(与 Maybe 相同)?

有人可以深入了解这个谜团吗?

最佳答案

函数应用程序本身不是 monad,它是 Identity monad 中的绑定(bind)。

newtype Identity a = Identity { runIdentity :: a }
instance Monad Identity where
return = Identity
(Identity a) >>= f = f a -- :: Identity a -> (a -> Identity b) -> Identity b
join (Identity (Identity a)) = Identity a
fmap f (Identity a) = Identity $ f a

因此,如果您将所有函数和值提升到标识 monad 中,您可以使用 do-notation,这将只是围绕普通函数应用程序进行大量簿记。

你不应该将它与类型 (->) a 的 Monad 实例混淆,后者与 reader Monad 同构:newtype Reader a b = Reader { runReader::a -> b }

关于haskell - 函数应用作为身份 Monad : how is it an instance of the Monad typeclass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934032/

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