Haskell 笔记:data, type, newtype
新类型有自己的 data constructor(literals 可以看成特殊的 data constructor),由这一点来区分是否创建了新类型。
data
创建了新类型,可以有多个 data constructor。newtype
创建了新类型,只能有一个 data constructor,同时新类型的内存布局与原来的类型相同。type
没有创建新类型,只是建立了 alias,没有新的 data constructor。
type
常用于语义化类型,是业务逻辑层的概念。
type ID = Int
a = 1 :: ID
b = a + 2 -- legal
showID :: ID -> IO ()
showID x = print x -- legal, since Int has already been an instance of class Show
-- illegal, since Int has already been instantiated
instance Show ID where
-- ...
newtype
在编译期创建新类型,但差异在运行期被抹去。带有一个构造器。
newtype ID' = ID' Int
a = ID' 1
b = a + 2 -- illegal, since Int and ID' are totally different types
showID' :: ID' -> IO ()
showID' x = print x -- illegal, since ID' is not an instance of Show
-- either
showID' (ID' x) = print x
-- or
instance Show ID' where
show (ID' x) = show x
作者:hsfzxjy
链接:
许可:CC BY-NC-ND 4.0.
著作权归作者所有。本文不允许被用作商业用途,非商业转载请注明出处。
OOPS!
A comment box should be right here...But it was gone due to network issues :-(If you want to leave comments, make sure you have access to disqus.com.