我找到了解释Haskell 之间newtype和之间差异的答案data.但如果我有以下类型的同义词:
type Point = (Int,Int)
Run Code Online (Sandbox Code Playgroud)
这会更有效,而不是使用:
data Point = Pt (Int,Int) ?
Run Code Online (Sandbox Code Playgroud)
使用type将更有效,因为它比data版本少一个间接.
请注意,两者的效率都低于:
data Point = Point {-# UNPACK #-}!Int {-# UNPACK #-}!Int
Run Code Online (Sandbox Code Playgroud)
正如你在前面关于数据表示的问题中所看到的那样.
是.
Pt构造增加了一个开销字(在GHC中)并且字段(即该对)被存储为指向一对的指针,添加一个额外的字,总共两个字开销(以及一个额外的间接到达值).
我建议你使用类型同义词,或者更好的是,定义
data Point = Pt {-# UNPACK #-} !Int {-# UNPACK #-} !Int
Run Code Online (Sandbox Code Playgroud)
这需要4个字以内
type Point = (Int, Int)
Run Code Online (Sandbox Code Playgroud)
并使用一个较少级别的间接(指针).