- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码:
{-# LANGUAGE TypeFamilies #-}
module Study where
class C a where
type T a :: *
pred :: T a -> Bool
— 出现此错误:
.../Study.hs:7:5: error:
• Couldn't match type ‘T a’ with ‘T a0’
Expected type: T a -> Bool
Actual type: T a0 -> Bool
NB: ‘T’ is a type function, and may not be injective
The type variable ‘a0’ is ambiguous
• In the ambiguity check for ‘Study.pred’
To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
When checking the class method:
Study.pred :: forall a. A a => T a -> Bool
In the class declaration for ‘A’
|
7 | pred :: T a -> Bool
| ^^^^^^^^^^^^^^^^^^^
用 data
修复替换 type
关键字。
pred
的类型有何关系?最佳答案
instance C Int where
type T Int = ()
pred () = False
instance C Char where
type T Char = ()
pred () = True
现在你有 pred
的两个定义。因为类型族只是分配类型同义词,所以这两个定义具有签名
pred :: () -> Bool
和
pred :: () -> Bool
嗯,看起来很相似,不是吗?类型检查器无法区分它们。那么,什么是
pred ()
应该是? True
或False
?
要解决此问题,您需要某种明确的方式来提供特定 pred
的实例的信息。在某些用例中应该属于。正如您自己发现的那样,实现此目的的一种方法是更改为关联的 data
家庭:data T Int = TInt
和data T Char = TChar
将是两种可区分的新类型,而不是类型的同义词,后者无法确保它们实际上不同。 IE。数据族总是单射的;类型的家庭有时不是。在没有其他提示的情况下,编译器假定没有类型族是单射的。
您可以使用另一种语言扩展来声明类型族单射:
{-# LANGUAGE TypeFamilyDependencies #-}
class C a where
type T a = (r :: *) | r -> a
pred :: T a -> a
=
只需绑定(bind) r
T
的结果到一个名称,因此它在单射性注释的范围内,r -> a
,读起来像函数依赖: r
T
的结果足以确定a
论点。上述情况现已违法; type T Int = ()
和type T Char = ()
一起违反单射性。仅允许一项。
或者,您可以按照编译器的提示进行操作; -XAllowAmbiguousTypes
使原始代码编译。但是,您将需要 -XTypeApplications
解析使用站点的实例:
pred @Int () == False
pred @Char () == True
关于haskell - 关联类型族提示 `pred::T a -> Bool` ,其中 "NB: ‘T’ 是一个类型函数,并且可能不是单射的”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155026/
(changeTab) 对我不起作用。我想在 Angular 中切换到 Nebular Theme 中的特定选项卡时调用特定函数。 最佳答案 不容易提供帮助,因为您没有提供我们代码的任何示例。在这个阶
我正在使用 glmer.nb 研究负二项式模型lme4 内的函数R 包。实际模型本身有些复杂,但应该(至少我相信)在统计上是合理的。我现在的问题是因为模型难以收敛并返回此警告: In checkCon
我通过绘制相应的学习曲线,比较了 NLTK 和 Scikit 中朴素贝叶斯的两种实现的性能(伯努利版本,类先验并不重要,因为我为每个类使用完全相同数量的训练示例)对于我的三类问题。 X 轴是训练数据集
ArrayList> diskpart; List getPartition(Integer n){ List aktpart = new ArrayList<> ();
我有一串带有 As 和 B 的字符,我需要对其进行分析以查找语言 A^nB^n。我可以使用下面的代码在大多数情况下工作,但是当有一个字母不是“A”或“B”时,它仍然可能返回 true,例如:AABAC
我正在建模一个介导的零膨胀负二项式 (ZINB) 模型。我正在遵循 O'Rourke & Vazquez (2019) 的步骤 --> https://www.sciencedirect.com/sc
我正在尝试实现这样的高斯 NB 训练。然而,如果 X 的维度不相等(即 X 内的所有列表需要具有相同的长度),则 gnb.fit() 会引发异常。如果我的训练样本是不同长度的向量,调用 fit() 的
我编写了一个算法来从 AMR 文件中提取每一帧。我认为文件的前 6 个字节是文件头,后面的信息是音频帧。每个音频帧由帧头和音频数据组成。帧头以字节为单位告知帧的大小(使用 CMR 模式表 - http
我必须在网页上打印一些 SQL 的 select 请求答案。 因为结果太大,所以我需要每 500 个打印 500 个。 像 phpmyadmin 一样,我该如何说(使用 SQL 请求)来获取每 500
使用带默认选项的 NB 转换(“文章”)我没有得到带页码的页脚?我对 LaTex 一无所知,但简单看一下 tpl 文件似乎表明我应该得到页脚(也许有页码?)“书”选项提供了很好的页脚,但由于其他原因不
我正在试验 nb-stepper 组件,并想在我的 Angular 组件中设置 selectedIndex。刷新我的事件后在 [(selectedIndex)] 上指定双向绑定(bind)时,nb-s
我正在尝试使用 sqrt 链接拟合 Negbin 模型。不幸的是,我似乎必须指定起始值。有人熟悉在运行 glm.nb 时设置起始值吗?命令(包 MASS)? 当我不使用起始值时,我收到一条错误消息:
如何在 NetBeans 平台应用程序的用户目录中创建新文件? 我用了: System.getProperty("netbeans.user", "user.home") + "/myfile");
星云 checkbox.component.ts不开火 (change)值改变时的事件。 checkbox.component.ts应该有更改事件 {{t}} 最佳答案 星云 nb-radio
我有一个程序可以打开项目文件夹中的 .txt 文件并读取其中的行。我知道文件读取有效,所以它不是 I/O 问题(或 Swing ,因为我也在使用它),但是当我设置 nim (我的变量)= anArra
我想开始使用 iReport(netbeans 版本)并替换旧的经典 iReport 3.0.x。看起来经典的 iReport 不会再得到改进,并且在某个时候会被放弃。 问题是我需要从另一个java应
为了重构我的代码,我编写了如下的 google SignOut 函数 function googleSignOut() { if (typeof module_google_login ==
这是我的 js 正则表达式测试。 'AAa\nbBB'.match(/AA[.\n]+BB/);//failed match 我认为[.\n]+可以匹配任何字符。我错了吗? 最佳答案 该点与 char
我正在使用 angular5,在执行 npm start 或 serve 时出现“No mixin named nb-install”错误 Module build failed: undefined
我只是想知道如何在 C 中编写一定数量的空白字符。例如,如果我想在文件描述符中写入 size 空白字符,我会这样写: int fd = open(filename, O_RDWR|O_CREA
我是一名优秀的程序员,十分优秀!