在 ghci 中跟踪历史

2024-04-12

历史管理在 GHCI 或其他基于 Haskell 的 REPL 中如何工作?由于 Haskell 是一种纯语言,我猜它是使用 monad 实现的,也许是状态单子 http://learnyouahaskell.com/for-a-few-monads-more#state.

请注意,我是 Haskell 的初学者,因此请提供详细的解释,而不仅仅是链接到源代码。


这是程序如何保存用户输入的命令历史记录的简化示例。它基本上与猜数字游戏具有相同的结构,因此一旦您了解了这一点,您应该不会有任何困难:

import Control.Monad.State
import Control.Monad

shell :: StateT [String] IO ()
shell = forever $ do
  lift $ putStr "$ "
  cmd <- lift getLine
  if cmd == "history"
    then do hist <- get
            lift $ forM_ hist $ putStrLn
    else modify (++ [cmd])

main = do putStrLn "Welcome to the history shell."
          putStrLn "Type 'history' to see your command history."
          execStateT shell []
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ghci 中跟踪历史 的相关文章

  • 结构上强制的自由替代,没有左派分配性

    有一个不错的免费替代品 http hackage haskell org package free 4 12 4 docs Control Alternative Free html在伟大的free包 它将函子提升到左分配替代方案 也就是说
  • 为什么Haskell没有split函数? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在许多语言中 都有一个函数可以使用指定的分隔符将字符串分成几部分 它经常被称为split 您可以在 Python C Java JavaScri
  • 在 win32/cygwin 上编译 haskell 模块网络

    我正在尝试编译 Network HTTP http hackage haskell org package network http hackage haskell org package network 在 win32 cygwin 上
  • 哈斯克尔状态单子

    是否putState Monad 的函数会更新实际状态还是仅返回具有新值的新状态 我的问题是 State Monad 可以在命令式设置中像 全局变量 一样使用吗 并且确实put修改 全局变量 我的理解是 不 它不会修改初始状态 但是使用单子
  • 仪器化状态单子

    我正在努力给予Monad and MonadState的实例State 计算的数量 gt gt return get and put运营 data Counts Counts binds Int returns Int gets Int p
  • Control.Arrow 与 Data.Tuple.Extra

    我经常使用以下功能Data Tuple Extra图书馆 first second and both 有等效的 函数Control Arrow 其实我更喜欢Data Tuple Extra因为我完全迷失了文档Control Arrow 使用
  • 绑定变量时 Haskell 中的无限循环

    下面的 Haskell 代码不会终止 有人可以解释一下为什么吗 谢谢 f let x 10 in let x x x in x 我认为解释器首先绑定 x 10 然后将 x x 计算为 100 并绑定 x 100 环境变为 x 100 那么整
  • 在 Haskell 中等待然后检测按键的简单方法是什么?

    我对 Haskell 还很陌生 所以我正在寻找一种简单的方法来检测按键 而不是使用getLine 如果有人知道任何库 或者知道一些这样做的技巧 那就太好了 如果有更好的地方可以问这个问题 请直接告诉我 我将不胜感激 如果您不想阻止 可以使用
  • 无法通过 cabal 安装“System.Random”

    我尝试通过 Cabal 通过 Powershell 和 Git Bash 安装 System Random 得到这个结果 PS C Users xxx gt cabal install random Resolving dependenci
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 如何、为什么以及何时使用“.Internal”模块模式?

    我在上面看到了几个包裹hackage http hackage haskell org packages archive pkg list html其中包含模块名称 Internal作为他们的姓氏组成部分 例如Data ByteString
  • “反向”使用 Maybe Monad

    假设我有很多功能 f a gt Maybe a g a gt Maybe a h a gt Maybe a 我想按以下方式组合它们 如果 f 返回 Nothing 则计算 g 如果 g 返回 Nothing 则计算 h 如果其中任何一个计算
  • 为什么在类构造函数中使用 setState 方法时 React 会抛出错误?

    我知道在为尚未安装的组件设置状态时会引发错误 这解释了我使用 setState 函数而不是显式直接设置状态所得到的错误 import React Component from react class SearchBar extends Co
  • Haskell 测量函数性能

    在 Haskell 中 我如何 简单地 测量函数的性能 例如 运行需要多长时间 或者需要多少内存 我知道分析 但是 是否有一种更简单的方法不需要我对代码进行太多更改 测量运行需要多长时间以及需要多少内存是两个独立的问题 即 基准测试和分析
  • Haskell 中的相互递归求值器

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • 解析 PHOAS 表达式

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc

