问题标签 [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 - FreeT 的 MonadTransControl 实例
是否可以实现一个MonadTransControl
实例FreeT
?我从以下开始,但卡住了:
如果它无法实现,那么为什么以及是否有可能以某种方式扩展特定的自由函子实现以使其可实现?
haskell - 我什么时候想使用 Free Monad + Interpreter 模式?
我正在做一个项目,其中包括一个数据库访问层。很正常,真的。在之前的一个项目中,一位合作者鼓励我将 Free Monads 概念用于数据库层,我就这样做了。现在我正试图在我的新项目中决定我得到什么。
在之前的项目中,我有一个看起来很像这样的 API。
等等。大约有二十个这样的公共职能。为了支持他们,我有DBAction
数据结构:
然后是一个单子实现:
然后是口译员。然后是实现每个不同查询的原始函数。基本上,我觉得我有大量的胶水代码。
在我当前的项目中(在一个完全不同的领域),我为我的数据库使用了一个非常普通的 monad:
等等。我认为,最终,我将拥有代表高级概念的“公共”函数,它们都在DBM
上下文中运行,然后我将拥有执行 SQL/Haskell 粘合的所有函数。总的来说,这比免费的 monad 系统感觉要好得多,因为我并没有编写大量样板代码,只是为了换掉我的解释器。
或者...
我真的通过 Free Monad + Interpreter 模式获得了其他东西吗?如果是这样,是什么?
haskell - 在 Haskell 的 Free monad 中 Pure 是什么意思?
我尝试学习免费的单子。我发现以下内容:
纯是什么意思?为什么我需要 r 和 Pure?
scala - Applicative vs. monadic 组合器和 Scalaz 中的自由 monad
几周前Dragisa Krsmanovic在这里问了一个问题,关于如何在 Scalaz 7 中使用 free monad 来避免这种情况下的堆栈溢出(我对他的代码做了一些修改):
我认为只需将蹦床举起来就StateT
可以了:
但它仍然会破坏堆栈,所以我只是将其发布为评论。
Dave Stevens刚刚指出,使用 applicative*>
而不是 monadic 的排序flatMap
实际上工作得很好:
(嗯,它当然超级慢,因为这是你在 Scala 中做类似这样有趣的事情所付出的代价,但至少没有堆栈溢出。)
这里发生了什么?我认为这种差异可能没有原则上的原因,但我真的不知道实施中会发生什么,并且目前没有时间进行挖掘。但我很好奇,如果其他人知道会很酷。
haskell - 在 Haskell 中导航和修改基于 Free monad 的 AST
我正在尝试根据我在网上阅读的一些有用的文献来使用 Free monad 构建 AST。
我对在实践中使用这些类型的 AST 有一些疑问,我将其归结为以下示例。
假设我的语言允许以下命令:
我手动定义了 Free monad 样板:
这允许我指定如下程序:
现在,我想执行我的程序,这看起来很简单。
和
好的。这一切都很好,但现在我想了解我的 AST,并对其执行转换。像编译器中的优化一样思考。
这是一个简单的:如果一个Repeat
块只包含DisplayChar
命令,那么我想用适当的DisplayString
. 换句话说,我想repeat 2 (displayChar 'A' >> displayChar 'B')
用displayString "ABAB"
.
这是我的尝试:
在 GHCI 中观察 AST 表明这可以正常工作,而且确实如此
但我不开心。在我看来,这段代码是重复的。每次我想检查它时,我都必须定义如何遍历我的 AST,或者定义像我project
这样的函数来让我了解它。当我想修改树时,我必须做同样的事情。
所以,我的问题是:这种方法是我唯一的选择吗?我可以在不处理大量嵌套的情况下对我的 AST 进行模式匹配吗?我可以以一致且通用的方式(可能是 Zippers、Traversable 或其他方式)遍历树吗?这里通常采用什么方法?
整个文件如下:
haskell - 从免费的替代仿函数生成 optparse-applicative 解析器
考虑以下类型签名:
Foo
现在我展示了从to类型optparse-applicative
的自然转换Parser
:
(好吧,它有点没用,但它会用于讨论)。
现在我将Bar
成为免费的替代仿函数Foo
:
鉴于这是一个自由函子,我应该能够从tomkParser
进行自然转换:Bar
Parser
事实上,这很有效,给了我一个Parser
支持。然而,这是一个非常没用的,因为试图用它做很多事情会导致无限循环。例如,如果我尝试描述它:
并挂起直到被打断。
其原因似乎是在其定义中optparse-applicative
作弊many
and some
:它在幕后使用单子解析。
我在这里做错了吗?鉴于此,我不明白如何以这种方式构造解析器。有任何想法吗?
haskell - 语法树:free monad + Bound.Scope
我正在尝试使用 ekmett 的库bound
和free
. 我有一些工作,我可以将其简化为以下最小示例:
最后两行,呃,不是我所希望的。他们使它成为一种 PITA,以实际利用注释(或其他)的开放递归。
有没有更好的方法将这两个库一起使用,和/或我是否应该放弃尝试制作Term
免费的 monad?
scala - 免费 Monad 在 Scala 中生成博客提要
假设我需要为博客站点添加生成 RSS/Atom 提要。我正在考虑“Feed Monad Interpreter”模式。也就是说,我将定义一个带有原语的 DSLBlog
和BlogPost
a Free monad
,它只是这些原语的树,以及将Free monad
树转换为 XML 的 RSS/Atom “interpeters”。
是否有意义 ?
scala - 在 Scala 中编写 Free monad
我想我明白Free
monad 是什么。我希望我也理解函子组成但单子不组成,即如果M1
和M2
是单子,那么不一定M1[M2]
是单子。
我的问题是:
Free
单子组成吗?- 假设我们有函子
F1
和F2
它们的组合F1[F2]
。假设我们也有Free1
andFree2
--用于andFree
的单子。我们可以用 just和定义一个monad吗?F1
F2
Free
F1[F2]
Free1
Free2