free-monad相关内容
我最近自学了 free 中的 Free monad包,但我遇到了一个问题.我想为不同的库提供不同的免费 monad,本质上我想为不同的上下文构建 DSL,但我也希望能够将它们组合在一起.举个例子: {-# LANGUAGE DeriveFunctor #-}模块测试免费在哪里导入 Control.Monad.Free数据响铃F x= 戒指 x|编钟推导(函子,显示)类型 Bells = Free
..
免费 的文档说: 许多常见的 monad 都是作为自由 monad 出现的, 给定 data Empty a,Free Empty 与 Identity monad 同构. 免费的Maybe 可用于建模偏向性monad,其中每一层都代表运行一段时间的计算. 还有哪些 monad 可以使用 Free 表达? 我只能想到一个:我相信 Free (Const e) 与 Eith
..
我看到Free Monad这个词弹出每个 现在 和 然后有一段时间,但每个人似乎只是使用/讨论它们而没有解释它们是什么.那么:什么是自由 monad?(我想说我熟悉 monad 和 Haskell 基础知识,但对范畴论只有非常粗略的了解.) 解决方案 Edward Kmett 的回答显然很棒.但是,这有点技术性.这是一个可能更容易理解的解释. 自由 monad 只是将函子转换为 mo
..
我正在尝试根据我在网上阅读的一些有用文献,使用 Free monad 来构建 AST. 我有一些关于在实践中使用这些类型的 AST 的问题,我已将其归结为以下示例. 假设我的语言允许以下命令: {-# LANGUAGE DeriveFunctor #-}数据命令下一个= DisplayChar Char 下一个|DisplayString 字符串下一个|重复 Int (Free Co
..
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[
..
我正在尝试开始在我的项目中使用免费的 monad,并且我正在努力使其优雅. 假设我有两个上下文(实际上我有更多) - Receipt 和 User - 两者都对数据库进行操作,我想将它们的解释器分开并组合它们在最后一刻. 为此,我需要为每个操作定义不同的操作,并使用 Coproduct 将它们组合成一种类型. 这是我经过几天的谷歌搜索和阅读后的结果: //收据密封性状 ReceiptOp[
..
我之前认为实现的部分目标是避免这个问题,所以也许我在做一些明显愚蠢的事情? 这是一些代码: //堆栈溢出进口scalaz._密封特质指令[T]case class Wait(ms: Long) extends Command[Unit]case object Evaluator extends (Command ~>Id.Id) {覆盖 def apply[T](cmd: Command[
..
几周前Dragisa Krsmanovic问这里有一个问题,关于如何在 Scalaz 7 中使用 free monad 来避免这种情况下的堆栈溢出(我稍微修改了他的代码): import scalaz._, Scalaz._def setS(i: Int): State[List[Int], Unit] = modify(i :: _)val s = (1 to 100000).foldLeft
..
我正在尝试构建一个免费的monad(使用 免费 ),其行为类似于StateT单子,但也允许您在基本状态 AppState 上运行单子.我有一个单独的构造器 LiftAction ,其中包含那些类型.这个想法是让 zoom ing Actions保持向下,直到它们到达AppState,AppState可以在其扩展映射内存储不同的状态. 这是我之前使用mtl的尝试(失败):在嵌套状态转换器中移动
..
如果我有一个值 a:Free [Op,A] ,是否可以“展平" a 的结构,以便两个 Op 可能会折叠成一个吗? 上下文:我想在解释之前将其作为优化步骤执行,因为 Op 的语义是其运算是幂等的.因此,如果两个“连续"出现,则可以在不增加程序语义的情况下消除第二个. 解决方案 据我所知,Free Monad程序无法进行这种自省,因为它表示顺序计算,其中每一步都取决于另一步的结果.
..
我正在尝试翻译此Scala的cats示例关于免费撰写单子. 该示例的要点似乎是将不同的关注点分解为不同的数据类型: data Interact a = Ask (String -> a) | Tell String a deriving (Functor) data DataOp = AddCat String | GetAllCats [String] deriving (Func
..
我一直在使用free包中Control.Monad.Free中的Free数据类型.现在,我试图将其转换为在Control.Monad.Free.Church中使用F,但不知道如何映射函数. 例如,使用Free的简单模式匹配功能将如下所示- -- Pattern match Free matchFree :: (a -> r) -> (f (Free f a) -> r) -
..
假设我正在尝试仅通过一项操作来实现一种非常简单的领域特定语言: printLine(line) 然后我要编写一个程序,该程序将整数n作为输入,如果n被10k整除,则会打印一些内容,然后用n + 1调用自身,直到n达到某个最大值. 忽略所有由于理解而引起的语法噪音,我想要的是: @annotation.tailrec def p(n: Int): Unit = { if (
..
我试图用一个免费的monad构建一个EDSL来构建像Prolog这样的AND / OR决策树,并且>> = 映射到AND, mplus 映射到OR。我想能够描述像 A AND(B或C)AND(D OR E)之类的东西,但是我不想让distributivity把它变成。最终,我想在约束求解器中将AND / OR节点转换为指定约束条件,而不会导致我想要求解器处理的多个替代方案的组合爆炸。 Con
..
好的,我已经知道如何使用 Reader (和 ReaderT ,未显示) a href =“http://hackage.haskell.org/package/operational”rel =“noreferrer”> 运营 包裹: { - #LANGUAGE GADTs,ScopedTypeVariables# - } 导入Control.Monad.Operational
..
给定一个免费的monad DSL如: data FooF x = Foo String x | Bar Int x 派生(Functor) 类型Foo =免费FooF 以及 Foo 的随机解释器: printFoo :: Foo - > IO() printFoo(Free(Foo s n))=打印s>> printFoo n printFoo
..
我有一个由 FreeT 生成的标准解释器monad变换器的简化版本: data InteractiveF pra = Interact p(r - > a) type Interactive pr = FreeT(InteractiveF pr) p 是“提示”,而 r 是“环境”......人们可以使用类似的方式运行它: runInteractive
..
我正在尝试使用免费monad基于一些我在网上阅读的有用文献构建AST。 我有一些关于使用这些工具的问题在实践中使用了几种AST,我将它们归结为以下示例。 假设我的语言允许使用以下命令: { - #LANGUAGE DeriveFunctor# - } data下一个 = DisplayChar Char下一个 | DisplayString String next
..
(更新) 我使用免费Monad 到通用数据存储。我想将运行时用户选择的特定解释器(:: DataStore a - > IO a)与其他一些信息一起放入状态monad中。我似乎无法将任何东西放入数据结构的这个字段中。 如何将一个值放入定义为较高排名类型的字段中? $ $ b { - #LANGUAGE RankNTypes,DeriveFunctor# - } dat
..
免费的MonadPlus 定义为 p> data Free fa = Pure a |免费(f(Free f a))|加上[免费发放] 已在 free 4.6中移除, (更新日志): 删除 Control.MonadPlus.Free 。使用 FreeT f [] 代替,结果将是守法的。 什么是问题,特别是什么法律没有持有?
..