fmap和bind的关系

2024-01-11

查找之后Control.Monad https://hackage.haskell.org/package/base-4.9.1.0/docs/Control-Monad.html文档,我很困惑 这段话:

上述法律意味着:

fmap f xs = xs >>= return . f

他们是如何暗示这一点的?


Control.Applicative https://hackage.haskell.org/package/base-4.9.1.0/docs/Control-Applicative.html says

由于这些法律,Functorf 的实例将满足

fmap f x = pure f <*> x

之间的关系Applicative and Monad says

pure = return
(<*>) = ap

ap https://hackage.haskell.org/package/base-4.9.1.0/docs/Control-Monad.html#v:ap says

return f `ap` x1 `ap` ... `ap` xn

相当于

liftMn f x1 x2 ... xn

所以

fmap f x = pure f <*> x
         = return f `ap` x
         = liftM f x
         = do { v <- x; return (f v) }
         = x >>= return . f
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fmap和bind的关系 的相关文章

  • 为自定义镜头编写类别实例

    我一直在读这个article http www haskellforall com 2012 01 haskell for mainstream programmers 28 html用于理解镜头 我知道这不同于 爱德华 克内特 Edwar
  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 Haskell 中 为什么模式匹配期望列表在不为空时有圆括号而不是方括号 当它尝试与空列表 方括号 进行模式匹配时 为什么它不遵循相同的约定 圆括号不应该专门为元组保留吗 例如 下面不起作用 third Integral a gt a
  • 如何使用 alex/haskell 执行 python 风格的缩进/缩进标记?

    我正在用 Haskell 为 Alex 中的一种小语言编写一个词法分析器 该语言被指定为具有 python 式的显着缩进 只要缩进级别发生变化 就会发出 INDENT 标记或 DEDENT 标记 在像 C 这样的传统命令式语言中 您将在词法
  • 在 win32/cygwin 上编译 haskell 模块网络

    我正在尝试编译 Network HTTP http hackage haskell org package network http hackage haskell org package network 在 win32 cygwin 上
  • 仪器化状态单子

    我正在努力给予Monad and MonadState的实例State 计算的数量 gt gt return get and put运营 data Counts Counts binds Int returns Int gets Int p
  • Haskell:如何创建将函数应用于元组项的最通用函数

    这是一个个人练习 旨在更好地理解 Haskell 类型系统的局限性 我想创建最通用的函数 将某些函数应用于 2 条目元组中的每个条目 例如 applyToTuple fn a b fn a fn b 我试图让这个函数在以下每种情况下都起作用
  • 在 Haskell 中等待然后检测按键的简单方法是什么?

    我对 Haskell 还很陌生 所以我正在寻找一种简单的方法来检测按键 而不是使用getLine 如果有人知道任何库 或者知道一些这样做的技巧 那就太好了 如果有更好的地方可以问这个问题 请直接告诉我 我将不胜感激 如果您不想阻止 可以使用
  • 在 Haskell 中对单位的组成(例如英寸、美元等)进行建模

    跟进自我之前的一个问题 https stackoverflow com q 73375273 222529 我问如何创建一个可以对单元进行建模的类型 例如Inch 作为 Haskell 中的一种类型 我现在面临的问题是如何对该单元和其他单元
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • 如何将可选标志解析为 Maybe 值?

    我正在尝试使用optparse 应用程序 https hackage haskell org package optparse applicative 0 11 0 2解析一个Maybe String但我找不到任何地方如何处理Maybe 我
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • 不同 hs 文件中的函数分离时堆栈空间溢出

    我有一个巨大的 haskell 文件 它编译和运行没有任何问题 我想将一些函数和类型定义放在通用 hs 文件中的单独模块中 然后将其导入我的主模块中 虽然主程序编译时没有任何错误 它还编译导入的模块 但当我尝试运行它时 出现堆栈空间溢出 I
  • 可以通过Data.Function.fix来表达变形吗?

    我有这个可爱的fixana这里的函数执行速度比她的姐妹快 5 倍左右ana 我有一个criterion报告支持我这一点 ana alg Fix fmap ana alg alg fixana alg fix f gt Fix fmap f
  • 如何、为什么以及何时使用“.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 如果其中任何一个计算
  • 如何找到仅是 2、3 和 5 的幂的倍数的所有数字的列表? [复制]

    这个问题在这里已经有答案了 I am trying to generate a list of all multiples which can be represented by the form where a b and c are w
  • Haskell 测量函数性能

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

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的
  • 地图不是接受一个函数而列表返回一个列表吗?

    map2 List a gt b gt c gt a gt b gt c map2 List f map2 List f a as bs map f a bs map2 List f as bs 这是我的讲座中的一个示例 它尝试将二元函数应
  • 如何避免编写这种类型的 Haskell 样板代码

    我经常遇到这种情况 这很烦人 假设我有一个 sum 类型 它可以保存一个实例x或一堆其他无关的事情x data Foo x X x Y Int Z String other constructors not involving x 要声明

