混合类型类和类型族时出现问题

2023-11-23

这段代码编译得很好:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances,
  UndecidableInstances, FlexibleContexts, EmptyDataDecls, ScopedTypeVariables,
  TypeOperators, TypeSynonymInstances, TypeFamilies #-}
class Sel a s b where
  type Res a s b :: *

instance Sel a s b where
  type Res a s b = (s -> (b,s))

instance Sel a s (b->(c,a)) where
  type Res a s (b->(c,a)) = (b -> s -> (c,s))

但一旦我添加 R 谓词 ghc 就会失败:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances,
  UndecidableInstances, FlexibleContexts, EmptyDataDecls, ScopedTypeVariables,
  TypeOperators, TypeSynonymInstances, TypeFamilies #-}
class Sel a s b where
  type Res a s b :: *

instance Sel a s b where
  type Res a s b = (s -> (b,s))

class R a where
  type Rec a :: *
  cons :: a -> Rec a
  elim :: Rec a -> a
instance Sel a s (b->(c,Rec a)) where
  type Res a s (b->(c,Rec a)) = (b -> s -> (c,s))

抱怨说:

    Illegal type synonym family application in instance:
        b -> (c, Rec a)
    In the instance declaration for `Sel a s (b -> (c, Rec a))'

它是什么意思以及(最重要的是)我该如何解决它?

Thanks


类型族是单向的:您可以扩展Rec a到它的计算类型,但是你不能(唯一地)从扩展返回到Rec a。这使得类型函数的应用程序不适合实例签名,因为它们永远无法触发实例应用。

你可以尝试改为:

instance Rec a ~ reca => Sel a s (b->(c,reca))

这意味着别的东西:它表示任何函数b -> (c, reca)是一个实例,然后当它不可撤销地匹配时,编译器会检查Rec a ~ reca。但这可能足以满足您的需求。

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

混合类型类和类型族时出现问题 的相关文章

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

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我要将一个程序投入生产 我需要该程序做几件事才能将其视为 可操作 也就是说 工程师和操作人员以可测量
  • 模式匹配需要圆括号来表示非空列表而不是方括号

    在 Haskell 中 为什么模式匹配期望列表在不为空时有圆括号而不是方括号 当它尝试与空列表 方括号 进行模式匹配时 为什么它不遵循相同的约定 圆括号不应该专门为元组保留吗 例如 下面不起作用 third Integral a gt a
  • 哈斯克尔状态单子

    是否putState Monad 的函数会更新实际状态还是仅返回具有新值的新状态 我的问题是 State Monad 可以在命令式设置中像 全局变量 一样使用吗 并且确实put修改 全局变量 我的理解是 不 它不会修改初始状态 但是使用单子
  • 绑定变量时 Haskell 中的无限循环

    下面的 Haskell 代码不会终止 有人可以解释一下为什么吗 谢谢 f let x 10 in let x x x in x 我认为解释器首先绑定 x 10 然后将 x x 计算为 100 并绑定 x 100 环境变为 x 100 那么整
  • 为什么这会导致 Haskell Conduit 库内存泄漏?

    我有一个conduit https hackage haskell org package conduit管道处理长文件 我想每 1000 条记录为用户打印一份进度报告 所以我这样写 Every n records perform the
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 如何向 Scotty 中间件添加基本身份验证?

    我目前正在制作 Scotty API 但找不到任何 basicAuth 实现的示例 Wai Middleware HttpAuth 具体来说 我想将基本身份验证标头 用户 通行证 添加到我的某些端点 即以 admin 开头的端点 我已经设置
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • Haskell 二进制解析

    我一直在尝试在 haskell 中实现一个协议解析器 而且我对这门语言还很陌生 特别是当涉及到 monad 时 我一直在使用binary 0 5 0 2 并描述了协议的标头和所有有效负载 我想要解析的消息如下所示 header payloa
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • 是否有一个基于对象身份的、线程安全的记忆库?

    我知道记忆化似乎是堆栈溢出的 haskell 标签上的一个长期话题 但我think以前没有人问过这个问题 我知道 Haskell 有几个不同的 现成 记忆库 memo combinators 和 memotrie 包 利用涉及惰性无限数据结
  • 如何找到仅是 2、3 和 5 的幂的倍数的所有数字的列表? [复制]

    这个问题在这里已经有答案了 I am trying to generate a list of all multiples which can be represented by the form where a b and c are w
  • 将 Either 列表转换为其中包含列表的 Either 列表

    我是 Haskell 的初学者 我正在编写一些使用 Haskell 的代码Either https hackage haskell org package base 4 9 0 0 docs Data Either html用于错误处理 E
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 对元组列表进行排序的函数 - Haskell

    抱歉 这个简单的问题只是我对 haskell 非常陌生 我正在尝试编写一个函数 order 它将对另一个函数 Frequency 生成的元组列表进行排序 频率计算列表中不同元素的数量 a给出一个这样的结果 比如 gt 频率 aabbbccc
  • 解析 PHOAS 表达式

    我想我理解 PHOAS 参数化高阶抽象语法 我明白了如何漂亮地打印一个表达式 参见http www reddit com r haskell comments 1mo59h phoas for free by edward kmett cc
  • 什么是阴谋地狱?

    在阅读有关 阴谋地狱 的内容时 我有点困惑 因为这个词的含义太多了 我猜最初 Cabal Hell 指的是钻石依赖问题 该问题是通过限制构建计划在每个构建计划中只有任何包的单个版本来解决的 一个包的两个不同版本不能存在于单个构建计划中 正如
  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • 简单的秒差距示例会产生类型错误

    我正在尝试编译这个简单的秒差距代码 import Text Parsec simple letter 但我不断收到此错误 No instance for Stream s0 m0 Char arising from a use of let
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se

随机推荐

  • MarkerClusterer 完成后触发事件

    所以我有一个应用程序 其中包含带有 数百个 标记的地图 我使用 Google 提供的 MarkerClusterer js 来对我的标记进行聚类 并使整个内容更易于查看 我正在使用 API V3 我对这一切都很好 但我想做的是当标记聚类完成
  • 如何从 iphone sdk 中的 ISOCountryCode 获取 ISOCurrencyCode?

    我有可用的 ISOCountryCode 现在我想从 ISOCountryCode 导出该国家 地区的货币代码 我怎样才能做到这一点 NSString countryCode lt get from someother view gt NS
  • 如何更改新的 TabLayout 指示器颜色和高度

    我正在玩新的android support design widget TabLayout 发现一个问题 在类定义中 没有改变指示器颜色和默认高度的方法 做了一些研究 发现默认的指示器颜色取自AppTheme 具体从这里
  • Rails 3.2 按日期友好的 url 路由

    我想实现博客 新闻应用程序 并具有以下能力 显示根目录下的所有帖子 example com 显示某年回答的所有帖子 example com 2012 显示回答某个年份和月份的所有帖子 example com 2012 07 按日期和标题显示
  • 打字稿接口动态参数没有任何就无法编译

    我的类型如下 如果名称是 filter 以外的任何内容 则类型为 AggrEntry filter 的类型为 Aggr export interface Aggr name string AggrEntry filter Aggr 但是 除
  • 有些分配器是懒惰的吗?

    我在 Linux 中编写了一个 C 程序 该程序分配内存 循环运行它 并且 TOP 没有显示任何内存消耗 然后我用该内存做了一些事情 并且 TOP 确实显示了内存消耗 当我 malloc 时 我是否真的 获取内存 或者是否存在 惰性 内存管
  • 添加表单元素后,Chrome 过渡会在页面加载时触发

    Google Chrome 版本 36 0 1985 143 似乎有一个错误 或者我在这里遗漏了一些东西 Firefox 和 Safari 似乎按预期工作 结账Vimeo 上的演示视频 当以下 html 文档中存在表单元素时 CSS 转换似
  • BeautifulSoup(html) 不起作用,说无法调用模块?

    import urllib2 import urllib from BeautifulSoup import BeautifulSoup html from BeautifulSoup import BeautifulStoneSoup x
  • HTML5

    我正在尝试嵌入一个指向 PHP 文件提供的 MP3 或 OGG 数据的 HTML5 音频元素 当我在 Safari 中查看页面时 会出现控件 但 UI 上显示 直播 当我单击 播放 时 音频将按预期开始 但是 一旦结束 我就无法通过单击 播
  • 如何使用CSS让div填充剩余的垂直空间

    我正在尝试制作一个标准的网站布局header a 导航栏一个身体 在右侧导航栏 and a footer 现在我已经这样做了
  • 如何检测类型是否是另一种通用类型

    example public static void DoSomething
  • 来自 Week 和 WeekYear 的 LocalDate

    使用 NodaTime 库 如何根据周数和周 WeekYear 计算一周第一天的 LocalDate 与此相反 var date new LocalDate 2012 1 1 int weekYear date WeekYear 2011
  • 如何制作一个字典,返回字典中缺少的键的键,而不是引发 KeyError?

    我想创建一个 python 字典 它返回字典中缺少的键的键值 使用示例 dic smart dict dic a one a print dic a gt gt gt one a print dic b gt gt gt b dicts 有
  • 如何使用 HQL 将“null”放入列中?

    如何构建有效的HQL字符串 相当于 UPDATE 表 SET 字段 null WHERE 您的意思是批量 HQL 更新吗 尝试这个 UPDATE myEntity e SET e myProperty null WHERE 您还可以使用上述
  • 在 iPhone 上存储用户名和密码的最佳做法是什么?

    是否有在 iPhone 上存储用户名和密码的最佳实践方法 我正在寻找明显安全的东西 但也会在应用程序更新之间保留信息 使用苹果钥匙串 NSString getPasswordForUsername NSString username and
  • “显示完整站点”按钮可绕过 CSS 媒体查询

    我在我的网站上使用 CSS 媒体查询 以在较小的设备上切换到更垂直的布局 这工作得很好 但我想在网站上添加一个按钮 其中包含 显示桌面版本 之类的内容 我想让这个按钮 或链接 无论什么 强制或改变媒体查询评估 以便它们评估好像屏幕宽度比实际
  • Jenkins 在 Mercurial 提交后构建

    我已经在这个项目上工作了大约一周 我已经在网上搜索了两天 没有任何明确的解释 对于学校作业 我们需要使用以下程序设置构建服务器 Maven 作为我们的构建工具 Mercurial 作为我们的版本控制系统 Java JRE javac 和 j
  • 愤怒的小鸟喜欢滚动菜单

    当您启动 愤怒的小鸟 并点击 开始 时 您会看到一个水平滚动的菜单 其中有一条居中的图像 单击后您就可以开始游戏等等 我想知道如何制作一个与此类似的菜单 它可以横向滚动 水平 并显示可点击的图像 提前致谢 我认为你可以通过水平滚动视图 Ho
  • 无法在函数内访问 jQuery $.get 中的全局变量

    下面是我遇到问题的一些代码 基本上 我将一个空数组定义为全局变量 var playlist 然后尝试在 jQuery get 调用中向其中添加元素 根据我在互联网上读到的内容 我应该能够做到这一点 以下代码给出错误 无法调用未定义的方法 p
  • 混合类型类和类型族时出现问题

    这段代码编译得很好 LANGUAGE MultiParamTypeClasses FunctionalDependencies FlexibleInstances UndecidableInstances FlexibleContexts