free-monad相关内容

结合自由类型

我最近自学了 free 中的 Free monad包,但我遇到了一个问题.我想为不同的库提供不同的免费 monad,本质上我想为不同的上下文构建 DSL,但我也希望能够将它们组合在一起.举个例子: {-# LANGUAGE DeriveFunctor #-}模块测试免费在哪里导入 Control.Monad.Free数据响铃F x= 戒指 x|编钟推导(函子,显示)类型 Bells = Free ..
发布时间:2021-12-14 12:34:29 其他开发

哪些 monad 可以在某些函子上表示为 Free?

免费 的文档说: 许多常见的 monad 都是作为自由 monad 出现的, 给定 data Empty a,Free Empty 与 Identity monad 同构. 免费的Maybe 可用于建模偏向性monad,其中每一层都代表运行一段时间的计算. 还有哪些 monad 可以使用 Free 表达? 我只能想到一个:我相信 Free (Const e) 与 Eith ..
发布时间:2021-12-14 12:31:25 其他开发

什么是自由单子?

我看到Free Monad这个词弹出每个 现在 和 然后有一段时间,但每个人似乎只是使用/讨论它们而没有解释它们是什么.那么:什么是自由 monad?(我想说我熟悉 monad 和 Haskell 基础知识,但对范畴论只有非常粗略的了解.) 解决方案 Edward Kmett 的回答显然很棒.但是,这有点技术性.这是一个可能更容易理解的解释. 自由 monad 只是将函子转换为 mo ..
发布时间:2021-12-14 11:41:19 其他开发

在 Haskell 中导航和修改基于 Free monad 的 AST

我正在尝试根据我在网上阅读的一些有用文献,使用 Free monad 来构建 AST. 我有一些关于在实践中使用这些类型的 AST 的问题,我已将其归结为以下示例. 假设我的语言允许以下命令: {-# LANGUAGE DeriveFunctor #-}数据命令下一个= DisplayChar Char 下一个|DisplayString 字符串下一个|重复 Int (Free Co ..
发布时间:2021-11-26 17:54:05 其他开发

在 scalaz 中免费实现

Haskell 中的 Free 实现是: data Free f a =纯a|自由 (f (自由 f)) 然而,Scalaz 中的实现是: 密封抽象类 Free[S[_], A]私有案例类 Return[S[_], A](a: A) extends Free[S, A]私有案例类 Suspend[S[_], A](a: S[A]) extends Free[S, A]私有案例类 Gosub[ ..
发布时间:2021-07-15 21:11:17 其他开发

带有 Coproduct 和 monad 转换器的 Scala Free Monads

我正在尝试开始在我的项目中使用免费的 monad,并且我正在努力使其优雅. 假设我有两个上下文(实际上我有更多) - Receipt 和 User - 两者都对数据库进行操作,我想将它们的解释器分开并组合它们在最后一刻. 为此,我需要为每个操作定义不同的操作,并使用 Coproduct 将它们组合成一种类型. 这是我经过几天的谷歌搜索和阅读后的结果: //收据密封性状 ReceiptOp[ ..
发布时间:2021-07-15 20:36:04 其他开发

在免费Monad上缩放实例

我正在尝试构建一个免费的monad(使用 免费 ),其行为类似于StateT单子,但也允许您在基本状态 AppState 上运行单子.我有一个单独的构造器 LiftAction ,其中包含那些类型.这个想法是让 zoom ing Actions保持向下,直到它们到达AppState,AppState可以在其扩展映射内存储不同的状态. 这是我之前使用mtl的尝试(失败):在嵌套状态转换器中移动 ..
发布时间:2021-05-13 20:46:08 其他开发

优化免费Monad

如果我有一个值 a:Free [Op,A] ,是否可以“展平" a 的结构,以便两个 Op 可能会折叠成一个吗? 上下文:我想在解释之前将其作为优化步骤执行,因为 Op 的语义是其运算是幂等的.因此,如果两个“连续"出现,则可以在不增加程序语义的情况下消除第二个. 解决方案 据我所知,Free Monad程序无法进行这种自省,因为它表示顺序计算,其中每一步都取决于另一步的结果. ..

免费〜>蹦床:递归程序因OutOfMemoryError崩溃

假设我正在尝试仅通过一项操作来实现一种非常简单的领域特定语言: printLine(line) 然后我要编写一个程序,该程序将整数n作为输入,如果n被10k整除,则会打印一些内容,然后用n + 1调用自身,直到n达到某个最大值. 忽略所有由于理解而引起的语法噪音,我想要的是: @annotation.tailrec def p(n: Int): Unit = { if ( ..
发布时间:2020-05-22 20:10:01 其他开发

Control.MonadPlus.Free没有不必要的分配

我试图用一个免费的monad构建一个EDSL来构建像Prolog这样的AND / OR决策树,并且>> = 映射到AND, mplus 映射到OR。我想能够描述像 A AND(B或C)AND(D OR E)之类的东西,但是我不想让distributivity把它变成。最终,我想在约束求解器中将AND / OR节点转换为指定约束条件,而不会导致我想要求解器处理的多个替代方案的组合爆炸。 Con ..
发布时间:2018-06-05 11:06:08 其他开发

如何使用免费monads实现Reader?

好的,我已经知道如何使用 Reader (和 ReaderT ,未显示) a href =“http://hackage.haskell.org/package/operational”rel =“noreferrer”> 运营 包裹: { - #LANGUAGE GADTs,ScopedTypeVariables# - } 导入Control.Monad.Operational ..
发布时间:2018-06-04 17:33:05 其他开发

在Haskell中导航和修改构建在Free monad上的AST

我正在尝试使用免费monad基于一些我在网上阅读的有用文献构建AST。 我有一些关于使用这些工具的问题在实践中使用了几种AST,我将它们归结为以下示例。 假设我的语言允许使用以下命令: { - #LANGUAGE DeriveFunctor# - } data下一个 = DisplayChar Char下一个 | DisplayString String next ..
发布时间:2018-06-04 15:58:16 其他开发

如何将IO monad中的值赋给RankNType限定的构造函数

(更新) 我使用免费Monad 到通用数据存储。我想将运行时用户选择的特定解释器(:: DataStore a - > IO a)与其他一些信息一起放入状态monad中。我似乎无法将任何东西放入数据结构的这个字段中。 如何将一个值放入定义为较高排名类型的字段中? $ $ b { - #LANGUAGE RankNTypes,DeriveFunctor# - } dat ..
发布时间:2018-06-04 15:42:46 其他开发

Control.MonadPlus.Free有什么问题?

免费的MonadPlus 定义为 p> data Free fa = Pure a |免费(f(Free f a))|加上[免费发放] 已在 free 4.6中移除, (更新日志): 删除 Control.MonadPlus.Free 。使用 FreeT f [] 代替,结果将是守法的。 什么是问题,特别是什么法律没有持有? ..
发布时间:2018-06-04 15:32:44 其他开发