- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到一个错误
app\Main.hs:1:1: error:
Couldn't match kind `*' with `Constraint'
When matching types
b :: *
(Set b, Set s) :: Constraint
|
1 | {-# LANGUAGE TypeFamilies #-}
| ^
不知道为什么b
和约束(Set b, Set s)
要匹配?我希望约束在存在上量化类型 b 但为什么它会匹配它们?
我相信在出现错误之前我所做的最后一件事是将 OpOutcome 添加到类中。
这是代码
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeFamilyDependencies #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE RankNTypes #-}
module Main where
import GHC.TypeLits (Symbol)
import GHC.Exts (Constraint)
import Data.Reflection (Reifies, reflect)
import Data.Proxy (Proxy(..))
main :: IO ()
main = print 5
class ((a,b)::Constraint) => HasCtxt a b
instance (a,b) => HasCtxt a b
class Determines a b | a -> b
instance Determines a b => Determines a b
type Set b = (b ~ b)
type OpLayout a = (forall s ctxt b. (OpCtxt a s b ~ ctxt, Determines a b, Determines a ctxt,Reifies s b) => ( HasCtxt ctxt (Reifies s b))) :: Constraint
data Stack a where
Cons :: OpConstructor a -> Stack b -> Stack a
Nil :: Stack "NIL"
class OpLayout a => OpCode (a::Symbol) where
type OpCtxt a s b = (ctxt :: Constraint) | ctxt -> s b
type OpOutcome a :: *
data OpConstructor a
opValue :: Determines a s => Proxy s
opValue = Proxy
popOP :: OpCtxt a s b => Stack a -> (b :: *)
evalOP :: OpConstructor a -> Stack x -> OpOutcome a
instance OpCode "load_val" where
type OpCtxt "load_val" s b = (Set s, Set b)
type OpOutcome "load_val" = Stack "load_val"
data OpConstructor "load_val" = forall b. LOAD_VAL b
popOP stack = reflect opValue
evalOP op stack = op `Cons` stack
编辑:较小的版本,感谢 Krzysztof Gogolewski
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds #-}
module Err where
import GHC.Exts (Constraint)
class Determines b | -> b
class (forall (b :: *) (c :: Constraint). (Determines b, Determines c) => c) => OpCode
instance OpCode
最佳答案
这是一个小得多的文件,但基本上有相同的错误:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE FlexibleContexts #-}
module Test where
import GHC.Exts (Constraint)
class Determines a b | a -> b
class (forall ctxt. (Determines a a, Determines a (OpCtxt a)) => ctxt) => OpCode a where
type OpCtxt a :: Constraint
instance OpCode ()
这给出:
test.hs:1:1: error:
Couldn't match kind ‘Constraint’ with ‘*’
When matching types
OpCtxt () :: Constraint
() :: *
|
1 | {-# LANGUAGE TypeFamilies #-}
| ^
(顺便说一下,在未来,你应该尝试自己做一些类似的最小化,然后再问这里。)
GHC 使用如此无用的位置信息报告错误肯定是一个错误。然而,现在问题潜伏的地方太少了,我们可以很好地了解发生了什么。这里的情况是我们要求
Determines a a
Determines a (OpCtxt a)
范围内的函数依赖表示 a
应该足以计算出 Determines
的另一个参数。好吧,我们知道 a
有 *
,因为我们正在编写 instance OpCode ()
和 ()::*
;我们知道 OpCtxt a
有种类 Constraint
,因为我们在类声明中这么说了。所以 GHC 在开始之前就放弃了统一 a
和 OpCtxt a
的尝试——它们的种类不同,所以不可能相等!
要了解为什么会收到确切的错误消息,您唯一需要的技巧是在所有地方为 a
粘贴 ()
(因为这就是我们要处理的实例)尝试写作)。
翻译回您的设置:您要求
Determines a b
Determines a ctxt
我们知道 b::*
因为它作为 Reifies::k -> * -> Constraint
的第二个参数出现,我们知道 ctxt::Constraint
因为我们在 OpCode
类声明中这么说了。所以函数依赖不可能正确解决。然后,通过为 ctxt
放置 OpCtxt "load_val"s b
,然后简化为 (Set s, Set b)
,您会得到您看到的错误。
关于haskell - 文件开头无用的种类相等错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70857429/
我正在为我的项目使用 Google Cloud Datastore(而非 NDB)。 python2.7 和 Django。 我想创建一个新模型,比如说 Tag 模型。 class Tag(db.Mo
我正在研究使用 monad 推导式来表示 SQL 查询,并生成适当的 SQL。乍一看,这不是问题,看起来很合适。但我必须限制类型,这些类型只能形成产品的单子(monad),而不是总和,而且我想不出一种
在Foldable文档,我看到以下实例: (Foldable f, Foldable g) => Foldable (Compose * * f g) 如果我查看 Compose 的定义,我看到它被声
给定一个团队->运动员关系并查询所有运动员。什么 我对fetch="Join"有误解吗?该映射是否应引起 通过联接加载团队?在对运动员进行迭代时 仍然懒惰地加载团队。 public class Ath
我才刚刚开始熟悉类型的概念,所以如果我没有很好地表达我的问题,请耐心等待...... 值有类型: 3 :: Int [1,2,3] :: [Int] ('c',True) :: (Char,Bool)
这里是我在 javascript 中的一个数组,效果很好! _rowData: [ { name: "Most Recent", view: "recentView" }, { nam
我正在尝试绘制 pandas Series用一条线。 这些线产生显示的输出和散点图。 import pandas as pd print(pd.__version__) ... print(type(
我正在使用 gcloud npm 模块。提前致谢。 我尝试了很多,但什么也没得到。 最佳答案 您需要对该实体进行查询并计算结果。 var query = ds.createQuery('EntityK
一些上下文 我对 libclang 不是很熟悉。我只是修改一个使用 the python bindings to libclang 的 vim 插件. 有一个 python 函数接收游标参数。当前 C
我有一个链接到 zlib v1.2.3 的程序,它出现以下错误: deflateEnd error 'no msg' kind: 'Z_DATA_ERROR': -3 该程序已成功处理许多要压缩的不同
我正在尝试通过遵循 the docs 来实现 log4rs .我的目标是将 info!("INFO") 的结果放入文件 requests.log,但出现错误: thread 'main' panick
Program type already present: org.apache.http.ContentTooLongException Message{kind=ERROR, text=Progr
当我执行 ng generate component faqs 时,我无法将新组件添加到我的 Nativescript 项目中它返回错误: Option "entryComponent" is dep
我是一名优秀的程序员,十分优秀!