是否可以创建一个计算指令数量的 Monad?

2023-11-26

考虑到 monad,我想到了用 monad 来打破冯·诺依曼架构的方法。冯诺依曼架构使用一组指令(称为程序)来更改内存中的数据,并且程序的每条指令的执行都会更新程序计数器以了解下一个要执行的指令。

如果我们将冯·诺依曼架构视为一个 monad,则绑定运算符 (>>=) 会更新程序计数器。我们可以制作一个打破冯诺依曼架构的 Monad,以在绑定中做更多事情。举个例子,我们可以有一个 Monad 来计算程序中执行的指令数。

但是,当我尝试在 haskell 中实现 Monad 时:

data Counter a = Counter Integer a
             deriving( Show )

instance Monad Counter where
  (Counter n1 a) >>= f = let Counter _ b = f a
                     in (Counter (n1+1) b)
  return a = Counter 1 a

我注意到它会违反单子定律,例如:

return x >>= f            /=   f x

do
   a <- return 3
   return a

do 
   return 3

这两个块是相同的,因为单子定律,但它们会返回不同的东西,因为它们有不同数量的指令(句子)

我做错了什么吗?或者不可能有这样的 Monad 吗?


严格来说,任何这样的“单子”都违反了单子法则,因此……不是单子。看到这个上一个问题的详细信息。换句话说 - 你的猜测是正确的,不可能有这样的单子。

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

是否可以创建一个计算指令数量的 Monad? 的相关文章

  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • Haskell 中的类型化抽象语法和 DSL 设计

    我正在 Haskell 中设计 DSL 我想要进行赋值操作 像这样的东西 下面的代码只是为了在有限的上下文中解释我的问题 我没有类型检查 Stmt 类型 data Stmt forall a Assign String Exp a Assi
  • Haskell 排列库函数 - 请澄清一下?

    这是代码permutationsHaskell 中的函数Data List module permutations a gt a permutations xs0 xs0 perms xs0 where perms perms t ts i
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • 为什么 Haskell 中的点是从右向左排列的?

    如果我们有两个函数 f and g 然后在哈斯克尔h f g相当于h x f g x IE 这些函数从右到左应用于输入 有什么根本原因可以解释为什么它是从右到左 而不是从左到右吗 IE 他们为什么不做h f g相当于h x g f x 反而
  • 为什么以下内容会并行运行而不是顺序运行?

    给定以下函数evalPair parPair and deepSeq分别 evalPair Strategy a gt Strategy b gt Strategy a b evalPair sa sb a b do a lt sa a b
  • 没有由文字“1”产生的 Num String 实例

    main do putStrLn myLast 1 2 3 4 myLast a gt a myLast x x myLast xs myLast xs 当我尝试运行此代码时 我收到此消息 没有由文字 1 产生的 Num String 实例
  • Haskell:GHC 无法推断类型。由类型签名错误绑定的刚性类型变量

    我看过几篇主题相似的帖子 但它们并不能真正帮助我解决我的问题 所以我才敢重复 现在我有一个带有签名的函数 run Expr query gt RethinkDBHandle gt query gt IO JSON 这是一个数据库查询运行函数
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • 动态加载编译的 Haskell 模块 - GHC 7.6

    我正在尝试使用 GHC API 动态编译和加载 Haskell 模块 我知道 API 从一个版本到另一个版本波动很大 所以我专门谈论 GHC 7 6 我尝试在 MacOS 和 Linux 上运行相同的代码 在这两种情况下 插件模块都可以正常
  • 是否有适用于 Haskell 或 Scala 等函数式语言的 LL 解析器生成器?

    我注意到明显缺乏用函数式语言创建解析器的 LL 解析器 我一直在寻找但没有成功的理想发现是为 ANTLR 风格的 LL 语法生成 Haskell 解析器 语法的模小数重新格式化 并且令我惊讶的是 每个最后一个解析器生成器都具有函数我发现的语
  • Haskell:从后面访问列表

    今天我开始学习Haskell 我对函数式语言有点陌生 而且我非常喜欢 Haskell 然而 我有一个关于它的设计的问题困扰着我 从我到目前为止的理解来看 访问列表后面的元素似乎比访问前面的元素要复杂得多 类似于xs x where xs a
  • 为什么我的 Haskell 断言只发生在 IHaskell 中?

    如果我定义 import Control Exception assert import Data Char ord f String gt String f s assert all elem letters s letters lt g
  • enumFromTo 如何工作?

    我无法将号码添加到Char 以下内容将无法编译 a 1 但是 a z 成功创建一个字符串 其中每个字符值都会递增 有没有一个特殊的函数可以增加Char 我知道我能做到chr ord c 1 如何 a z 或底层enumFromTo函数增加结
  • 为连续可测量的现象创建行为

    我想创建一个Behavior t a从一个IO a 其预期语义是每次行为发生时都会运行 IO 操作sampled language FlexibleContexts import Reflex Dom import Control Mona
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • 记录语法和求和类型

    我有关于 Haskell 中的总和类型的问题 我想创建一个由两个或多个其他类型组成的总和类型 并且每个类型可能包含多个字段 一个简单的例子是这样的 data T3 T1 a Int b Float T2 x Char deriving Sh
  • 在 Web.Scotty 中使用 StateT

    我正在尝试制作一个愚蠢的网络服务器 将数据存储为State 我在用着Web Scotty http hackage haskell org package scotty 我之前用过 ReaderT 和 scotty 来访问配置 https
  • 为什么在 haskell 中不带括号不可能进行负数相乘

    乘法5 3在 haskell gchi 中给了我一个错误 但乘以5 3 工作正常 为什么需要括号 ghci GHCi version 7 4 1 http www haskell org ghc for help Loading packa
  • 当您包含导入 Gloss 的项目时,“stack ghci”会失败

    如果您在 Stack 项目中导入 Gloss 并使用stack ghci 您会收到以下错误 GHCi version 7 10 2 http www haskell org ghc for help

