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

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 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • Haskell 泛化问题(涉及列表理解)

    假设我想知道a上的所有要点 x y 矩形内的平面has 我可以使用列表推导式来计算 如下所示 let myFun2D x y x lt 0 2 y lt 0 2 现在 如果我想为一个人完成同样的事情 x y z 空间 我可以采取同样的方式并
  • 在 Yesod 生态系统中,对某些文本进行 urlencode 的最佳方式是什么?

    我想对一些文本进行 url 编码 例如 用 20 替换每个空格等 我找到了 HTTP Network HTTP Base urlEncode 并且可以使用它 但我想知道是否还有其他通常在 Yesod 生态系统中使用的东西 不幸的是 由于 U
  • 在scala 2.13中,为什么有时无法显式调用类型类?

    这是 Shapeless 2 3 3 中的一个简单示例 val book author gt gt Benjamin Pierce title gt gt Types and Programming Languages id gt gt 2
  • 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
  • 有没有更好的方法将 UTC 时间转换为大纪元时间?

    我想将文件的修改时间设置为从 exif 数据获取的时间 为了从 exif 获取时间 我发现 Graphics Exif getTag Exif gt String gt IO Maybe String 要设置文件修改时间 我发现 Syste
  • QuickCheck是否可以生成任意函数

    我试图为身份编写一个 QuickCheck 测试 f y f y 我最初的计划是编写一个返回函数和整数的任意生成器 具有签名Gen Int gt Int Int 并在prop DollerDoesNothing使用 不使用测试该功能应用程序
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • Haskell:IORef 的性能

    我一直在尝试在 Haskell 中编码一个需要使用大量可变引用的算法 但与纯粹的惰性代码相比 它 也许并不奇怪 非常慢 考虑一个非常简单的例子 module Main where import Data IORef import Contr
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • Data.Sequence 中的 inits 和 tails 如何工作?

    Louis Wasserman 编写了当前的实现inits and tails in Data Sequence 他表示它们非常高效 事实上 只要查看代码 我就可以看到 无论它们在做什么 它们都是以干净 自上而下的方式进行的 这往往会给惰性
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 约束包如何工作?

    背后的想法数据 约束 Forall http hackage haskell org packages archive constraints 0 3 2 doc html src Data Constraint Forall html据我
  • 为什么在 where 子句中使用类型签名如此罕见?

    它是否有助于编译器优化 或者只是添加额外类型签名的多余工作 例如 人们经常看到 foo a gt b foo x bar x where bar x undefined 而不是 foo a gt b foo x bar x where ba
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored
  • Haskell 处理负参数

    尝试对两个值求和 其中只有一个为负值 例如 1 and 2 soma Float gt Float gt Float soma x1 x2 x1 x2 结果出现错误 为什么

随机推荐

  • 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