永远的单子是如何工作的?

2023-11-27

永远的单子是如何工作的?

forever :: (Monad m) => m a -> m b
forever a = a >> forever a

如果我写

main = forever $ putStrLn "SAD, I DON'T UNDERSTAND!"

永远获取IO(),这不是函数,怎么永远重复调用putStrLn呢?


从定义forever函数,可以看到它是一个标准的递归函数。

forever :: (Monad m) => m a -> m b
forever a = a >> forever a

那里没有发生任何魔法。forever只是一个递归函数。在您的特定情况下,这是一个非终止的情况。但它是终止还是非终止取决于 Monad 是如何为该类型定义的。

检查类型>>,我们得到:

λ> :t (>>)
(>>) :: Monad m => m a -> m b -> m b

从中你可以观察输入m a只是被忽略了。另一种思考方式是>>函数仅执行传递给它的第一个参数的副作用。在你的情况下m a将对应于IO ()因为那是类型putStrLn.

由于IO形成了一个Monad,forever函数也可以作用于IO相关功能。

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

永远的单子是如何工作的? 的相关文章

  • 如何使用 Haskell 中的 thyme 库从 Int 值创建 UTCTime?

    我有年 月 日 小时和分钟值 所有这些都是类型Int 我怎样才能将它们转换为UTCTime or UniversalTime 需要导入以下内容 import Control Lens import Data Thyme Clock impo
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

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

    A 昨天的问题 https stackoverflow com q 41135212 3072788有一个定义HList 来自HList https hackage haskell org package HList 0 4 1 0 doc
  • 访问函数中的环境

    In main我可以读取我的配置文件 并将其提供为runReader somefunc myEnv正好 但somefunc不需要访问myEnv读者提供 链中的下一对也没有提供 需要 myEnv 中某些内容的函数是一个微小的叶函数 如何在不将
  • Haskell 中的实例声明

    我有这两个功能 primes sieve 2 where sieve p xs p sieve x x lt xs x mod p gt 0 isPrime number number 1 null x x lt takeWhile x g
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • 无点镜头创建不进行类型检查

    在函数中test 我遍历一个列表 从它的成员生成镜头 然后打印一些数据 当我使用有针对性的呼叫风格时 这会起作用 当我使其成为无点时 它无法进行类型检查 为什么会出现这种情况 我该如何解决这个问题 在我看来 GHC 并没有保留排名较高的信息
  • 持久 selectList 导致错误“无法将类型‘BaseBackend backend0’与‘SqlBackend’匹配”

    我遇到以下编译错误 Couldn t match type BaseBackend backend0 with SqlBackend arising from a use of runSqlite The type variable bac
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • 如何在 Haskell 中向右或向左移动列表的 1 个元素?

    嗨 我一直在寻找答案 但找不到 假设我们有一个像这样的列表 1 10 4 5 3 我怎样才能将 5 向左移动 使这个列表变成 1 10 5 4 3 我尝试过了swapElementsAt通过找到该元素的索引 但它看起来非常不足 swapEl
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • Haskell 泛化问题(涉及列表理解)

    假设我想知道a上的所有要点 x y 矩形内的平面has 我可以使用列表推导式来计算 如下所示 let myFun2D x y x lt 0 2 y lt 0 2 现在 如果我想为一个人完成同样的事情 x y z 空间 我可以采取同样的方式并
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • Haskell:Data.Numbers.Primes 库在哪里?

    我尝试导入 Data Numbers Primes import Data Numbers Primes 伦哈斯克尔给了我 5 hs 1 8 Could not find module Data Numbers Primes Use v t
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • C++ 概念与 Haskell 类型类有何不同?

    Concepts TS 中的 C 概念最近已合并到 GCC 主干中 概念允许人们通过要求类型满足概念的条件 例如 可比较 来约束通用代码 Haskell 有类型类 我对 Haskell 不太熟悉 概念和类型类如何相关 概念 由概念 TS 定

