对 Maybe a 进行约束,其中 Eq a

2024-01-24

我如何约束 Maybe a where Eq a?它必须是种类 * -> 约束

我尝试过的:

class (a ~ Maybe b, Eq b) => K a where
instance (a ~ Maybe b, Eq b) => K a where

Error:

Not in scope: type variable ‘b’

用法示例:

data Test c = forall a. (c a) => Test a
r :: Test K -> Maybe Bool
r (Test o) = (==) <$> o <*> o -- I need GHC to infer that o is Maybe Eq

有效的案例:

pp :: Test ((~) String) -> String
pp (Test o) = o ++ "X" -- GHC infers that o is a string

hh :: Test Eq -> Bool
hh (Test o) = o == o -- GHC infers that o is Eq

通用答案在这里:是否有通用方法将约束应用于类型应用程序? https://stackoverflow.com/questions/41178589/is-there-a-general-way-to-apply-constraints-to-a-type-application/41178590#41178590


以下内容在我的机器上编译。不知道这有多明智。

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE ConstraintKinds #-}
class (Eq (UnMaybe a), a ~ Maybe (UnMaybe a)) => EqMaybe a where
    type UnMaybe a

instance Eq a => EqMaybe (Maybe a) where
    type UnMaybe (Maybe a) = a

data Test c = forall a. c a => Test a
r :: Test EqMaybe -> Maybe Bool
r (Test o) = (==) <$> o <*> o
f :: Test Eq -> Test EqMaybe
f (Test o) = Test (Just o)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 Maybe a 进行约束,其中 Eq a 的相关文章

  • 如何手动推断表达式的类型

    给定 Haskell 函数 head filter fst 现在的问题是如何手动 手动 找到类型 如果我让 Haskell 告诉我我得到的类型 head filter fst Bool b gt Bool b 但我想了解仅使用所用函数的签名
  • 无点镜头创建不进行类型检查

    在函数中test 我遍历一个列表 从它的成员生成镜头 然后打印一些数据 当我使用有针对性的呼叫风格时 这会起作用 当我使其成为无点时 它无法进行类型检查 为什么会出现这种情况 我该如何解决这个问题 在我看来 GHC 并没有保留排名较高的信息
  • Haskell 下划线与显式变量

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

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • Traversable 类型类的用途

    有人可以向我解释一下类型类的目的是什么吗Traversable 类型类定义是 class Functor t Foldable t gt Traversable t gt where So Traversable is a Functor
  • 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
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • Haskell 标准库是什么?

    GHC专用库可以称为标准库吗 或者只有 Haskell 2010 报告中的那些才算数 许多 GHC 库可以通过 Haskell 报告中的函数来实现 可能与 C 绑定相结合 但其他语言依赖于 GHC 特定的扩展 因为语言报告中定义的当前 Ha
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 纯 Haskell 代码需要线程池吗?

    In 现实世界 Haskell 第 28 章 软件事务内存 http book realworldhaskell org read software transactional memory html 开发了一个并发网络链接检查器 它获取网
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • 如何在 Haskell Pipes 中将两个 Consumer 合并为一个?

    我使用Haskell流处理库pipes https hackage haskell org package pipes编写一个命令行工具 每个命令行操作都可以将结果输出到stdout并记录到stderr with pipes API I n

