monads相关内容

如何在 Happy 中使用 Alex monadic 词法分析器?

我正在尝试学习使用 Alex + Happy 来构建解析器,特别是我对学习使用 Alex 的 monad 包装器很感兴趣.我已经看过 Alex 和 Happy 但对我来说,它们都真的缺乏关于将它们一起使用的任何有用信息.我设法让它们与 basic 和 posn 包装器一起工作,但我对 monad 不知所措. 我已经看过关于亚历克斯、快乐和一元词法分析器的不同问题(包括:有没有关于使用 Ale ..
发布时间:2021-12-14 12:38:58 其他开发

如何从 Haskell 的 monad 中取出一个值?

有没有办法从 monad 中取出“东西"? 我正在开发一款游戏,现在我正在尝试了解数据库.我发现 happstack 非常好,但我拿不到东西. 比如我有这个功能(希望大家熟悉happstack) getAllThings :: MonadIO m =>米 [东西]getAllThings = 做elems ..
发布时间:2021-12-14 12:38:11 其他开发

如何使用 List monad 对非确定性建模?

谁能解释一下(用简单的英语示例更好)列表 monad 可以做什么来模拟非确定性计算?即问题是什么以及列表 monad 可以提供什么解决方案. 解决方案 这是一个基于抛硬币的例子.问题如下: 您有两枚硬币,分别标记为 Biased 和 Fair.Biased 硬币有两个正面,Fair 硬币有一个正面和一个反面.随机选择这些硬币中的一个,扔它并观察结果.如果结果是正面,那么您选择 Bia ..

结合自由类型

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

如果你违反了单子法则,你会怎样?

编译器或库中更“本机"的部分(IO 或可以访问黑魔法和实现的函数)是否对这些定律做出假设?打破它们会导致不可能的事情发生吗? 或者它们只是表达了一种编程模式——也就是说,破坏它们会惹恼你的唯一人是那些使用你的代码但没想到你这么粗心的人? 解决方案 编译器不会对定律做任何假设,但是,如果您的实例不遵守定律,它将不会像 monad 那样运行——它会做一些奇怪的事情,否则在您的用户看来无法 ..
发布时间:2021-12-14 12:34:03 其他开发

为 Monad 脱糖 do-notation

在学习 Haskell 时,我意识到 do 符号只是语法糖: a = do x 翻译成 a = [3..4] >>= (\x -> [1..2] >>= (\_ -> return (x, 42))) 我意识到我可能会使用 do-notation,但我想了解翻译中发生了什么.所以纯粹出于教学原因,ghc/ghci 有没有办法为我用 do-notation 编写的相当复杂的 monad 提 ..
发布时间:2021-12-14 12:32:58 其他开发

Haskell:实际的 IO monad 实现,用不同的语言?

IO monad 是如何实现的?从某种意义上说,main 函数的实际实现是什么? 我如何从另一种语言调用 haskell 函数 (IO),在这种情况下我是否需要自己维护 IO? main 是否将 IO 操作(Lazily)作为引用提取然后调用它们?或者它是解释器的工作,当它找到可以调用它们的方式的动作时?或者也许是别的什么? 是否有不同语言的 IO monad 实现可以帮助深入理 ..
发布时间:2021-12-14 12:32:33 其他开发

Applicative/Monad 实例在多大程度上是唯一确定的?

如这个问题/答案所述,Functor 实例是唯一确定的(如果它们存在). 对于列表,有两个众所周知的 Applicative 实例:[] 和 ZipList.所以Applicative 不是唯一的(另请参阅GHC 能否为 monad 转换器派生 Functor 和 Applicative 实例?a> 和 为什么没有 -XDeriveApplicative 扩展?).但是,ZipList 需要 ..
发布时间:2021-12-14 12:31:39 其他开发

哪些 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 其他开发

Monad 连接函数

虽然 monad 在 Haskell 中使用 bind 和 return 函数表示,但它们也可以使用 join 函数进行另一种表示,例如 在此讨论.我知道这个函数的类型是 M(M(X))->M(X),但这实际上是做什么的? 解决方案 实际上,在某种程度上,join 才是真正发生奇迹的地方--(>>=) 主要是为了方便. 所有基于 Functor 的类型类使用某种类型描述附加结构.对于 ..
发布时间:2021-12-14 12:30:19 其他开发

“有效"到底是什么?意思是

我一次又一次地读到有效这个词,但我仍然无法清楚地定义它的含义.我假设正确的上下文是有效的计算,但我也看到了术语有效的值) 我曾经认为有效意味着有副作用.但是在 Haskell 中没有副作用(除了某种程度上的 IO).仍然到处都是有效的计算. 然后我读到 monad 用于创建有效的计算.我可以在 State Monad 的上下文中理解这一点.但是我没有在 Maybe monad 中看到任 ..
发布时间:2021-12-14 12:30:10 其他开发

单子的创造性用途

我正在寻找要学习的 monad 的创造性用法.我曾在某处读到过 monads 已在 AI 中使用,但作为 monad 新手,我不知道如何使用. 请附上指向源代码和示例用法的链接.没有标准单子请. 解决方案 Phil Wadler 写了 ..
发布时间:2021-12-14 12:25:04 其他开发

就 Monad 而言,递归连接 Promise 的含义是什么?

我知道 Javascript 的承诺在技术上既不是 Haskell 意义上的函子也不是 monad,因为(除其他外) 它们包含一个 bind 操作,当传入纯函数(因此具有不明确的类型)时,该操作回退到 map Promise 构造函数和 resolve(又名 return)都递归地连接嵌套的 Promise 通过始终提供具有正确类型的函数,可以轻松绕过第一个问题 a ->承诺 b. ..
发布时间:2021-12-14 12:22:48 前端开发

Haskell:陷入 IO monad

我正在尝试使用 haskell-src-exts 包中的 parseFile 函数解析文件. 我正在尝试使用 parseFile 的输出,这当然是 IO,但我不知道如何绕过 IO.我找到了一个函数 liftIO 但我不确定这是否是这种情况下的解决方案.这是下面的代码. import Language.Haskell.Exts.Syntax导入 Language.Haskell.Exts导入 ..
发布时间:2021-12-14 12:22:04 其他开发

为什么要在 monad 中使用这种特殊的函数类型?

Haskell 的新手,我正在尝试弄清楚 Monad 的事情.monadic 绑定操作符——>>=——有一个非常奇特的类型签名: (>>=) :: Monad m =>m a ->(a -> m b) ->米 为了简化,让我们用 Maybe 代替 m: (>>=) :: 可能是 ->(a -> 也许 b) ->也许 b 但是,请注意定义可以以三种不同的方式编写: (>>=) :: 可能是 ..
发布时间:2021-12-14 12:21:20 其他开发

为什么 Functor 类没有返回函数?

从分类的角度来看,函子是一对两个映射(一个在对象之间,另一个在类别的箭头之间),遵循一些公理. 我已经假设,每个 Functor 实例都类似于数学定义,即可以映射对象和函数,但是 Haskell 的 Functor 类只有函数 fmap 映射函数. 为什么会这样? UPD 换句话说: 每个 Monad 类型 M 都有一个函数 return :: a ->M a. 和 ..
发布时间:2021-12-14 12:18:41 其他开发