随机推荐

  • PHP mb_ereg_replace 未替换,而 preg_replace 按预期工作

    我正在尝试将字符串中所有非单词字符替换为空字符串 除了空格 并将所有多个空格放在一起作为一个空格 以下代码执行此操作 cleanedString preg replace w name cleanedString preg replace
  • 将 numpy 中数组元素的所有组合相乘

    注意 我对 只需使用 for 循环进行操作 之类的答案不感兴趣 我想以 numpyish 的方式进行操作 我是 Python 初学者 我想使用 numpy ndarray 执行以下操作 给定一个数字序列t和另一个数字序列b 对于每一个t i
  • Asyncio 检测断开连接挂起

    我在 Python 3 4 中使用 Asyncio 我将尝试解释到目前为止我正在做的事情以及我 认为 导致问题的原因 一方面 我有一个具有阻塞操作的 UDP 连接框架 我将从该流中获取的数据创建为 SSE 格式传递给客户端的 json 这一
  • 从 Brocfile 的构建中排除文件夹

    有没有办法从 Brocfile 或任何其他地方 的构建中排除文件夹 用例是打包 我有一个由 pod 内的子应用程序组成的应用程序 例如 app modules components app modules app1 app modules
  • jquery中有没有办法将点击事件绑定到div的左边框?

    我有一个div div div 有没有办法将点击事件绑定到这个div的左边框 提前致谢 div height 100px border 4px solid black padding 10px 请尝试这个方法 div click funct
  • Python 中的浏览文件或目录对话框

    我正在用 Python 做一个小项目 我想浏览文件或目录以获取它们的路径 我正在使用 Tkinter 但只能找到一个文件浏览器 filename tkFileDialog askopenfilename parent root title
  • Read.csv() 抛出错误

    我一直在尝试读取 Excel 文件 但似乎有问题 该文件以 Excel 格式存储在 Documents 文件夹中 这些是我收到的错误消息 table lt read csv file choose header T sep t Warnin
  • 使用 MongoDB 制作类似 Twitter 的时间线

    我需要的 假设您正在使用 MongoDB 并且有一个名为users 每个用户都有一个 以下 数组 其中包含 user id他所关注的人的信息 然后你就有了另一个收藏statuses 每个状态包含 id它的作者 如何向某个用户显示他所关注的人
  • Netty 4 中的缓冲区所有权:如何管理缓冲区生命周期?

    我一直在尝试编写一个 HTTP 客户端来同时获取多个提要 最多 1k 同时也是学习 Netty 4 的练习 我的问题是 是否有关于新 ByteBuf 基础设施如何工作的很好的解释 谁 拥有 它们 它们如何共享 是吗 ChannelPipel
  • 如何设置热图中的中心颜色

    我想在seaborn 中绘制热图 我的代码如下 plt rcParams font size 13 plt rcParams font weight bold my dpi 96 fig ax plt subplots figsize 80
  • C# 代表现实世界的用法 [重复]

    这个问题在这里已经有答案了 我之前问过一个关于委托的问题 是否有人有一个必须使用委托的场景 这如何改进我的 C 代码 正如我使用它的许多场景一样 我似乎总是能够围绕它进行编程 每当您使用策略模式或者观察者模式 委托使您的工作比使用接口更容易
  • 在没有 Apple Developer Program (Xcode 7) 的情况下在 iOS 上安装应用程序

    6 月 8 日 Apple 宣布通过 Xcode 7 每个人都可以在自己的设备上安装他们开发的任何应用程序 而无需 Apple 开发者计划证书 Apple 开发者网站称您只需使用 Apple ID 登录即可 我已经在 Xcode 上做到了这
  • GroupMe 如何验证我的号码?

    我正在开发一个 iPhone 应用程序 我需要用户的电话号码 根据我读到的内容 例如这里 在 iOS 中以编程方式获取自己的电话号码 设备的电话号码在您的应用程序容器中不可用 我总是让用户输入他或她自己的号码 但是 当我前几天加入 Grou
  • OpenCL 中零拷贝的访问路径

    我对零拷贝到底是如何工作的有点困惑 1 想要确认以下内容对应于opencl中的零复制 CPU SYSTEM RAM c3 X lt gt PCI E c2 X PCI E CPU directly accessing GPU memory
  • Heroku:如何部署客户端和服务器在不同端口上运行的节点应用程序?

    我有一个 Nodejs API 作为服务器 React Redux 应用程序作为客户端 位于一个 git 项目中 https github com lafisrap fcc nightlife git 我想使用 heroku cli 将其部
  • 非静态方法需要一个目标

    我有一个控制器操作 可以在本地和生产中的 Firefox 以及本地 IE 上正常工作 但不能在生产中的 IE 上工作 这是我的控制器操作 public ActionResult MNPurchase CalculationViewModel
  • maven 使用 --add-exports 运行和构建

    我尝试在 Win 10 计算机上使用 InteliJ 和 Maven 运行我的应用程序 如果我跑 mvn clean javafx run 我的 GUI 启动 但如果我使用 org controlsfx control textfield
  • 如何使用 gson/retrofit 获取对象数组?

    我之前用过gson自动转换为pojo的 但现在我尝试使用改造将 api 结果转换为对象 只要 json 具有命名对象数组 就没有问题 e g items name foo name bar public class AnItem Strin
  • R 闪亮的 DataTables ColVis 行为

    我得到了一个带有 DataTables 的 RStudio Shiny 服务器页面 并且我得到了 TableTools 和 ColReorder 在下面的示例中工作 但是 ColVis Show hide columns按钮 的行为方式与示
  • 永远的单子是如何工作的?

    永远的单子是如何工作的 forever Monad m gt m a gt m b forever a a gt gt forever a 如果我写 main forever putStrLn SAD I DON T UNDERSTAND