随机推荐

  • 为什么我应该用 c++ 而不是 c 设置插件接口

    由于我的previous https stackoverflow com questions 1054697 why isnt my new operator called 问题 https stackoverflow com questi
  • C# 将图像从 PowerPoint 复制到 Word

    我需要一个应用程序将文本和图像从 PowerPoint 复制到 Word 我使用这个库 Microsoft Office Interop PowerPoint 和 Microsoft Office Interop Word 文本很容易传输
  • Android 不同屏幕尺寸的布局

    我正在为 Android 应用程序的布局而苦苦挣扎 我为不同的屏幕尺寸定义了不同的布局 当前的布局目录结构是这样的 layout 布局土地 小布局 布局 xlarge 布局 xlarge 土地 Problem 主要布局目录文件正在显示3 7
  • 联系表格 Laravel 4

    我是 Laravel 4 的菜鸟 联系表单给我带来了一些麻烦 发现了一些东西 全部都使用控制器 但我只需要在路线中使用它 如何创建简单的联系表单 姓名 电子邮件和消息 的路由以将数据发送到管理员电子邮箱 Cheers 这是一种仅使用您的路由
  • 使用 Google 脚本删除电子表格中的空白行

    Spreadsheet 1 Spreadsheet 1 中存在的数据 Name apple android windows linux Germany 3 4 6 7 America 4 1 6 2 Sweden 1 6 1 6 Paris
  • 在C中将字符数字转换为相应的整数

    C语言中有没有办法将字符转换为整数 例如 从 5 to 5 根据其他回复 这很好 char c 5 int x c 0 另外 为了进行错误检查 您可能希望首先检查 isdigit c 是否为 true 请注意 您不能完全便携地对字母执行相同
  • 迭代除 x item 之外的字典

    我有一个这种格式的字典 d data key 1 value 1 key 2 value 2 key 3 value 3 key x value x key n value n 我必须迭代它的项目 for key value in colu
  • 如何区分 Switch,Checkbox 值是由用户更改还是以编程方式(包括通过保留)更改?

    setOnCheckedChangeListener new OnCheckedChangeListener Override public void onCheckedChanged CompoundButton buttonView b
  • 在knockout js中将循环结构转换为JSON

    我有两个网格结构 在其中一个网格结构中我多次有多个字段 而在其中一个网格结构中我一次有两个字段 我为每个网格编写 apply 方法 我的第一个网格 id 工作正常 但是当我单击第二个网格上的 应用 时 我收到此错误 Uncaught Typ
  • 在 C++ 软件中纳入共享软件限制

    我希望在共享软件的基础上实现我的软件 以便用户 给予最多 例如 30 天的试用期来试用该软件 购买时 我打算向用户提供一个随机生成的密钥 输入该密钥时 再次启用该软件 我以前从未走过这条路 所以任何建议 反馈或关于如何完成此操作的 标准 方
  • 避免重新计算 Beam Python SDK 中所有云存储文件的大小

    我正在开发一个从 Google Cloud Storage GCS 目录读取约 500 万个文件的管道 我已将其配置为在 Google Cloud Dataflow 上运行 问题是 当我启动管道时 需要几个小时 计算所有文件的大小 INFO
  • 找不到 pyinstaller 命令

    我在 VirtualBox 上使用 Ubuntu 我该如何添加pyinstaller to the PATH 问题是当我说 pyinstaller file py 它说找不到 pyinstaller 命令 它说它安装正确 根据其他帖子 我认
  • 删除 X-Powered-By

    如何删除 PHP 中的 X Powered By 标头 我在 Apache 服务器上 使用 php 5 21 我无法在 php 中使用 header remove 函数 因为 5 21 不支持它 我使用了 Header unset X Po
  • 检测点是否在 SVG 路径内

    我正在尝试检测给定点是否位于 Objective C 中的闭合 SVG 路径内 我不知道如何做数学 我有一个路径的坐标 我想确定一个随机点是在路径内部还是外部 这是路径坐标的示例 M673 460 c2 0 4 1 5 2 1 1 2 2
  • Objective-C 中的全局变量 - extern 和 .m 文件顶部声明的差异

    我知道你可以使用 extern 在 Objective C 中定义一个全局变量 但我刚刚意识到我在第一个方法之前在 m 文件顶部声明的变量也意外地是全局的 这导致了一些问题 问题 我将它们移至头文件的 interface 部分 我认为这正确
  • SVN 错误:预期的 fs 格式介于“1”和“3”之间;找到格式“4”

    这就是我所做的 我已经安装了 svnserve 作为服务 并使用以下命令启动它网络启动svn服务命令 我输入了svn ls svn localhost测试该服务 但它返回了本文标题中所述的错误 我进入了svn 版本 and svnserve
  • 将一个对象属性值传输到另一个对象

    首先 我知道自动映射器 而且我不想使用它 因为我正在学习C 我想深入了解它 所以我正在尝试自己解决这个问题 如下所述 但是 我正在尝试创建一个属性复制器 以将一种类型的属性值复制到另一种类型 前提是该属性具有相同的名称和类型 并且可以从源读
  • 为什么 git 会重复添加和删除 Storyboard 部分?

    当保存故事板并将更改提交到 git 时 整个过程很可能会发生变化
  • 如何快速过滤字典并将结果输出到 CollectionViewController 中

    我正在制作一个显示口袋妖怪及其类型的应用程序 该应用程序的一部分也会显示出它们的弱点 我有一个列出所有神奇宝贝的全局变量 如下所示 var objects id 001 typeTwo Poison name Bulbasaur type
  • 对 Maybe a 进行约束,其中 Eq a

    我如何约束 Maybe a where Eq a 它必须是种类 gt 约束 我尝试过的 class a Maybe b Eq b gt K a where instance a Maybe b Eq b gt K a where Error