haskell中的类型与数据性能

vis*_*vis 5 haskell types

我找到了解释Haskell 之间newtype和之间差异的答案data.但如果我有以下类型的同义词:

type Point = (Int,Int)
Run Code Online (Sandbox Code Playgroud)

这会更有效,而不是使用:

data Point = Pt (Int,Int) ?
Run Code Online (Sandbox Code Playgroud)

Don*_*art 7

使用type将更有效,因为它比data版本少一个间接.

请注意,两者的效率都低于:

data Point = Point {-# UNPACK #-}!Int {-# UNPACK #-}!Int
Run Code Online (Sandbox Code Playgroud)

正如你在前面关于数据表示的问题中所看到的那样.


tib*_*bbe 5

是.

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)

并使用一个较少级别的间接(指针).