随机推荐

  • Swift CloudKit SaveRecord“保存记录时出错”

    我正在尝试将记录保存到 CloudKit 但收到错误 我在其他地方看到这是一个需要知道如何保存的问题 但我无法让它发挥作用 var database CKDatabase CKContainer defaultContainer publi
  • 以编程方式更改 UITableView 的大小

    我正在尝试显示服务器上 mysql 数据库中的数据 我正在将数据加载到表中 问题是 我不希望这些数据成为视图上的唯一内容 我希望该表与其他内容共享 理想情况下 我希望表格能够随着单元格的数量而增长和扩展 因此 如果有 3 个单元格 我希望它
  • 如果处理后台消息,firebase_messaging flutter 插件会在启动时崩溃

    我综合了firebase messaging v5 1 6 https pub dev packages firebase messaging使用我的 flutter 应用程序 如自述文件中提到的 处理后台消息 选项 这是我的文件的外观 我
  • 使用 intelliJ 将字符串串联重构为 StringBuilder

    我被指定对一个项目进行重构 我遇到了这种情况 this path DESTINY deploy name FILE SEPARATOR delivery getSystem getCode FILE SEPARATOR delivery g
  • 求 a^b^c^... mod m

    我想计算一下 abcd mod m 你知道有什么有效的方法吗 因为这个数字太大了 但 a b c 和 m 适合一个简单的 32 位 int 有任何想法吗 Caveat This question is different from find
  • Spring 5 的反应式 WebSockets - 如何获取初始消息

    我遵循了该教程 特别是浏览器 WebSocket 客户端的部分 http www baeldung com spring 5 reactive websockets http www baeldung com spring 5 reacti
  • ASP.NET MVC4 实体验证错误:用户名已被占用

    我是 ASP NET MVC4 的新手 在下面的代码中遇到验证错误 我的应用程序正在使用身份和数据库 我有一些表填充了一些测试数据 致电dc SaveChanges 返回验证错误 我创建了以下类 Faculty源自类Person源自类Ide
  • 如何通过 Pktgen-DPDK 生成随机流量?

    I use range
  • 将 TStringList 的 AddObject 与整数一起使用?

    使用德尔福7 如何将整数添加到字符串列表项的目标部分 使用AddObject 如何从对象中检索整数 字符串列表项的属性 如何释放所有对象并列出 什么时候完成 Q How can i add an integer to the object
  • 将过滤器应用于 AS3 中的所有内容

    我正在尝试在 AS3 Flex SDK 中添加过滤器 我可以为任何一个对象添加一个过滤器 但我想将过滤器应用到一切那是某个对象的子对象 假设弹出一个暂停窗口 暂停窗口下方的所有内容都会变得模糊 将过滤器应用于每个单独的对象 例如 迭代列表
  • 如何更改 GTK 中的字体大小?

    有没有一种简单的方法可以更改 GTK 中文本元素的字体大小 现在我能做的就是set markup在标签上 写着一些愚蠢的东西 比如 lbl set markup span s span text 这 1 需要我设置字体 2 似乎有很多开销
  • wpf - 如何控制用户控件鼠标悬停的可见性?

    我有一个用户控件 我想禁用 UserControl 中控件的可见性 我只希望当用户的光标悬停在用户控件的主要部分 即 橙色 矩形部分 上时它可见 红色圆圈是控件的一部分 仅在 悬停 时可见 主窗口 xaml
  • 如何在没有文本框的情况下在 Selenium 中上传文件

    我一直在寻找在 Selenium 2 中上传文件的解决方案 问题是我尝试上传的网络元素可以通过两种方式使用 拖放或单击按钮 没有字段输入框 并不是说我没有尝试过使用 sendKeys 我已经在按钮和所有周围的元素上尝试过 这个问题的第二部分
  • DocFx:如何在网站上创建目录导航?

    我想创建一个目录 看起来像什么DocFx 在他们的官方网站上有 http dotnet github io docfx tutorial docfx exe user manual html 使用默认值docfx init使用所有默认值的命
  • Python wilcoxon:不等N

    Rs wilcox test可以采用不同长度的向量 但 wilcoxon 来自scipy stats不能 我得到一个unequal N错误信息 from scipy stats import wilcoxon wilcoxon range
  • 从 GPS 坐标获取城市名称

    我想从 GPS 坐标获取城市的名称 我可以使用 Google API 获取 GPS 点的详细信息 http maps googleapis com maps api geocode output parameters 输出是 XML 但我不
  • 如何导出带有产品完整 url 的产品 csv

    我想导出包含完整产品 url 的产品 CSV 即包括基本 url 我不想手动执行此操作 是否可以自定义代码 以便产品导出具有完整的 url
  • 如何读取在 gradle 执行中较早更新的属性文件中的最新属性

    对于我的 Android 项目 我配置了 defaultConfig 以便它从 gradle properties 中的版本属性获取生成的 apk 中 AndroidManifest xml 的 versionName 这很好用 这是 bu
  • 谷歌图片搜索是如何实现的?

    我只需拖放谷歌中的任何图像即可获得结果 它是如何实施的 该算法背后的想法是什么 该图像数据是否转换为任何内容以供搜索或 不知道 令人惊讶的是 我们还可以使用Google来回答这个问题 Google 按图像搜索使用的算法是什么 http ww
  • 在 ghci 中跟踪历史

    历史管理在 GHCI 或其他基于 Haskell 的 REPL 中如何工作 由于 Haskell 是一种纯语言 我猜它是使用 monad 实现的 也许是状态单子 http learnyouahaskell com for a few mon