gpt4 book ai didi

haskell - free monads 与 mtl 的争论是什么?

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

我见过this这篇文章对自由单子(monad)进行了抽象的描述。我也了解 Monad Transformer 是什么,并且我(在某种程度上)了解它们为何有用。

我不知道免费 monad 的用途是什么,也不知道 monad 转换器库是什么。我还听说过mtl vs free monad debate ,但我不确定它是什么,因为我在互联网上找不到任何关于此的讨论。

有人可以解释一下这个争议是什么吗?

最佳答案

可能它们实际上意味着 Freer monad ( paperpackage ),据我所知,它们基本上与 monad 转换器相同,只是具有稍微不同的接口(interface),并且共享其实现的某些部分。

它只有一个单子(monad)类型Eff r v,其中r是一种神奇的类型,据我所知,它是存储数据的异构列表。添加新的转换器时,您只需要定义其核心逻辑,而不必定义任何新的实例。

例如,定义 State 需要多少(代码是从 package 复制粘贴的,并受其许可证 BSD-3-Clause 约束):

data State s v where
Get :: State s s
Put :: !s -> State s ()

get :: Member (State s) r => Eff r s
get = send Get

put :: Member (State s) r => s -> Eff r ()
put s = send (Put s)

runState :: Eff (State s ': r) w -> s -> Eff r (w,s)
runState (Val x) s = return (x,s)
runState (E u q) s = case decomp u of
Right Get -> runState (qApp q s) s
Right (Put s') -> runState (qApp q ()) s'
Left u' -> E u' (tsingleton (\x -> runState (qApp q x) s))

我不确定这种方式是否比 monad 转换器有任何实际优势,因为它们已经编写好了。

关于haskell - free monads 与 mtl 的争论是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539734/

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