Haskell 函子隐含定律

2024-04-02

类型分类百科全书 http://www.haskell.org/haskellwiki/Typeclassopedia says:

“类似的论点还表明,任何满足第一定律(fmap id = id)的 Functor 实例也将自动满足第二定律。实际上,这意味着只需要检查第一定律(通常通过非常简单的归纳法)以确保 Functor 实例有效。”

如果是这样的话,为什么我们还要提到第二函子定律呢?

Law 1: fmap id = id
Law 2: fmap (g . h) = (fmap g) . (fmap h)

虽然我无法给出证据,但我相信这说明的是由于参数化 http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf,只要第一定律成立,类型系统就强制执行第二定律。指定这两个规则的原因是,在更一般的数学设置中,您可能有一些类别C完全可以从其中定义“映射”C对自身(即一对内功能Obj(C) and Hom(C)分别)遵守第一条规则但不遵守第二条规则,因此无法构成函子。

请记住FunctorHaskell 中的 s 是该类别的内函子Hask,甚至不是所有在数学上被视为内函子的东西Hask可以用 Haskell 表达...参数多态性的约束排除了能够指定一个对于它映射的所有对象(类型)行为不统一的函子。

基于这个线程 http://www.haskell.org/pipermail/haskell-cafe/2010-January/thread.html#71631,普遍的共识似乎是 Haskell 的第二定律遵循第一定律Functor实例。爱德华·克梅特says http://www.haskell.org/pipermail/haskell-cafe/2010-January/071672.html,

Given fmap id = id, fmap (f . g) = fmap f . fmap g 遵循自由 fmap 的定理。

这是很久以前在一篇论文中作为旁白发表的,但我忘了在哪里。

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

Haskell 函子隐含定律 的相关文章

  • 证明:为什么 java.lang.String.hashCode() 的实现与其文档相符?

    JDK 文档为java lang String hashCode http java sun com javase 6 docs api java lang String html hashCode famously https stack
  • python sympy计算余弦函数积分时出错

    因此 我直接尝试从 sympy 文档中获取示例 但出现了一个奇怪的错误 我正在使用 python 3 2 和 sympy 0 7 3 我一直在 ipython 笔记本上工作 尽管我认为这不会有什么不同 错误是 每当我创建 x 符号并尝试集成
  • 是否有可能比 O(n log n) 更好地计算数字列表的中位数?

    我知道可以在 O n 中计算数字列表的平均值 但是中位数呢 有没有比排序 O n log n 和查找中间元素 或者如果列表中有偶数个项目则两个中间元素的平均值 更好的算法 是的 您可以在 O n 时间内 确定性地 完成此操作 http ww
  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • 截断浮点数而不向上舍入

    我有一个浮点数 我想将其截断为 3 位 但我不想向上舍入 例如 转换1 0155555555555555 to 1 015 not 1 016 我将如何在 Ruby 中做到这一点 您还可以转换为 BigDecimal 并对其调用 trunc
  • 如何用 NumPy 求解齐次线性方程?

    如果我有这样的齐次线性方程 array 0 75 0 25 0 25 0 25 1 1 0 0 1 0 1 0 1 0 0 1 我想得到它的非零解 怎样才能做到NumPy http en wikipedia org wiki NumPy E
  • 有可能吗?:行为 t [行为 t a] -> 行为 t [a]

    有没有办法有一个Behavior t a 其中 a 在时间 t 的值是 a 中包含的值Behavior t Behavior t a 在时间 t 即 具有以下类型的函数 Behavior t Behavior t a gt Behavior
  • 在 Haskell 中将 Maybe Int 转换为 Int

    我正在编写以下代码 并希望找到框字符串中数字的索引 所以我用了findIndex但它返回Maybe Int值 而我只想要Int value 我怎样才能转换Maybe Int to Int值或者有什么方法可以提取Int from Maybe
  • 由于标志字节串 -lt-0_10_4,无法使用 Stack 构建 hello world 程序

    通过生成一个裸露的 hello world 项目 stack new myproject simple 每当我跑步时stack setup stack init or stack build我总是出现以下错误 Downloading lts
  • 在 Haskell 中提升 State monad 中的值

    我正在 Haskell 中编写一个数独生成器 求解器作为学习练习 My solve函数接受一个UArray但返回一个State Int UArray 这样它也可以返回解决问题时发现的最大难度级别 到目前为止 这是我的功能 仍处于实验性的早期
  • Android:如何获取小数点后的两位数?不想截断值

    如何获取小数点后仅两位数的双精度值 例如 如果 a 190253 80846153846 那么结果值应该像 a 190253 80 尝试 我尝试过这个 public static DecimalFormat twoDForm new Dec
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • 为什么在 Javascript 中添加两位小数会产生错误的结果? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 的数学有问题吗 https stackoverflow com questions 588004 is javascripts math broken 为什么 JS 搞砸了这个简
  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • C++ 中的矩阵类

    我正在做一些线性代数数学 并且正在寻找一些真正轻量级且易于使用的矩阵类 可以处理不同的维度 基本上是 2x2 2x1 3x1 和 1x2 我认为此类可以使用模板来实现 并在某些情况下使用一些专门化来提高性能 有人知道任何可用的简单实现吗 我
  • Java中如何对整数除法进行四舍五入并得到int结果? [复制]

    这个问题在这里已经有答案了 我刚刚写了一个小方法来计算手机短信的页数 我没有选择使用Math ceil 老实说 它看起来很丑陋 这是我的代码 public class Main param args the command line arg
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3

