Monad 变压器:IO 和状态

2023-12-30

这个问题与其他地方已经涵盖的问题很接近,但我还没有找到任何具体解决它的内容(至少不是以我能够理解的方式)。

我想以取决于各种随机选择的方式更新状态。由于我正在使用 RandomSource 类型类的实例,所有这些随机选择都存在于 IO monad 中,如下所示:

main :: IO Int
main = do
         a <- pickRand [1..7]
         return a

         where pickRand lst = runRVar (choice lst) DevRandom

我想要做的事情如下:存储 [Int] 类型的状态,如果随机选择的列表元素 a 大于 3 ,则将其推入该状态。有小费吗?


import Control.Monad
import Control.Monad.Trans.State
import Control.Monad.IO.Class
import Data.Random.RVar
import Data.Random.Source.DevRandom
import Data.Random.List

myFun :: StateT [Int] IO ()
myFun = do
  lst <- get
  r <- liftIO $ runRVar (randomElement lst) DevRandom
  put $ if r > 3 then (r:lst) else lst
  return ()


main :: IO ()
main = evalStateT myFun [1..10] >>= print
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Monad 变压器:IO 和状态 的相关文章

  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 将系统命令的结果绑定到 Haskell 中的变量

    如何在 Haskell 中运行系统命令and将其结果 即标准输出 绑定到变量 在伪 Haskell 中 我正在寻找类似以下内容的内容 import System Process main do output lt callCommand e
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • 无点镜头创建不进行类型检查

    在函数中test 我遍历一个列表 从它的成员生成镜头 然后打印一些数据 当我使用有针对性的呼叫风格时 这会起作用 当我使其成为无点时 它无法进行类型检查 为什么会出现这种情况 我该如何解决这个问题 在我看来 GHC 并没有保留排名较高的信息
  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • 在 Haskell 中,为什么我必须在这段代码中使用美元符号?

    我仍在尝试破解这段代码 import Data Char groupsOf groupsOf n xs take n xs groupsOf n tail xs problem 8 x maximum map product groupsO
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • 你能识别 Haskell 程序中的无限列表吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何判断列表是否是无限的 https stackoverflow com questions 7371730 how to tell if a list is infinite 在Haskell中 你
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • Haskell 标准库是什么?

    GHC专用库可以称为标准库吗 或者只有 Haskell 2010 报告中的那些才算数 许多 GHC 库可以通过 Haskell 报告中的函数来实现 可能与 C 绑定相结合 但其他语言依赖于 GHC 特定的扩展 因为语言报告中定义的当前 Ha
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo

