Haskell Collection API 的“Unfoldable”类型类中函数依赖的作用

2023-12-09

我试图理解 Haskell 的设计Data.Collection库,来自 Scala 背景。

It uses 功能依赖(其中有一个Scala 模拟)但它们的使用方式对我来说没有意义。在里面Unfoldable类,复制如下,元素类型i显示为取决于集合类型c.

class Unfoldable c i | c -> i

具有不可观察元素的集合类。它是对偶的Foldable class.

请解释一下依赖的作用c -> i在这里发挥和设计意图,最好有一个使用示例?


该函数依赖性所表达的约束是给定集合类型的约束c,其项目的类型i已经确定了。例如,如果c ~ [a],即该集合是一个列表as,那么我们应该能够确定i ~ a.

如果没有这种功能依赖性,我们可以有两个实例,例如Unfoldable [a] a(明显/预期的实例)和Unfoldable [a] [a](像这样的东西insert = concat, singleton = id)。如果类型检查器看到类似的内容empty :: [a],它将无法选择使用哪个实例:

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}

class Unfoldable c i where
    empty :: c

instance Unfoldable [a] a where
    empty = []

instance Unfoldable [a] [a] where
    empty = []

xs :: [a]
xs = empty

这导致:

No instance for (Unfoldable [a] i0) arising from a use of `empty'
The type variable `i0' is ambiguous
Relevant bindings include
  xs :: [a]
Note: there are several potential instances:
  instance Unfoldable [a] a
  instance Unfoldable [a] [a]
