严格可能在数据定义中

pha*_*dej 12 haskell strictness

我看过很多会谈/阅读博客文章,你应该有严格的字段,data以避免各种性能问题,例如:

data Person = Person
    { personName     :: !Text
    , personBirthday :: !UTCTime
    }
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义.由于对该数据的函数操作是惰性的,因此不会牺牲可组合性.

但是,如果我添加一个Maybe字段:

data Person = Person
    { personName     :: !Text
    , personBirthday :: !UTCTime
    , personAddress  :: !(Maybe Address)
    }
Run Code Online (Sandbox Code Playgroud)

我将懒惰引入数据结构,毕竟Maybe是一个控制结构.是不是可以毫无价值地躲在Just构造函数后面?

但是,有严格Maybestrict或通过strict-base-types.但是根据反向依赖(strict,strict-base-types),它们并没有被广泛使用.

所以问题是:为什么Maybe在非控制数据定义中应该或不应该使用strict ?

hao*_*hao 2

使用严格的 Either/Maybe/Tuple 类型的原因:

\n\n
    \n
  • 如果您分析代码并发现空间泄漏,这可能是堵塞泄漏的方法

  • \n
  • 严格的数据类型被广泛认为对于高性能代码来说是有用的,即使是最新的 GHC 8.0 语言扩展也是如此

  • \n
  • 其他人也在这样做(那些严格的包可能不受欢迎,但它们存在是有原因的 \xe2\x80\x93 你也可以说,你需要这些严格的包的应用程序可能不会被上传哈奇)

  • \n
\n\n

不的原因:

\n\n\n\n

总的来说,我不认为存在任何一种教条。这只是一个方便的问题。

\n