随机推荐

  • 将 API 的响应作为节点服务器的响应传递会引发异常

    在某些情况下 当在我的节点 express 服务器上命中特定路由时 我想向 API 发出请求并将该响应直接返回给客户端 我关注了这个堆栈溢出帖子 将服务器端 axios 请求的响应发送到 React Redux 应用程序 https sta
  • 为什么 asp.net mvc 中的部分视图需要下划线

    只是为了区分对话框内使用的视图还是 foreach 循环 客户详细信息 中使用的视图 你不需要下划线 这只是一个约定 而MVC非常热衷于使用约定
  • Ruby on Rails 脚本控制台

    我没能跑 script console以前 它曾经抛出一个错误 因为我script console文件已包含 usr bin env ruby19 进行命中和试验后 我通过替换修复了此错误 usr bin env ruby19 with u
  • 数据声明 Haskell 中的类型约束

    我正在使用 Haskell 并尝试编写以下内容 data Scale s Scale s s 但是 我想做到这一点s必须是 Num 类型类的内容 例如 Int 或 Double 使用 Haskell 和 GHC 可以做到这一点吗 Yes L
  • 正则表达式匹配所有内容,直到最后一次出现 /

    使用正则表达式 Ant 中的 Replaceregexp 如何匹配 然后替换 从行开头到最后一次出现斜杠的所有内容 我需要从以下任何一个开始 replace this keep this replace this replace this
  • 是否存在通过有向图所有顶点的路径?

    给定G 一个有向图 是否存在一条经过G中所有顶点的路径 不一定是简单路径 我首先需要检查非循环图和强连通图中发生的情况 然后使用强连通分量的图找到一般图的解决方案 到目前为止 我已经发现 对于强连通图来说 总有一条路径 对于非循环图 如果有
  • 什么是 premain() 以及如何调用它?

    我从来没有听说过premain我觉得这样问有点愚蠢 但是这篇文章的答案 https stackoverflow com questions 9368764 calculate size of object in java建议运行它以获得In
  • 相对布局的对角溢出背景

    大家好 我想要布局的背景如下 现在我正在做的事情如下
  • Rails 邮件程序 mimepart 在消息正文中显示为文本

    我正在使用 ActionMailer 发送测试邮件 模板正在呈现 邮件正在正常投递 唯一的问题是 Google 在消息正文中显示 mimepart 和其他标头数据 这是邮件的代码 def testing mail to gt email p
  • 字符串排列的时间复杂度

    以下示例取自 破解编码面试 第 6 版 一书 根据本书 以下代码的时间复杂度为 O n 2 n 请参考示例12 第32 33页 public static void main String args new PermutationsTest
  • 学习Python:根据条件更改列表中的值

    抱歉问了这个非常基本的问题 但这实际上是一个由两部分组成的问题 给定一个列表 我需要替换 的值带有 i 和带有整数 10 的 x 列表并不总是具有相同数量的元素 因此我需要一个允许我执行此操作的循环 a 1 7 8 5 x 如何获取值等于
  • 在选项卡中加载不同的活动

    我花了相当长的时间搜索 stackoverflow 和 google 但找不到正确向我解释如何在我的应用程序中实现选项卡的指南 我知道不应该使用 TabActivity 我还阅读了有关不要使用 TabHost 的建议 至少是这样理解的 我的
  • 当我的文本显示为问号时,这意味着什么?

    我正在尝试使用 例如 Windows GDI 在程序中显示一些文本 并且某些 unicode 字符显示为问号 怎么了 也可以看看 当我的文本显示为方框时 这意味着什么 https stackoverflow com questions 21
  • 可变参数模板示例

    考虑下面的代码 我不明白为什么必须定义 print 的空函数 include
  • Windows 转储文件格式

    我一直致力于创建更好的工具来处理我的组织中的转储 对于核心转储 linux 这很简单 因为它们是具有已知格式的 ELF 文件 然而 我们有一些 Windows 系统 它们生成的转储似乎不是 ELF 我知道有 Windows 工具可以处理这些
  • 带有 MarkupExtension 的 IValueConverter

    最近我读到一篇关于IValueConverter它也继承自MarkupExtension 它是这样的 internal class BoolToVisibilityConverter MarkupExtension IValueConver
  • Android 日志记录 - 如何清除以获得更好的性能

    Android新手 刚刚看了http developer android com reference android util Log html http developer android com reference android ut
  • 如何打印随机数菱形?

    有人可以帮我完成这个数字钻石吗 我打印了钻石的右侧 但在打印左侧时遇到了问题 如果有人可以提供帮助 我将非常感激 我对我的代码做了一些更改 我现在需要我的代码在菱形中间打印一列而不是两列 public class NumericDiamon
  • while 循环在需要时未结束

    所以一些背景信息 我是编程新手 仍在学习 所以我为我犯的微不足道的错误道歉 我正在制作自己的基于文本的游戏只是为了进一步练习等 以下是 Dropbox 上所有内容的链接 以了解更多背景信息 https www dropbox com sh
  • Monad 变压器:IO 和状态

    这个问题与其他地方已经涵盖的问题很接近 但我还没有找到任何具体解决它的内容 至少不是以我能够理解的方式 我想以取决于各种随机选择的方式更新状态 由于我正在使用 RandomSource 类型类的实例 所有这些随机选择都存在于 IO mona