首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GHC.Generics表示是如何工作的?

GHC.Generics表示是如何工作的?
EN

Stack Overflow用户
提问于 2015-06-29 06:59:18
回答 1查看 161关注 0票数 2

我真的对GHC.Generics中的“泛型表示类型”感到困惑。我不明白这种数据类型是如何工作的。例如,元信息,M1

代码语言:javascript
复制
newtype M1 i c f p
M1
  unM1 :: f p

为什么类型M1有四个类型的变量: i,c,f和p。我的意思是,为什么4。它有一些特殊的意义吗?

另外,对于初学者学习GHC泛型的任何书籍或论文都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-05-10 18:00:27

GHC.Generics没有太多的资源。你最好的选择是在黑客,博客文章和阅读源代码的文档。

以下是我保留的类型同义词的简化引用列表,以便记住GHC.Generics中的所有类型意味着什么。

代码语言:javascript
复制
type TypeName = D1 ('MetaSelector name moduleName packageName isNewType) rest
-- Company from data Company = MkCompany { name :: String, address :: String }

type Constructor = C1 ('MetaCons constructor prefixOrInfix isRecord) rest
-- MkCompany from data Company = MkCompany { name :: String, address :: String }

type NamedSelector = S1 ('MetaSel ('Just selector) unpackednesss sourceStrictness decidedStrictness)
-- age from data Person = Person { age :: Int }

type UnnamedSelector = S1 ('MetaSel Nothing unpackednesss sourceStrictness decidedStrictness)
-- Int from data Wrapper = Wrapper Int

type ConcatSelectors = (:*:)

type ConcatConstructors = (:+:)

type TypeParameter a = Rec0 a
-- a from the right side of data Wrapper a = Wrapper {getA :: a}

type ConstructorEmptyValuePlaceholder = U1
-- data Empty = MkEmpty, MkEmpty is a Constructor but takes no values
-- ConstructorEmptyValuePlaceholder fills the type requirement of Constructor
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31109559

复制
相关文章

相似问题

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