我对GHC.Generics中的'通用表示类型' 感到困惑。我不明白这个数据类型是如何工作的。例如,元信息,newtype M1 i c f p
M1
unM1 :: f p
:
M1
为什么edoes类型{{1}}有四个类型变量:i,c,f和p。我的意思是,为什么 4 。它有一些特殊含义吗?
此外,任何有助于为初学者学习GHC Generics的书籍或论文都将受到赞赏。
答案 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