- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这个:
data Animal = Dog | Cat
:t Dog
Dog :: Animal
很公平。
:k Dog
<interactive>:1:1:
Not in scope: type constructor or class ‘Dog’
A data constructor of that name is in scope; did you mean DataKinds?
没想到它会起作用,因为 Dog 是一个值,而不是类型。你不能得到一种值,只能得到一种类型,对吗?
但是,如果我这样做:
:set -XDataKinds
data Animal = Dog | Cat
:k Dog
Dog :: Animal
这意味着你可以获得某种值?
最佳答案
不。您只能获取 types 的种类。 -XDataKinds
的作用是获取数据声明并赋予它们两个含义:首先,它声明一个新类型和一些相应的值构造函数;其次,它声明了一个新的种类和一些相应的类型构造函数。因此,在启用 DataKinds
的情况下,声明如下:
data Animal = Dog | Cat
创建以下全部:
动物
Animal
类型的值 Dog
Animal
类型的值 Cat
动物
狗
类型动物
猫
类型动物
这三个命名空间——术语级别、类型级别和种类级别——是完全不相交的。如果 DataKinds
以两种不同的方式定义新类型,您可以使用前缀 '
来指示您想要提升的版本。因此:
> :set -XDataKinds
> data Animal = Animal
> :k Animal
Animal :: *
> :k 'Animal
'Animal :: Animal
关于Haskell 的 DataKinds 以及值、类型和种类的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423709/
以下示例是我现实生活中问题的简化版本。它似乎在某种程度上类似于 Retrieving information from DataKinds constrained existential types
我一直在自学类型级编程,并想编写一个简单的自然数加法类型函数。我的第一个版本如下: data Z data S n type One = S Z type Two = S (S Z) type fam
我在让 GHC 在一个应该很明显的地方推断出一个类型时遇到了问题。以下是演示问题的完整片段。 {-# LANGUAGE DataKinds, ScopedTypeVariables, KindSign
假设我有一个货币类型: data Currency = USD | EUR | YEN 和存储 int 的 Money 类型,并由给定的货币参数化(货币被提升为具有 DataKinds 扩展的种类)。
如果我有一个受有限 DataKind 约束的类型 {-# LANGUAGE DataKinds #-} data K = A | B data Ty (a :: K) = Ty { ... } 以及忘
使用 DataKinds,定义如下 data KFoo = TFoo 介绍种类KFoo :: BOX和类型 TFoo :: KFoo .为什么我不能继续定义 data TFoo = CFoo 这样CF
我从Basic Type Level Programming in Haskell学习Haskell的类型编程但是当它引入 DataKinds 扩展时,示例中有些东西似乎令人困惑: {-# LANGU
我有一个 Universe 类型和一个 Worker 类型。 worker 可以改变宇宙。我想要实现的目标是确保宇宙只能由来自该宇宙的 worker (而不是 future 或过去的 worker )
使用高级类型系统的东西。我想要命名 kind 和 a几个生成此类类型的类型构造函数: {-# LANGUAGE DataKinds #-} data Subject = New | Existing
我有一个常见的模式,其中有一个 [*] 类型的类型级列表,并且我想应用 * -> * 类型的类型构造函数> 到列表中的每个元素。例如,我想将类型 '[Int, Double, Integer] 更改为
我有这个代码片段,它使用了大量的 GHC 扩展: {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GA
我正在尝试找到对 DataKinds 扩展的解释,这对我来说是有意义的,因为我只读过 Learn You a Haskell 。是否有一个标准来源对我来说对我所学到的一点点有意义? 编辑:例如 doc
通过最近有关 HaskellDB 的帖子,我有动力再次研究 HList。由于我们现在在 GHC 中有 -XDataKinds,它实际上有一个异构列表的示例,因此我想研究 HList 与 DataKin
假设我有这个: data Animal = Dog | Cat :t Dog Dog :: Animal 很公平。 :k Dog :1:1: Not in scope: type constr
我正在尝试将 GADT 与 DataKinds 一起使用,如下所示 {-# LANGUAGE KindSignatures, DataKinds, GADTs #-} module NewGadt w
给定一个 ADT data K = A | B Bool DataKinds扩展允许我们将其提升为种类和类型/类型构造函数 K :: BOX 'A :: K 'B :: 'Bool -> K 有没有办
尝试使用 TypeLits 对数据类型进行 JSON 反序列化时,我遇到了以下问题: Couldn't match type ‘n’ with ‘2’ ‘n’ is a rigid type
因此,当我在使用 DataKinds 时尝试确定多态返回值的类型时,ghci 给了我一个有趣的错误。我有以下代码: {-# LANGUAGE DataKinds #-} {-# LANGUAGE Ki
我有一些这样的类型: data Currency = USD | EUR deriving (Show, Typeable) data Money :: Currency
所以,我终于找到了一个可以利用新的 DataKinds 的任务。扩展(使用 ghc 7.4.1)。这是Vec我正在使用: data Nat = Z | S Nat deriving (Eq, Show
我是一名优秀的程序员,十分优秀!