随机推荐

  • Python:如何获取列表中项目的排序数量?

    在 Python 中 我有一个项目列表 例如 mylist a a a a b b b d d d c c e 我想输出类似的内容 a 4 b 3 d 3 c 2 e 1 如何输出列表中项目的计数和排行榜 我不太关心效率 只关心任何有效的方
  • Jenkins - env: ‘node’: 没有这样的文件或目录

    我有一个使用配置的詹金斯服务器https github com shierro jenkins docker examples tree master 05 aws ecs 我正在运行一个蓝色海洋使用简单的 Jenkinsfile 和管道j
  • 检测 Android 上的键盘 IME 语言

    如何检测在 EditText 中输入的内容使用哪种语言 我知道 API 13 有getCurrentInputMethodSubtype 但是旧版本的替代品是什么 空无一人 我什至不指望上述内容适用于所有键盘 我写了一个流行的键盘 但不知道
  • Codeigniter - 使用两个不同数据库的最佳方法

    有人知道在我的应用程序中使用两个不同数据库的最佳实践吗 我需要将数据存储在位于不同位置的两个数据库中 主机 用户名 密码 所有这些都会改变 我计划像往常一样创建模型 并在构造中设置数据库主机 名称 通行证等 我不确定你是否称这是 最好 的方
  • 从函数返回的记录具有串联的列

    我有一个表 用于存储帐户随时间的变化 我需要将其与其他两个表连接起来 以创建特定日期的一些记录 如果这些记录尚不存在 为了让事情变得更简单 我希望 我将返回正确历史数据的查询封装到一个接受帐户 ID 和日期的函数中 如果我执行 Select
  • 使用 GSON 反序列化通用类型

    我在 Android 应用程序 使用 Gson 库 中实现 Json 反序列化时遇到一些问题 我上过这样的课 public class MyJson
  • 二维 np.digitize

    我有二维数据 并且有一堆用 生成的二维箱scipy stats binned statistic 2d 对于每个数据点 我想要它占用的 bin 的索引 这正是np digitize是用于 但据我所知 它只处理一维数据 Thisstackex
  • BeautifulSoup,但是对于CSS?

    BeautifulSoup 解析 HTML 并提供各种在 HTML 中操作和搜索的方法 CSS 有类似的东西吗 具体来说 我想知道给定的 HTML 文本是否呈现为bold 要么它有一个祖先 strong or the strong
  • VHDL:使用输入端口是不好的做法吗?

    我有一个程序 我按照以下方式使用 inout 端口 port inout unsigned 9 downto 0 if port gt 10 then port lt port 1 end if 我正在使用 inout 端口 这样我就可以读
  • 如何按不同字段分组

    我想找到所有名为 Hans 的用户 并通过对他们进行分组来汇总他们的 年龄 和 孩子 数量 假设我的数据库 用户 中有以下用户 id 01 user Hans age 50 childs 2 id 02 user Hans age 40 c
  • 如何使用 javascript/jQuery/ajax 打印不同的页面?

    使用以下代码 它显示打印对话框并成功打印页面 但是单击同一按钮后如何打印不同的页面 不同的页面名称是 letterprint php div class below movie left My printing contents div
  • -event- 只能出现在 += 或 -= 的左侧

    我有一个循环事件 我试图防止同一方法多次添加到一个事件中 我已经实施了add and remove访问器 但是 我收到一条错误消息 ItemsProcessed can only appear on the left hand side o
  • 如何配置与 Spring 集成的嵌入式 Tomcat 来侦听除 localhost 之外的 IP 地址请求?

    我正在尝试运行春季指南中的示例 构建 RESTful Web 服务 如果我打开的话效果很好本地主机 8080 问候语 但如果我打开其中一个 它就无法建立连接192 168 1 111 8080 问候语 or 140 112 134 22 8
  • PHP/MySQL/PDO 绑定空参数不起作用

    我在以下代码中绑定空参数时遇到问题 nullVariable NULL sql new PDO mysql host Server User Password sql gt setAttribute PDO ATTR ERRMODE PDO
  • Android 通过对话框共享

    我见过 TFLN 等应用程序中的 共享方式 对话框 昨晚的短信 看起来像这样 共享对话框 http garr me wp content uploads 2009 12 sharevia jpg 我正在寻找分享文字 有人能指出我正确的方向吗
  • 为 Jest 的每个测试文件指定 window.location

    我正在升级到 Jest 22 但我遇到了一些有关模拟的问题window location 以前这个方法可以用 但是升级后就不行了 Object defineProperty window location href writable tru
  • 获得发光效果的最佳方式 Windows Phone 7

    我正在摆弄 Windows Phone 7 sdk 并试图让屏幕看起来像老式数字显示屏 现在我正在尝试弄清楚如何使文本像那些很酷的数字时钟之一一样 发光 我假设您会考虑使用着色器来实现这种目的 但似乎在 Windows Phone 7 操作
  • 如何在 C 中声明字符串 [重复]

    这个问题在这里已经有答案了 谁能解释一下这些代码行之间有什么区别 char p String char p2 String char p3 7 String 在什么情况下我应该使用上面的每一个 这个链接应该可以满足你的好奇心 基本上 忘记你
  • 对字符串日期数组进行排序

    我想按升序对数组进行排序 日期为字符串格式 09 06 2015 25 06 2015 22 06 2015 25 07 2015 18 05 2015 甚至需要一个函数来检查这些日期是否是连续形式 eg Valid 09 06 2015
  • 是否可以创建一个计算指令数量的 Monad?

    考虑到 monad 我想到了用 monad 来打破冯 诺依曼架构的方法 冯诺依曼架构使用一组指令 称为程序 来更改内存中的数据 并且程序的每条指令的执行都会更新程序计数器以了解下一个要执行的指令 如果我们将冯 诺依曼架构视为一个 monad