首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Haskell Data.Data软件包的类型

理解Haskell Data.Data软件包的类型
EN

Stack Overflow用户
提问于 2015-11-24 12:52:09
回答 1查看 97关注 0票数 1

我正在努力理解Data.Data包的Constr类型。审议以下会议。dataTypeConstrs返回一个Constr列表,其中包括可能的零参数和一个参数构造函数。由于明显的类型错误,试图重新创建列表失败。这是GHC关于常数值的一种特殊行为吗?

代码语言:javascript
复制
$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Prelude> :set -XScopedTypeVariables
Prelude> :module +Data.Data
Prelude Data.Data> dataTypeConstrs (dataTypeOf (Nothing :: Maybe ()))
[Nothing,Just]
Prelude Data.Data> :i it
it :: [Constr]  -- Defined at <interactive>:4:1

Prelude Data.Data> let i2 :: [Constr] = [Nothing,Just]

<interactive>:6:23:
    Couldn't match expected type ‘Constr’ with actual type ‘Maybe a0’
    In the expression: Nothing
    In the expression: [Nothing, Just]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 17:59:40

这不是实际构造函数的列表,而是构造函数表示的列表。它的Show实例使用了一个快速而松散的输出,这使它看起来有些不同。

假装这是某种东西

代码语言:javascript
复制
[ Constr{ name = "Nothing", args = 0, ... }
, Constr{ name = "Just", args = 1, ... }
]

只不过它是以松散的方式显示出来的。

更准确地说,这是内部的、不透明的构造函数表示。使用constr*观察者检查Constr类型的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33894217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档