gpt4 book ai didi

haskell - Strict Maybe 在数据定义中

转载 作者:行者123 更新时间:2023-12-04 01:12:35 26 4
gpt4 key购买 nike

我在 data 看到很多演讲/阅读博客文章,你应该有严格的字段。避免各种性能问题,例如:

data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
}

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

然而,如果我添加一个 Maybe field :
data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
, personAddress :: !(Maybe Address)
}

我在数据结构中引入了惰性,毕竟 Maybe是一个控制结构。不能将未经评估的 thunk 隐藏在后面 Just构造函数?

但是,有 strict Maybe strict 或通过 strict-base-types .但是根据反向依赖关系( strictstrict-base-types ),它们并没有被广泛使用。

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

最佳答案

使用严格的任一种/可能/元组类型的原因:

  • 如果您分析代码并注意到空间泄漏,则可能是堵住泄漏的方法
  • 严格数据类型被广泛认为对高性能代码很有用,even by the latest GHC 8.0 language extensions
  • 其他人也在这样做(那些严格的包可能不受欢迎,但它们存在是有原因的——你也可以争辩说,你需要这些严格包的应用程序可能不会上传到 Hackage)

  • 原因不:
  • Prelude 中没有,所以它是一个额外的包
  • 您可能没有编写高性能代码
  • 您的程序可能不会因为将爆炸向内推一级而变得更快
  • 如果您正在编写高性能代码,您可以 force evaluation on the thunk inside the Maybe manually anyway

  • 总的来说,我不认为教条会以一种或另一种方式发展。这只是一个方便的问题。

    关于haskell - Strict Maybe 在数据定义中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656816/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com