随机推荐

  • 如何使用 Salt Stack 执行多个命令?

    我尝试添加 mypack pkg installed pkgs mercurial git cmd run name mkdir p opt mypack cmd run hg pull u R opt mypack hg clone R
  • 为什么 FileInfo 显示额外的文件扩展名?

    我在为下载器创建文件下载列表时遇到问题 并且收到无法解释的 文件不存在 返回 我的 avi 文件返回 但 exe 和 txt 文件不存在 现在 通过拉入整个目录并检查文件内容 我发现我的 exe 文件显示 exe exe 我的 txt 文件
  • 检测 gtk.treeview 中的列何时调整大小

    当列的大小发生变化时 我可以捕获什么信号来检测gtk TreeView 我似乎无法在文档中找到它 gtk TreeViewColumn http library gnome org devel pygtk stable class gtkt
  • aarch64 是否有不可缓存(=缓存旁路)加载或存储指令?

    在sparc架构中 有一个ASI 地址空间指示符 被传递给加载 存储指令 因此如果ASI为0x20 则像IO访问一样绕过缓存 即使内存范围在页表中设置为可缓存 缓存也会被绕过 这有时非常方便 例如使用变量在核心之间同步时等 aarch64架
  • 用 R 绘制漂亮的饼图

    假设我有这个简单的数据 mydata lt data frame group c A B 0 AB FR c 20 32 32 16 如果我想从此数据框创建饼图 我可以这样做 with mydata pie FR labels paste0
  • 如何在rmarkdown上添加水印图片?

    我正在搜索并尝试将图像作为水印添加到 rmarkdown pdf 我正在使用render函数生成 PDF 并看到 usepackage draftwatermark 和这个问题 rmarkdown 中的水印 https stackoverf
  • 是否有适用于 .NET Compact Framework(Windows Mobile 6.1、SQLServerCE)的免费 ORM?

    看来我找到了一个不错的商业变体 http www llblgen com defaultgeneric aspx 但我正在寻找免费的 有人知道一些吗 怎么样OpenNETCF ORM http orm codeplex com 它是免费的
  • 如何在移动设备上强制桌面视图?

    如何使用 Bootstrap 在移动设备上强制显示桌面视图 我已经尝试修复viewport宽度为1024 但仍然不起作用 有什么建议吗 您只需要设置Viewport 而不是这个 响应式版本 看看这里 应该可以解决你的问题 SO bootst
  • 使用 Bash 将一大块文本回显到文件中 [重复]

    这个问题在这里已经有答案了 我需要运行一个 Bash 脚本 该脚本可以将 300 行 Groovy 脚本回显到 tmp 文件 最好的方法是什么 我当前的解决方法是将脚本文件放在网上并下载 使用heredoc语法将其他脚本嵌入到shell脚本
  • 为什么我的 rvm 不允许我切换到替代 Ruby?

    Ubuntu 已经安装了 Ruby 1 8 7 然后我安装了rvm并用它安装了Ruby 1 9 2 这是我想要使用的版本 但是 ruby v 始终返回 1 8 7 如何让 rvm 使用 Ruby 1 9 2 bxu vm bxu rvm u
  • 强类型枚举中范围解析背后的基本原理

    在强类型枚举中无条件要求显式范围解析背后的基本原理是什么 N2347 解释了与老式枚举的区别 老式枚举缺乏隐式转换 指定存储类型的能力 并且没有在周围范围内注入名称 如 C 03 它继承了 C 换句话说 写enum E1 a b c 正如C
  • 调用 LoadLibrary() 时静默捕获窗口错误弹出窗口

    调用 LoadLibrary 时是否可以静默捕获诸如 无法在动态链接库 xxx 中找到过程入口点 xxx 之类的错误弹出窗口 您可以通过调用来抑制错误弹出窗口设置错误模式 http msdn microsoft com en us libr
  • 如何查看 git 上创建多个文件的日期?

    我想查看指定目录上所有文件的 git 创建日期 添加它们的首次提交日期 我将把我的解决方案分成几个步骤 获取存储库中所有文件的列表 git ls files 这将返回存储库中所有文件的相对路径列表 获取给定文件第一次提交的 SHA 1 gi
  • 多边形斑点的中心线(二值图像)

    我有一个蠕虫的二进制图像 斑点提取效果很好 我有兴趣在斑点 蠕虫 上拟合中心线 到目前为止 我想出了这个 从多边形开始 在图像中提取斑点的轮廓之后 我应用了 voronoi 计算并丢弃了多边形 蓝色 之外的所有顶点 这给了我可以的黑色中心线
  • 如何在 Awesomium 中隐藏光标

    我试过这个
  • 如何在 Blazor 中获取客户端 IP 和浏览器信息?

    如何在 Blazor 服务器端获取 IP 地址和浏览器名称 版本等客户端信息 好吧 我今天早上遇到了这个问题 我为服务器端 Blazor 解决这个问题的方法是创建一个类 然后您可以将其作为作用域服务注入到 host cshtml 上 然后在
  • C++11 带有双参数的运算符""

    考虑 struct str str operator X long double d return str 使用 g 4 7 2 Wall std c 11 可以正常编译 但现在如果我给一个双倍 str operator X double
  • 有没有一种简单的方法可以按范围对 js 数组值进行分组?

    如果我有一个像下面这样的js数组 有没有一种简单的方法可以按范围重新分组数组值 逻辑是基于范围步长 范围步长是1 所以如果数组值连续增加1 那么应该写成 1 3 否则应该分到另一组 非常感谢 var list 1 2 3 5 6 9 12
  • 在 Android 上使用 C/C++ 库

    我编写了一个库 它通过 c c 编程语言提供了一些函数 add sub divide multi 它是使用Android NDK构建到library so中的 所以现在 我想使用Android来调用库的这些函数 我想要作为我该怎么办 Tha
  • fmap和bind的关系

    查找之后Control Monad https hackage haskell org package base 4 9 1 0 docs Control Monad html文档 我很困惑 这段话 上述法律意味着 fmap f xs xs