

















新类型有自己的 data constructor(literals 可以看成特殊的 data constructor),由这一点来区分是否创建了新类型。
data 创建了新类型,可以有多个 data constructor。newtype 创建了新类型,只能有一个 data constructor,同时新类型的内存布局与原来的类型相同。type 没有创建新类型,只是建立了 alias,没有新的 data constructor。常用于语义化类型,是业务逻辑层的概念。
type ID = Int
a = 1 :: ID
b = a + 2
showID :: ID -> IO ()
showID x = print x
instance Show ID where
在编译期创建新类型,但差异在运行期被抹去。带有一个构造器。
newtype ID' = ID' Int
a = ID' 1
b = a + 2
showID' :: ID' -> IO ()
showID' x = print x
showID' (ID' x) = print x
instance Show ID' where
show (ID' x) = show x
作者:hsfzxjy
链接:
许可:CC BY-NC-ND 4.0.
著作权归作者所有。本文不允许被用作商业用途,非商业转载请注明出处。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。