gpt4 book ai didi

clojure - 用于 Clojure 中的标识 monad

转载 作者:行者123 更新时间:2023-12-02 08:22:04 25 4
gpt4 key购买 nike

我一直在读 excellent introduction to monads for Clojure programmers 。本文说明了 Identity monad 在功能上等同于 Clojure 的 let,并且 Sequence/List monad 等同于 for

当文章谈到 monad 转换器时,它展示了一个结合 Maybe 和 Sequence monad 的示例。好的,所以使用 Sequence monad 而不是 for 的原因之一是我可以转换它。然而,转换一个 Identity monad 对我来说没有意义——这不是总是等同于构建任何转换的 monad 吗?例如,如果我用 Identity 转换 Maybe - 这不是给了我一个 Maybe,这样直接声明会更容易吗?

有人可以澄清一下在 Clojure 中选择 Identity monad 而不是 let 是否有实际用途(也许我并没有完全考虑到以下含义)变压器?),还是只是为了理论完整性?

最佳答案

事实上,identity monad 作为 monad 转换器的基础非常有用。例如,maybe monad 转换器(maybe-t)允许除 nil 之外的任何值:

1:2 => (use 'clojure.contrib.monads)
nil
1:3 => (domonad maybe-m [a 1 b 2] (+ a b))
3
1:4 => (domonad maybe-m [a 1 b nil] (+ a b))
nil
;; Domain uses the :fail keyword as the nil value:
1:6 => (domonad (maybe-t identity-m :fail) [a 1 b :fail] (+ a b))
:fail

请注意,使用 Maybe-m 作为基本 monad 会在 :fail 和 nil 上实现快捷方式,而不仅仅是 :fail。

关于clojure - 用于 Clojure 中的标识 monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490578/

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