随机推荐

  • 将内存流中的图像添加到 Excel 文档

    我在内存流中有一个图像 我想将其写入 MS Excel 文档 PIA 仅公开采用文件路径的 AddPicture 方法 有没有办法无需将图像写入光盘即可添加图片 MSDN http msdn microsoft com en us libr
  • 经典 ASP 中的超时问题

    我正在开发一个经典的 ASP 项目 在从数据库填充数据并将其绑定到 UI 中时遇到超时问题 我们得到以下错误 脚本超时 超出了脚本执行的最长时间 您可以通过为 Server Scripttimeout 属性指定新值或更改 IIS 作为管理工
  • 我使用 document.getelementsbyclassname 是否错误?

    当我输入文本框的值必须是 并且颜色必须是红色 我必须对三个文本框使用相同的函数 当我使用 document getelementsbyclassname 时 我的函数将无法工作 难道我做错了什么
  • VS 2008 Web 部署 - 防止文件夹被删除

    我有一个 ASP NET MVC 2 项目 该项目是使用 Web 部署项目 Visual Studio 2008 构建和部署的 该网站的根目录中有一个上传文件夹 用户生成的图像将保存到其中 每当构建运行 使用 team city 时 上传文
  • 使用字典替换列值

    我有这个数据框 其中性别预计为男性或女性 from io import StringIO import pandas as pd audit trail StringIO course id AcademicYear to months T
  • 结构中的字符数组 - 不兼容的赋值? [复制]

    这个问题在这里已经有答案了 我试图找出结构真正的 是什么 并遇到了问题 所以我有两个问题 1 sara 中保存了什么 它是指向结构体第一个元素的指针吗 2 更有趣的问题 为什么它不能编译 GCC 说 test c 10 错误 赋值中的类型不
  • Z-index 在 ie 中不起作用

    我的网页中有多个 div 有这个 javascript 幻灯片放映 我在该幻灯片上放置了一个菜单并将 div 绝对定位 我已使用 z 索引格式化订单 它们在 Firefox 中工作得很好 但在 Internet Explorer 中却不起作
  • 仅使用命令行界面在服务器上打包 Chrome 扩展

    是否可以仅使用 CLI Ubuntu 服务器 在服务器上使用密钥 pem 打包 chrome 扩展 更新 chrome 现在使用版本 3 而 google 发布的脚本仅适用于版本 2 版本 2 的官方打包脚本位于https develope
  • 在 Android Listview 中重用具有 2 种不同布局的视图

    我了解到 为了最大限度地提高 Android 列表视图的效率 您应该只拥有适合屏幕大小的膨胀 行 视图 一旦视图移出屏幕 您应该在您的视图中重复使用它getView方法 检查是否convertView是否为空 但是 当您需要两种不同的列表布
  • foreach 语句无法对“getenumerator”的公共定义类型的变量进行操作

    Task03Entities Entites entities new Task03Entities Entites Creat a object for my entites class Task03BAL BAL bal new Tas
  • PHP:帮助解码恶意代码[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 eval gzuncompress base64 decode eF5Tcffxd3L0CY5WjzcyNDG2NDc3MLGMV4 1d
  • 安装包时非零退出,仅 tidyverse

    我已经在 Ubuntu 上设置了托管 RStudio 并且已经加载了几个没有问题的软件包 包括 caret 和 lubridate 然而 当我尝试安装 tidyverse 时 我得到 gt install packages tidyvers
  • 设置与 Google 表单中的标签不同的值

    有没有办法使用 Google Forms Apps 脚本或 Google Sheets 公式来设置与 Google Forms 上的多项选择中的标签不同的值 我正在寻找类似于 html 的内容
  • 防止滚动 TVertScrollBox 时触发事件

    通常 当滚动 滚动框 的内容时 滚动框的子组件 例如 滚动框 不会触发任何事件函数 G 在本机应用程序中 但在 FireMonkey 中 如果 TVertScrollBox 包含像 TRectangle 这样的子元素 我想将其用作自定义菜单
  • 更改 rmarkdown 生成的 PDF 中的字体

    我正在使用 rmarkdown 生成报告 编织 PDF 时 title Untitled output pdf document I would like to specify the font to be used in creating
  • 如何在 vb.net 中使用 openfiledialog 打开文件?

    如何使用 openfiledialog 打开文件 下面是我的代码 Dim Fs As StreamReader With OpenFD FileName Title Open Text File InitialDirectory c Fil
  • 更改字符串字符时出现分段错误(核心转储)

    为什么更改字符串字符会导致分段错误 核心转储 char str string str 0 S segmentation fault core dumped 解决方案很简单 用以下方式声明你的字符串 char str string 您应该这样
  • AWS API Gateway 不存在“Access-Control-Allow-Origin”标头

    我遇到了 API 网关的问题 我已经浏览了 AWS 论坛上的所有其他答案 也浏览了他们的文档 但仍然没有任何乐趣 我正在尝试使用 AWS API 网关设置一个 API 该网关调用 Lambda 函数来读取 写入 DynamoDB 中的表 D
  • SSIS 中的别名参数

    我在 SSIS 中使用 OLE DB 命令 其 SQL 命令如下所示 UPDATE DBO CLIENT SET TimeZoneID DaylightSavingTime ModifiedBy MicrosPropertyID IsOff
  • Haskell 函子隐含定律

    类型分类百科全书 http www haskell org haskellwiki Typeclassopedia says 类似的论点还表明 任何满足第一定律 fmap id id 的 Functor 实例也将自动满足第二定律 实际上 这