当前位置: 首页 > 知识库问答 >
问题:

什么是自由单子与mtl的辩论?

龙景澄
2023-03-14

我不知道免费单子是用来做什么的,也不知道单子转换器库是什么。我也听说过mtl和自由单子的辩论,但我不确定是什么,因为我在互联网上找不到任何关于这一点的讨论。

有人能解释一下这场争论是关于什么的吗?

共有1个答案

隆睿
2023-03-14

可能它们实际上意味着更自由的单子(纸,包),据我所知,基本上和单子变形金刚一样,有稍微另一个接口,并有一些实现的某些部分共享。

它只有一个单数类型eff r v,其中r是一个神奇的类型,据我所知,它是存储数据的异构列表。要添加新的transformer只需定义其核心逻辑,而不必定义任何新实例

例如,这是定义状态所需的数量(代码是从包中复制的,并受其许可证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))
 类似资料:
  • 我看到自由单子这个词时不时地出现了一段时间,但每个人似乎只是在使用/讨论它们,而没有给出它们是什么的解释。那么:什么是自由单子?(我会说我熟悉单子和Haskell基础,但对范畴理论只有非常粗略的知识。)

  • 在范畴理论中,一个单子是两个伴随函子的组合。例如,也许单子是由遗忘函子组成的自由点集函子。同样地,列表单子是由遗忘函子组成的自由么半函子。 半群是最简单的代数结构之一,所以我想知道编程是否可以从更复杂的结构中受益。我在标准的Haskell包中没有找到免费的组单子,所以我将在这里定义它 自由环和向量空间(它们总是自由的)呢? 对于任何代数结构,一个范畴自由函子的存在意味着Haskell调用fold的

  • 在Mark Seemann的博客文章和示例中,我第一次看到了免费单子作为构建纯代码和IO代码之间边界的一种方式。我的基本理解是,一个免费的单子可以让您构建一个纯函数的程序(抽象语法树-AST),然后解释器将其翻译成一系列不纯的过程调用。因此,这个解释器将AST的纯操作转换为一系列的一元IO操作。 我想知道这是否复制了Haskell运行时已经在IO Monad上做的事情。如果我认为IO没有什么特别的

  • 我正在通过这个教程:https://docs.oracle.com/javase/8/javafx/get-started-tutorial/hello_world.htm 上面写着: “JavaFX应用程序通过阶段和场景定义用户界面容器。JavaFX阶段类是顶级JavaFX容器。JavaFX场景类是所有内容的容器……” "在JavaFX中,场景的内容表示为节点的分层场景图。在本例中,根节点是St

  • 那么现在我们叫bean什么?Bean是Foo类型的对象,引用“Foo”,但是Boo类是否被注释为服务,Foo被注释为存储库,也是Bean吗?我使用spring已经有一段时间了,但是这个基本的问题让我很难过,因为我不知道...