如何使用 Monad 的 (->) 实例以及 (->) 的困惑

2023-11-25

在不同的问题上,我在评论中找到了有关使用(->)Monad 的实例,例如实现无点风格。

对于我来说,这有点太抽象了。好的,我已经看到了 Arrow 实例(->)在我看来,(->)可以在实例符号中使用,但不能在类型声明中使用(这将是另一个问题的内容)。

有没有人使用的例子(->)作为 Monad 的实例?或者一个好的链接?

抱歉,如果这个问题可能已经在这里讨论过,但是正在寻找"(->)单子实例"给你很多你可以想象的点击......因为几乎每个关于 Haskell 的问题都涉及到(->)或“单子”。


对于给定类型r,类型的函数r -> a可以被认为是一种计算a使用环境类型r。给定两个函数r -> a and a -> (r -> b),很容易想象,当给定一个环境(同样,类型为r).

可是等等!这正是 monad 的意义所在!

所以我们可以创建一个 Monad 实例(->) r实现f >>= g通过通过r二者皆是f and g。这就是 Monad 实例的用途(->) r does.

要实际访问环境,您可以使用id :: r -> r,您现在可以将其视为在环境中运行的计算r并提供一个r。要创建本地子环境,您可以使用以下命令:

inLocalEnvironment :: (r -> r) -> (r -> a) -> (r -> a)
inLocalEnvironment xform f = \env -> f (xform env)

这种将环境传递给计算的模式,然后可以在本地查询并修改它,这不仅适用于(->) rmonad,这就是为什么它被抽象为MonadReader类,使用比我在这里使用的更明智的名称:

http://hackage.haskell.org/packages/archive/mtl/2.0.1.0/doc/html/Control-Monad-Reader-Class.html

基本上,它有两个实例:(->) r我们在这里看到的,以及ReaderT r m,这只是一个newtype包装纸r -> m a,所以它与(->) r我在这里描述了 monad,除了它在其他一些经过转换的 monad 中提供计算。

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

如何使用 Monad 的 (->) 实例以及 (->) 的困惑 的相关文章

  • 作用域类型变量需要显式 foralls。为什么?

    如果你想使用 GHC词法作用域类型变量 http www haskell org ghc docs 7 6 2 html users guide other type extensions html scoped type variable
  • 更新 mtl 后找不到模块“Control.Monad.State”

    我想用Control Monad Except模块 但结果发现我有一个过时的 mtl 包 它导致了导入错误 我有一个过时的模块Control Monad Error 所以我做了 sudo cabal install mtl 并且安装了2 2
  • Haskell 长度函数实现

    我正在学习 Haskell 编程 我试图理解列表是如何工作的 因此我尝试编写两个可能的length功能 myLength a gt Integer myLength foldr x gt 1 0 myLength1 a gt Integer
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 组合 concat 和 map 得到 concatMap:为什么是 f?

    这是我对 Haskell 的第一次探索 如果它很明显 请原谅我 我整个下午都在玩 Haskell 仔细浏览教程HaskellWiki 上的 99 个问题 http www haskell org haskellwiki 99 questio
  • Haskell Servant 和流媒体

    我正在尝试添加一个功能到我的servant服务器将从 Amazon S3 获取文件并将其流式传输回用户 由于文件可能很大 我不想将它们下载到本地然后将它们提供给客户端 我宁愿将它们直接从 S3 流式传输到客户端 I use Amazonka
  • XMonad 在不同工作区启动

    我想在 xmonad start 上启动不同工作区中的一些应用程序 这很重要 所以 我写了以下内容startupHook startupApps String startupApps konsole emacs firefox gvim k
  • 如何在 Windows 7 中配置 cabal?

    我已经在Windows 7中安装了Haskell Platform 2012 我在控制台中编写cabal update我收到消息说有新版本的阴谋集团 我写的cabal install cabal install 安装完成后 它告诉我 cab
  • unsafeInterleaveIO 什么时候不安全?

    与其他不安全 操作不同 文档 http hackage haskell org packages archive base latest doc html System IO Unsafe html v unsafeInterleaveIO
  • 在 Haskell 中提升 State monad 中的值

    我正在 Haskell 中编写一个数独生成器 求解器作为学习练习 My solve函数接受一个UArray但返回一个State Int UArray 这样它也可以返回解决问题时发现的最大难度级别 到目前为止 这是我的功能 仍处于实验性的早期
  • Accelerate 和 Repa 是否有不同的用例?

    我一直在玩 Repa 和 Accelerate 它们都很有趣 但我不知道何时使用其中一个 何时使用另一个 他们是一起成长 是竞争对手 还是只是为了解决不同的问题 Repa 是一个用于高效数组构建和遍历的库 用 Haskell 编程并在 Ha
  • 使用 ocaml List.fold_left 列表中的最后一个元素

    我可以通过以下代码找到列表的最后一个元素 let last xs a list a let rec aux xs prev match xs with gt prev x ys gt aux ys x in match xs with gt
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • GHC 可以为 monad 转换器派生 Functor 和 Applicative 实例吗?

    我正在尝试实施MaybeT本着mtl图书馆 使用这个非编译解决方案 LANGUAGE FlexibleInstances MultiParamTypeClasses UndecidableInstances import Control M
  • 显示未定义的实例

    可以采取任何措施来为未定义的值定义 Show 实例吗 也许存在一些 GHC 扩展 我想要这样的东西 gt print 1 undefined 1 undefined 根据Haskell 2010 报告 第 9 章 http www hask
  • 用parsec解析递归数据

    import Data Attoparsec Text Lazy import Data Text Lazy Internal Text import Data Text Lazy pack data List a Nil Cons a L
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • 如何在 Yesod 中使用 CSS 框架?

    我想将 Blueprint CSS 框架与 Yesod 一起使用 有没有最佳实践 因为 Yesod 使用 CSS 模板 所以在我看来我不能直接使用 css 文件 我必须将它们重命名为 lucius files 吗 如何将 CSS 添加到 d
  • Swit 中的函数式编程将数组元素分配到正确的“桶”

    我是函数式编程的新手 我的问题是我有一个主数组和固定数量的 目标 数组 我想根据每个元素的特定值将主数组中的元素分配到正确的结果数组中 我猜测一种方法是使用一个映射函数来遍历主数组元素 确定正确的 目标数组 值 基于某种逻辑 然后将元素添加

