gpt4 book ai didi

haskell - 为什么 Identity monad 有用?

转载 作者:行者123 更新时间:2023-12-04 00:02:07 28 4
gpt4 key购买 nike

我经常读到

It seem that identity monad is useless. It's not... but that's another topic.



那么谁能告诉我它有什么用?

最佳答案

Identity对于单子(monad)、仿函数和应用仿函数,就像 0 对数字一样。就其本身而言,它似乎没用,但在人们期望一个实际上不做任何事情的单子(monad)或(应用)仿函数的地方经常需要它。

如前所述,Identity允许我们只定义 monad 转换器,然后将它们对应的 monad 定义为 SomeT Identity .

但这还不是全部。用 monad 定义其他概念通常很方便,这通常会增加很多灵 active 。例如 Conduit i m o (另见 this tutorial )定​​义管道中可以请求 i 类型数据的元素, 可以产生 o 类型的数据, 并使用单子(monad) m用于内部处理。然后可以使用这样的管道在给定的 monad 中运行

($$) :: Monad m => Source m a -> Sink a m b -> m b

(其中 SourceConduit 的别名,没有输入, SinkConduit 的别名,没有输出)。当管道中不需要有效的计算,只需要纯代码时,我们只需要专门化 mIdentity并运行这样的管道
runIdentity (source $$ sink)
Identity也是“空”仿函数和应用仿函数: Identity与另一个仿函数或应用仿函数组成与原始仿函数同构。例如, Lens' 被定义为 Functor 中的多态函数:
Functor f => (a -> f a) -> s -> f s

粗略地说,这样的镜头可以读取或操作 a 类型的东西。里面 s ,例如记录中的字段(有关镜头的介绍,请参见 this post)。如果我们专业 fIdentity ,我们得到
(a -> Identity a) -> s -> Identity s

这是同构的
(a -> a) -> s -> s

所以给定 a上的更新功能,返回 s 上的更新函数. (为了完整性:如果我们将 f 专门化为 Const a ,我们得到 (a -> Const b a) -> s -> Const b s ,它与 (a -> b) -> (s -> b) 同构,也就是说,给定 a 上的读者,返回 s 上的读者。)

关于haskell - 为什么 Identity monad 有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645505/

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