GHC.Generics表示如何工作?

时间:2015-06-29 06:59:19

标签: haskell generics ghc

我对GHC.Generics中的'通用表示类型' 感到困惑。我不明白这个数据类型是如何工作的。例如,元信息,newtype M1 i c f p M1 unM1 :: f p

M1

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

此外,任何有助于为初学者学习GHC Generics的书籍或论文都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

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

以下是我保留的类型同义词的简化参考列表,以便记住GHC.Generics中所有类型的含义。

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