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

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(使用前将#替换为@)

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

  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 将系统命令的结果绑定到 Haskell 中的变量

    如何在 Haskell 中运行系统命令and将其结果 即标准输出 绑定到变量 在伪 Haskell 中 我正在寻找类似以下内容的内容 import System Process main do output lt callCommand e
  • Haskell Cabal 包 - 找不到 Paths_ 模块

    我正在开发一个 Haskell 项目 Happstack 服务器 Blaze HTML 前端作为主要库 我想添加一个静态数据目录 看起来你可以使用 Cabal 使用自动生成的Path
  • ErrorT 已弃用,但 exceptT 不适合

    我有一个一元计算 在某些时候 由于单子模式匹配 它开始需要 MonadFail 约束 我的简单解决方法是使用以下命令运行它 fmap either error id runErrorT 然而哎呀 Deprecated Use Control
  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 为什么 Parsec 的 sepBy 停止并且不解析所有元素?

    我正在尝试解析一些逗号分隔的字符串 该字符串可能包含也可能不包含具有图像尺寸的字符串 例如 hello world 300x300 good bye world 我写了下面的小程序 import Text Parsec import qua
  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • Haskell:无法预期类型“Integer”与实际类型“Int”

    我已经盯着这段代码有一段时间了 但我无法理解该错误消息 divisors Integer gt Integer divisors n t t lt 1 n mod n t 0 length a gt Integer length 0 len
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • 如何在 Haskell 中安装库?

    我尝试使用控制 Monad Extra andM https hackage haskell org package extra 1 7 10 docs Control Monad Extra html import Control Mon
  • Haskell 入门

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 几天来 我一直试图理解 Haskell 中的函数式编程范例 我通过阅读教程和观看截屏视频
  • 为什么 ZipList 不是 List 的默认应用实例

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

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采

随机推荐

  • 如何使用 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 接下来 我必须为各种类型定义此类的实例 包括列表和数字