In the expression: empty
In an equation for `xs': xs = empty
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell Collection API 的“Unfoldable”类型类中函数依赖的作用 的相关文章

  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 对两种类型之间的二元关系进行建模

    有企业 也有人 用户可以对某个企业点赞或发表评论 但效果是一样的can not发生在一个人身上 当用户发布有关某个企业的内容或对其点赞时 该企业就被称为target喜欢或帖子 trait TargetingRelation Targetin
  • 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 - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • 为什么 ZipList 不是 List 的默认应用实例

    我目前正在学习 Haskell 中的应用程序 如果我没记错的话 列表有两个不同的应用实例 List and ZipList 第二个被定义为包装列表值的新类型 这ZipList应用实例对我来说似乎更直观 这可能是一个愚蠢的问题 但有具体原因吗
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • 如何在haskell中用另一个字符串替换一个字符串

    我想用不同的字符串替换输入文件中的字符串 我正在寻找一种方法 但似乎我只能逐个字符地更改字符串 例如在我下面的代码中 replace String gt String replace replace x xs if x then y rep
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • Haskell 处理负参数

    尝试对两个值求和 其中只有一个为负值 例如 1 and 2 soma Float gt Float gt Float soma x1 x2 x1 x2 结果出现错误 为什么
  • 如何同时将透镜(或任何其他光学器件)视为吸气剂和设置剂?

    我正在尝试编写一个通用记录更新程序 它允许人们轻松更新记录中的字段existing记录 字段形状相似incoming记录 这是我到目前为止所拥有的 applyUpdater fields existing incoming let gett
  • Haskell:对 Num 类型类的使用感到困惑

    我很困惑为什么这有效 f Num a gt a gt a f x x 42 但这并没有 g Num a gt a gt a g x x 4 2 我本来就明白Num包含实现运算符的所有类型 因此 如果42 is an Int and 4 2
  • 在 ghci 下执行 `(read "[Red]") :: [Color]` 时会发生什么?

    我正在阅读以下小节现实世界 Haskell 第 6 章 类型类 http book realworldhaskell org read using typeclasses html关于一个实例Read for Color 它实现了reads
  • 自定义 monad 的 MonadTransControl 实例

    的文档monad control提供有关如何创建实例的示例MonadTransControl using defaultLiftWith and defaultRestoreT 该示例适用于以下情况newtype newtype Count

随机推荐

  • 为什么在 Android 模拟器中单击“调试”时 React Native 应用程序会崩溃?

    在 Android 模拟器中单击 调试 时 React Native 应用程序显示错误 尝试在空对象引用上调用接口方法 java lang String com facebook react bridge Cat alystInstance
  • 不使用 + 运算符将两个数字相加的最佳方法是什么?

    我和一个朋友正在反复玩脑筋急转弯 但我不知道如何解决这个问题 我的假设是某些按位运算符是可能的 但不确定 在 C 语言中 使用按位运算符 include
  • 如何在 Visual Studio 2019 中将清单文件添加到我的 C# 程序?

    我有一个简单的应用程序 我想强制在管理模式下运行 为此 我需要编辑清单文件 我看到教程显示通过单击 项目 gt 添加 gt 新项目 来添加它 但那里没有适合我的清单文件 我尝试制作自己的文件 并将其从项目属性设置为清单文件 但我不知道在那里
  • 传递给 readFileSync 的匿名函数不返回任何数据

    我写了一个简单的JS对象 它有功能csvFileToArray 函数应返回解析后的 CSV 数组 问题是我没有传递给匿名函数的输出readFileSync test1已正确记录到控制台 但是test2 is not 这是我第一次使用 nod
  • 如何使用 bash 从 URL 字符串获取维度

    我在 mac 上使用 bash 并有一个 URL 字符串 我想从包含如下尺寸的 URL 中提取宽度和高度值 url domain com project asset 300x250 july2 url domain com project
  • 使用 Office Web Apps,您可以通过 webdav 打开文档吗?

    我们正在将旧的桌面应用程序转换为支持网络的等效应用程序 然而 有一个功能造成了困难 即编辑 MS Word 文档 当前提出的解决方案是通过 WebDAV 发布 DOC 和 DOCX 文件 并使用自定义 ActiveX 组件启动 WinWor
  • scanf 一个大的十六进制值

    我在尝试使用 scanf 从用户处获取大的十六进制数字 12 个字符 时遇到问题 它似乎只得到最后8个字符 例如 ABFFFFFFFF将变成0000FFFFFFFF 这是我的代码 unsigned long long address sca
  • datetimepicker 在单击外部时将日期设置为今天的日期

    我到处寻找这个问题的答案 但没有运气 所以现在我不得不问 我有 Trent Richardson 的日期时间选择器 由于某种原因 设置的选项非常少 当我单击外部而不选择日期时 它会自动将日期字段设置为今天的日期 有人知道发生了什么事吗 这是
  • java进程中有很多线程

    为什么一个简单的 Java GUI 应用程序要创建这么多线程 Java 使用线程来做很多事情 当然是应用程序的主线程 应用程序启动的任何线程 例如 SwingWorker Swing 有一个单独的事件调度线程以及一些其他内务线程 计时器 其
  • 解码音频和视频并处理两个流——ffmpeg、sdl、opencv

    我的目标是独立处理 mpeg 2 文件的音频和视频 并保持两个流的同步性 视频时长最多约为 1 或 2 分钟 首先 按照这个post opencv 用于读取视频 并执行处理 ffmpeg 用于音频 SDL 用于播放两者 听起来很完美 考虑到
  • 如何删除正文周围的边距空间或清除默认的 css 样式

    我诚然是一个初学者 但在发布此内容之前我也做了相当多的搜索 我的 div 元素周围似乎有额外的空间 我还想指出的是 我尝试了 border 0 padding 0 等多种组合 但似乎没有什么可以消除空白 这是代码
  • 从字符串中删除特定标记

    我必须从字符串变量中删除特定标记 例如 如果字符串变量是这样的 GUID 456709876790 我需要删除 GUID 从字符串中分离出来 只需要 456709876790 如何做呢 两种选择 当你刚刚从start 你可以很容易地使用子字
  • 在ggplot中使用geom_vline()复制图例

    我想创建这个图形 aux graf structure list lines structure c 2L 2L 1L 3L Label c h0 ic median class factor values c 21 19755 23 06
  • 将优化的埃拉托色尼筛从 Python 移植到 C++

    前段时间 我在 python 中使用了 速度极快 primesieve 我在这里找到了它 列出 N 以下所有素数的最快方法 准确地说 这个实现 def primes2 n Input n gt 6 Returns a list of pri
  • 实体框架 C# 中的反射

    我正在尝试使用反射通过实体框架进行动态选择 这个想法是 该方法将获取列名称 要搜索的每列的值以及每列的顺序作为参数 例如 public anEntity list String ColumnName String Value String
  • 未生成 FocusIn/FocusOut

    有人可以澄清 X11 服务器的默认焦点处理吗 我的理解是 焦点 跟随鼠标 并且如果我在不同的终端之间移动鼠标 我可以看到光标随着每个窗口获取 失去焦点而变化 但是 当我运行两个 xev 窗口并在它们之间移动指针时 当指针从一个窗口移动到另一
  • Windows/Linux iOS应用程序开发(不需要编译)[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 询问我们的问题推荐或查找工具 库或最喜欢的场外资源与 Stack Overflow 无关 因
  • R保存和加载数据帧

    我使用此命令保存了数据框 保存 国家数据 文件 数据 Rda 并使用此命令加载它 负载 数据 Rda 但我没有看到包含我创建的数据的表 保存单个 data framesave可能会令人困惑 因为load将 data frame 以及文件中的
  • ImageView.getMatrix() 和 ImageView.getImageMatrix() 有什么区别?

    我在不同的论坛上看到过这个问题 但没有人给出答案 getMatrix 是否处理视图中的图像位置 而 getImageMatrix 处理图像相对于自身的大小 Edit 以下是文档所说的 矩阵 getImageMatrix 返回视图的可选矩阵
  • Haskell Collection API 的“Unfoldable”类型类中函数依赖的作用

    我试图理解 Haskell 的设计Data Collection库 来自 Scala 背景 It uses 功能依赖 其中有一个Scala 模拟 但它们的使用方式对我来说没有意义 在里面Unfoldable类 复制如下 元素类型i显示为取决