如何为另一个类型类中的所有类型编写实例?

2024-03-11

我必须定义一个类型类Truthy其中包含一个方法true将类型类的实例转换为Bool value.

我的类型类声明:

class Truthy a where
    true :: a -> Bool

接下来,我必须为各种类型定义此类的实例,包括列表和数字类型。我已经为列表完成了它Ints,但是有没有办法同时对所有数字类型执行此操作?

根据我的 Int 声明:

instance Truthy Int where
    true = (/=) 0

我尝试添加类型类约束,但它不起作用:

instance (Num a) => (Truthy a) where
    true = (/=) 0::a

是否有一种方法可以做到与我的想法类似,或者我应该为每个数字类型单独定义它?


这可能对家庭作业没有帮助,但实际上can写一个这样的声明。您只需启用-XFlexibleInstances这样做。至少在 GHC 中,您可以通过在文件顶部放置一个编译指示来做到这一点:

{-# LANGUAGE FlexibleInstances #-}

如果您仔细查看收到的错误消息,它会显示类似“如果您想禁用此功能,请使用 -XFlexibleInstances”之类的内容。

在这种特殊情况下,您还需要启用UndecidableInstances and OverlappingInstances:

 {-# LANGUAGE FlexibleInstances,  UndecidableInstances, OverlappingInstances #-}

你需要FlexibleInstances因为标准 Haskell 不允许任何形式的实例,其中类型变量在头部出现多次。这完全没问题——它是最常用的扩展之一(根据这个问题 https://stackoverflow.com/questions/4826630/type-class-problem-concerning-flexibleinstances).

你需要UndecidableInstances因为您的实例声明可能会导致类型检查器永远循环。我认为使用UndecidableInstances通过限制尝试减少实例时检查的深度来防止这种情况发生。这通常(包括在这种情况下)很好,但理论上可以确定特定程序是否通过类型检查依赖于实现。不过,它应该适用于你的情况。

正如哈马尔指出的那样,您需要启用OverlappingInstances因为实例的“上下文”是ignored检查它们是否重叠时。上下文是Num a在这种情况下有点。因此,用于检查是否重叠的实例被读作instance Truthy a...并与一切重叠。和OverlappingInstances启用后,您只需要拥有一个最具体的实例即可使其工作。

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

如何为另一个类型类中的所有类型编写实例? 的相关文章

  • 运行程序的最佳 Haskell 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我要将一个程序投入生产 我需要该程序做几件事才能将其视为 可操作 也就是说 工程师和操作人员以可测量
  • Haskell - 交替两个列表中的元素

    我正在尝试编写一个 haskell 函数 它接受两个整数列表并生成一个列表 其中包含从两个列表中交替获取的元素 我有这个功能 blend xs ys 一个例子 blend 1 2 3 4 5 6 应该返回 1 4 2 5 3 6 我的逻辑是
  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 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 上
  • 镜头中的观看和使用有什么区别?

    有什么区别 view MonadReader s m gt Getting a s a gt m a and use MonadState s m gt Getting a s a gt m a in 控制镜头吸气剂 https hacka
  • 我是否应该使用 GHC Haskell 扩展?

    当我学习 Haskell 时 我发现有很多语言扩展 http haskell org ghc docs latest html users guide ghc language features html在现实生活中使用的代码 作为初学者
  • 当单态限制打开*时,如何解决歧义问题?

    因此 在学习 Haskell 时 我很快就遇到了可怕的单态限制 在 ghci 中 Prelude gt let f print show Prelude gt f 5
  • Control.Arrow 与 Data.Tuple.Extra

    我经常使用以下功能Data Tuple Extra图书馆 first second and both 有等效的 函数Control Arrow 其实我更喜欢Data Tuple Extra因为我完全迷失了文档Control Arrow 使用
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 在生成此 SOP 函数时,如何修复类型错误,包括“无法对 Traversable 进行量化”?

    我只是说我什至不确定这是否可能 这是迄今为止我在 Haskell 中尝试过的最通用的事情 我正在尝试制作一个更通用的版本applyFunc在发现https stackoverflow com a 58890226 3096687 https
  • Haskell 单例:我们可以通过 SNat 获得什么

    我正在尝试使用 Haskell 单例 在论文中使用单例进行依赖类型编程 http cs brynmawr edu rae papers 2012 singletons paper pdf并在他的博客文章中单例 v0 9 发布 https t
  • 使用 Haskell 的欧拉项目 #1

    import Data Set euler Int euler sum x x lt nums where nums Data Set toList Data Set union Data Set fromList 3 6 999 Data
  • Haskell 真的是纯粹的吗(有任何语言可以处理系统外的输入和输出)吗?

    在谈到函数式编程中的 Monad 后 该功能是否真的使语言变得纯粹 或者它只是黑板数学之外的现实世界中计算机系统推理的另一张 免狱卡 EDIT 这不是有人在这篇文章中所说的火焰诱饵 而是一个真正的问题 我希望有人能用它来击倒我并说 证明 它
  • 不同 hs 文件中的函数分离时堆栈空间溢出

    我有一个巨大的 haskell 文件 它编译和运行没有任何问题 我想将一些函数和类型定义放在通用 hs 文件中的单独模块中 然后将其导入我的主模块中 虽然主程序编译时没有任何错误 它还编译导入的模块 但当我尝试运行它时 出现堆栈空间溢出 I
  • Haskell printf 转字符串

    Haskell 中有等效的 sprintf 吗 我需要将双精度值转换并格式化为字符串 有没有其他方法而不使用printf什么样的功能 主要问题是要避免 Prelude gt putStrLn myDoubleVal 1 7944444444
  • Haskell 二进制解析

    我一直在尝试在 haskell 中实现一个协议解析器 而且我对这门语言还很陌生 特别是当涉及到 monad 时 我一直在使用binary 0 5 0 2 并描述了协议的标头和所有有效负载 我想要解析的消息如下所示 header payloa
  • GHC 是否使用存在类型的动态调度?

    下面的代码是否使用了 C 或 Java 中所理解的动态调度 据我了解 在最后一行 编译器不可能在编译时知道要调用哪个 实现 但代码会编译并产生正确的结果 有人可以解释一下 这背后有什么样的实现 例如 vptr 吗 LANGUAGE Exis
  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • 为什么 Haskell 中的点是从右向左排列的?

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

随机推荐

  • 如何使用 Seaborn 绘制阶跃函数?

    我想使用 Seaborn 制作类似于此的步骤图matplotlib 示例 https stackoverflow com questions 8921296 how do i plot a step function with matplo
  • iOS 中的 HTTP“POST”请求

    我需要发布到这个网址 https api platform com media 我对 HTTP 请求非常陌生 我需要发送一个包含图像和其他 3 个参数的请求 我有我需要的价值观 但我不知道从哪里开始或它如何工作 标题 Content Len
  • 如何在选择 TextBlock 中的文本的位置显示弹出窗口

    我想添加一个弹出窗口到我的TextBlock 当我选择 TextBlock 中的文本时 弹出窗口将显示在所选位置 有点像 Microsoft Edge 中的阅读模式 当您在阅读模式下选择文本时 将会有一个弹出窗口显示单词的定义 但我不知道怎
  • 如何在 Windows 上创建通知气球?

    我想创建一个简单的命令行工具来发布这样的快速通知 我希望该工具尽可能简单 尽可能小 所以我选择在CPP中编码 并直接使用Win32 API I found 指南非常有用 但看来这个Shell NotifyIconAPI 需要一个有效的hWn
  • 打开 xlsx 文件时出现 HRESULT 异常:0x80010105 (RPC_E_SERVERFAULT)

    我有一个例外 这让我发疯 当我尝试以这种方式打开 xlsx 文件时 Microsoft Office Interop Excel Application app new Microsoft Office Interop Excel Appl
  • 如何在 C 中搜索命令行参数? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我已经编译并运行了 C 代码 很多文件 但我需要理解命令行参数的物理含义 我运行这样的代码 testmt signal1 3 5 1 1 在
  • malloc()在哪里分配内存?是进程虚拟地址空间的数据段还是堆段?

    自从我被介绍到C 有人告诉我 在C动态内存分配是使用中的函数完成的malloc家庭 我还了解到 使用动态分配内存malloc分配在进程的堆部分 各种操作系统教科书都这么说malloc涉及系统调用 虽然并不总是但有时 来将堆上的结构分配给进程
  • 从汇总函数中提取参数系数[重复]

    这个问题在这里已经有答案了 我已经拟合了一个线性回归模型 Lin lt lm y x data df 当我使用summary函数 我得到一些输出 如何从该输出中提取参数系数 以下是获取参数估计值的几种方法 R gt m lm y x R g
  • 获取 Django ALLOWED_HOSTS 环境。变量直接在 settings.py 中格式化

    我面临以下问题 我的 env 文件包含如下行 export SERVERNAMES localhost domain1 domain2 domain3 lt exactly this kind of format 但变量称为SERVERNA
  • 返回连续缺失的工作日日期并在缺失日期旁边分配费率

    Dates rates 7 26 2019 1 04 7 30 2019 1 0116 7 31 2019 1 005 8 1 2019 1 035 8 2 2019 1 01 8 6 2019 0 9886 8 12 2019 0 965
  • CSS3相当于jQuery的slideUp和slideDown?

    我的应用程序在使用 jQuery 的 SlideDown 和 SlideUp 时表现不佳 我希望在支持 CSS3 的浏览器中使用 CSS3 等效项 是否可以使用 CSS3 转换来更改元素display none to display blo
  • WSImport 为多个 Dynamics CRM 4.0 WSDL 生成冲突的 XMLType

    我目前正在使用 Dynamics CRM 4 0 Web 服务 我做的第一件事是使用 wsimport 生成正确的类Java JAX WS基于 Web 服务的 WSDL 在生成类时我遇到了一些错误 ERROR A class interfa
  • 使用 jQuery 拖动时滚动页面

    我尝试过使用kinetic js和下面的代码 但是当我在IE11中尝试这个时 每次滚动时它都会跳到顶部 html kinetic 我想让页面在平板电脑以及 IE10 和 11 上可滚动 以便用户只需向上推动页面即可向下滚动 就像在移动设备上
  • OleDbConnection 字符串和 unicode

    在我的程序中 我正在从 HTML 文件读取数据 但在该文件中 有时有些包含 unicode 字符的文本数据会被转换回 UTF 8 米歇尔 gt 米歇尔 我使用以下代码从文件中检索数据 string ConnectionString stri
  • 使用 qplot 绘制函数族,无需重复数据

    给定函数族f x q x是论证并且q是参数 我想可视化这个函数族x从区间取 0 1 对于 9 个值q 从 0 1 到 0 9 到目前为止我的解决方案是 f function p q 0 9 1 1 p q 3 1024 x seq 0 0
  • 重写和非重写构造函数

    我只是想问一个简单的问题 我有一个从 TLabel 派生的类 如下所示 TMyLabel class TLabel constructor Create AOwner TComponent override end constructor
  • 如何静音 SpeechRecognizer 的嘟嘟声?

    以前有人问过这个问题 但似乎没有人有解决方案 静音 SpeechRecognizer 蜂鸣声 https stackoverflow com questions 24579197 muting speechrecognizers beep
  • Kafka:多个实例中的单个消费者组

    我正在致力于为我们的应用程序实施基于 Kafka 的解决方案 根据 Kafka 文档 我的理解是消费者组中的一个消费者 即一个线程 在内部映射到订阅主题中的一个分区 假设我有一个包含 40 个分区的主题 并且有一个在 4 个实例中运行的高级
  • 它们真的是虚拟代码吗?

    某些按键的虚拟按键代码 例如移位 Del 等与 C C 相比 在 java 中显示为不同的值 例如 Key Java C C Shift 16 160 91 219 93 221 92 220 Del 127 46 Window 524 9
  • 如何为另一个类型类中的所有类型编写实例?

    我必须定义一个类型类Truthy其中包含一个方法true将类型类的实例转换为Bool value 我的类型类声明 class Truthy a where true a gt Bool 接下来 我必须为各种类型定义此类的实例 包括列表和数字