我不知道免费单子是用来做什么的,也不知道单子转换器库是什么。我也听说过mtl和自由单子的辩论,但我不确定是什么,因为我在互联网上找不到任何关于这一点的讨论。
有人能解释一下这场争论是关于什么的吗?
可能它们实际上意味着更自由的单子(纸,包),据我所知,基本上和单子变形金刚一样,有稍微另一个接口,并有一些实现的某些部分共享。
它只有一个单数类型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已经有一段时间了,但是这个基本的问题让我很难过,因为我不知道...