随机推荐

  • 如何使用 PHP 连接 Dropzone.js 上传的分块文件?

    我使用 Dropzone js 获取各种类型的文件 包括图像和非图像 例如 PDF 并将它们以 1mb 块的形式上传到我们的服务器 然后 我尝试使用 PHP 连接这些文件 然后将它们上传到我们公司的 FileMaker 数据库 到目前为止
  • 在 github 操作上运行 firebase 模拟器

    我正在尝试在 Github Actinos 上运行测试 但经过多次尝试后我无法做到这一点 接收 错误 firestore Firestore 模拟器已退出 因为未安装 java 您可以从以下位置安装它https openjdk java n
  • PHP sendmail 在 Ubuntu 命令行中工作,但不能在 php 文件中工作

    我在 Ubuntu 上使用 PHP 和 apache 安装了 sendmail 当我尝试以下命令行时 php r mail email protected test test 它成功发送电子邮件 但是 运行文件 test send mail
  • 在 C# 客户端中为 gRPC 设置 keepalive

    我在 C 中使用 gRPC 客户端并使用长期存在的双工流 但是 TCP 连接有时会关闭 因此我想在客户端中使用 keepalive 服务器 用 Go 编写 已经针对 keepalive 进行了正确配置 并且已经使用 Go 编写的客户端进行了
  • 在设备上运行 OCUnit 应用程序测试套件时偶尔出现错误

    运行应用程序测试 即在设备上 时 我的 OCUnit 测试套件遇到一些问题 有时 我会收到一个棘手的错误 该错误似乎是从 OCUnit 类引发的 我一直在尝试查看添加到测试套件中的文件 但无法理解它 在设置测试目标时 我遵循了 Apple
  • JTextField,使用文档过滤器过滤整数和句点

    编辑 在帖子末尾添加我们能够实现的答案 这是我在 SO 的第一篇文章 所以我希望我能问好一切 尽管发布了类似的问题 但我进行了搜索 但没有找到我的问题的答案 所以我希望这不是重新发布 这就是我得到的 一个使用的小应用程序JTextField
  • 在SendComplete中处置SmtpClient?

    当我使用SmtpClient的SendAsync发送电子邮件时 如何处理smtpclient实例正确吗 比方说 MailMessage mail new System Net Mail MailMessage Body MailBody T
  • Python 中与 pandas 进行大型合并时出现 MemoryError

    我正在用 pandas 来做outer合并一组大约 1000 2000 个 CSV 文件 每个 CSV 文件都有一个标识符列id它在所有 CSV 文件之间共享 但每个文件都有一组唯一的 3 5 列列 大约有 20 000 个独特的id每个文
  • openpyxl 无法读取严格的 Open XML 电子表格格式:用户警告:文件包含 Sheet1 的无效规范。这将被删除

    我的一些用户 都使用 Mac 已将 Excel 上传到我的应用程序中 但应用程序拒绝了它 因为该文件似乎是空的 经过一些调试后 我确定该文件是以 Strict Open XML Spreedsheet 格式保存的 并且 openpyxl 2
  • 如何限制哪些国家/地区可以查看我的网站 ( PHP )

    在 PHP 中有一个简单的方法可以做到这一点 我想确保只有来自某些国家 地区的网络请求才能访问我的网站 有任何想法吗 使用 IP 地理定位数据库 有些是免费的 和 SERVER REMOTE ADDR 来获取访问者的 IP 地址 http
  • Numpy 中 Scipy 模式函数的替代方案?

    numpy 中是否有另一种方法来实现 scipy stats mode 函数以获取 ndarrays 中沿轴最频繁的值 无需导入其他模块 即 import numpy as np from scipy stats import mode a
  • onActivityResult 未在片段 android 中调用[重复]

    这个问题在这里已经有答案了 这是我从画廊拍照的代码 public class FragmentLayout1 extends Fragment implements OnClickListener View root Context c B
  • dev_set_drvdata 和 dev_get_drvdata 的可能用途是什么

    我只是想知道当我们必须使用这些设置并获取驱动程序 API 时 可能的用例是什么 我所知道的是数据被保存了 稍后我们可以使用数据来做一些事情 我的问题是我们什么时候真的需要这样做 These exports can t be GPL due
  • 这是实现“记住我”功能的合理方法吗

    如果用户登录网站并说 记住我 我们会获取该用户的唯一标识符 使用 RijndaelManaged 对其进行加密 密钥大小为 256 并将其放置在 httponly cookie 中 设置有效期为 120 天 每次成功向服务器请求都会刷新过期
  • 什么是具体化?

    我知道Java通过擦除实现参数多态性 泛型 我明白了什么是删除 我知道 C 通过具体化实现参数多态性 我知道这可以让你写作 public void dosomething List
  • dequeueReusableCellWithIdentifier 不重用单元格

    我有一个UICollectionView使用自定义单元格子类化UICollectionViewCell 在代码中我做了以下事情 self collectionView registerClass AHPinterestCell class
  • 有没有办法在 Emacs 中重新平铺缓冲区窗口?

    我在 emacs 中打开了两个缓冲区窗口 垂直排列 是否有命令可以水平重新排列它们 The 转置框架库提供了一组出色的功能来操作框架中的窗口 任何transpose frame rotate frame clockwise or rotat
  • Laravel 5 动态运行迁移

    所以我创建了自己的博客包 其结构为Packages Sitemanager Blog我有一个如下所示的服务提供商 namespace Sitemanager Blog use Illuminate Support ServiceProvid
  • Firebase crashlytics 不报告崩溃

    我正在从 Fabric 升级到 Firebase crashlytics 我已将 Firebase 和 Fabric Crashlytics pod 添加到我的项目中 添加了 plist 等 除了没有报告崩溃之外 一切似乎都工作正常 我正在
  • 如何使用 Monad 的 (->) 实例以及 (->) 的困惑

    在不同的问题上 我在评论中找到了有关使用 gt Monad 的实例 例如实现无点风格 对于我来说 这有点太抽象了 好的 我已经看到了 Arrow 实例 gt 在我看来 gt 可以在实例符号中使用 但不能在类型声明中使用 这将是另一个问题的内