问题标签 [free-monad]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 我怎样才能使这个 Haskell ADT 派生显示?
ADT 是免费的单子:
我希望它派生Show
出来,以便在使用它时可以将其打印出来。例如,如果我有以下内容:
就像现在一样,如果我添加deriving (Show)
到Free
ADT,我会收到以下错误:
我想show aa
生成一个可打印的字符串。这可能吗?
haskell - 使用免费的 monad 测试 Redis 调用
我正在尝试关注这篇博文,以便通过使用免费的 monad 将 Redis 请求的执行与它们的使用区分开来。为了使用 hedis 作为 Redis 客户端,我对提供的代码进行了一些小的更改,这些更改似乎是类型检查。不幸的是,我无法找到或编写满足 runTest 和 runRedis 函数的类型约束的类型类实例,并且当我使用 foo 调用 runTest 时出现以下错误。
存储/Types.hs
存储/实现.hs
主文件
haskell - FreeT生成的解释器monad转换器的MonadFix实例?
我有一个由以下生成的标准解释器单子变换器的简化版本FreeT
:
p
是“提示”,并且r
是“环境”......人们可以使用类似的东西来运行它:
我觉得这种类型或多或少只是StateT
......如果有的话,Interactive p r IO
我认为是IO
......我认为......但是......好吧,无论如何,我的直觉说应该有一个很好的例子。
我试着写一个,但我似乎无法弄清楚。到目前为止,我最接近的尝试是:
我还尝试使用利用MonadFix
实例的版本m
,但也没有运气 -
任何人都知道这是否真的可能,或者为什么不是?如果是的话,我继续寻找的好地方是什么?
或者,在我的实际应用程序中,我什至不需要使用FreeT
...我可以使用Free
; 也就是说,haveInteractive
只是一个 monad 而不仅仅是一个 monad 转换器,并且有
如果这种情况有可能而不是一般的 FreeT 情况,我也会很高兴:)
haskell - 使用免费的 monad 和 GADT 进行漂亮的打印
考虑由以下 GADT 定义的表达式函子:
其中Foo
定义为
(a -> r)
字段 in和(否则理想的)限制性 GADT 构造函数的组合ExprF
似乎使编写漂亮的打印解释器变得不可能:
类型孔是人们所期望的:
似乎没有办法给延续一个它需要的类型的值。该类型被编码为f
,而我正在使用的其他解释器都f
以某种方式处理以提取适当类型的值。但通往String
代表的道路似乎受阻。
我在这里缺少一些常见的成语吗?Expr
如果确实有可能,如何漂亮地打印 的值?如果不可能,什么替代结构ExprF
可以捕获相同的结构,但还支持漂亮的打印机?
haskell - 缩放和自由单子的困难
我正在使用免费的单子和镜头,使用免费的单子来创建我自己的 IO 单子版本:
我将它堆叠在一个状态单子的顶部,如下所示:FreeT MyIO (State GameState) a
哪里GameState
是:
现在,我想要的是一种PlayerState
从GameState
上下文“放大” a 的方法。像这样的东西:
但我收到了这个错误:
players . element i
这个错误似乎与遍历的事实有关;如果我从中删除列表方面_players
并使用普通镜头,那么代码就可以工作。
关于如何编写这个函数的任何想法?
scala - How to avoid stack overflow when using scalaz's free monad?
I had previously thought that part of the goal of the implementation was to avoid this very problem, so maybe I'm doing something obviously dumb?
Here is some code:
Note: I realize this is silly :) In practice, my command class has many commands, and I have a command which does this same loop...basically, poll some state, if true abort, if false, keep waiting.
I want to avoid the stack overflow that this causes... I THOUGHT this was already trampolined, but I guess I need to manually do it again? Is there a clean way to do it within the free monad way of thinking?
Update:
Thinking further on this, I think the issue isn't the sleep Free Monad but rather the Id.Id monad taht we bind into on evaluation... so I tried something like:
But the problem with this is that it will only evaluate one step. Ideally I would like runFC to block until some condition is satisfied (or in this case, to loop forever until I kill it, but without a stack overflow)
haskell - 处理可组合的自由 DSL 中的模糊类型
我正在使用free和compdata包(在精神上类似于Combining Free types )构建几个 DSL,它们应该可以基于“free monads”和“datatypes a la carte”进行组合。
虽然这适用于一些简单的 DSL,但在构造函数/命令不依赖于该类型参数的情况下,我被困在一个具有类型参数的 DSL 上,这会导致 GHC 出现模棱两可的类型参数错误。
为了澄清,这里有一些代码:
正如 GHC 所暗示的那样,试图让它与启用AllowAmbiguousTypes扩展一起工作并没有让我更进一步。我尝试在类型签名中添加一些forall a风格的东西,但无济于事。
有什么办法可以让这种模式起作用吗?
scala - 如果 F 是 Free[F[_], A] 中的函子,为什么“Free”是 monad
据我了解,如果 Foo 是单子,那么它也可以被证明是函子。但是,我不明白为什么在 free monad 中,如果 F 是 functor,Free[F[_], A] 中的 Free 是 monad,所以我们可以使用 monadic 操作来编写代码。
当我阅读此博客http://underscore.io/blog/posts/2015/04/14/free-monads-are-simple.html时提出了这个问题
在 scalaz 中,Coyoneda 使用类型类来呈现 Functor。
因此,如果提供 Coyoneda 实现,则 Free[Functor, A] 是 monad。
这是我为简单代码编写的代码。它工作得很好而且很酷,所以我们将执行和解释器分开,但是为什么 Free 变成了“免费”的单子
haskell - 如何为 Free Monads 使用 Church 编码?
我一直在使用包中的数据Free
类型。现在我正在尝试将其转换为使用但不知道如何映射函数。Control.Monad.Free
free
F
Control.Monad.Free.Church
例如,一个简单的模式匹配函数使用Free
如下所示 -
F
我可以轻松地将其转换为通过转换为/从使用的函数Free
-
但是我不知道如何在不使用toF
和的情况下完成它fromF
-
一定有一个我缺少的一般模式。你能帮我弄清楚吗?