gpt4 book ai didi

haskell - 将空构造函数与代数数据类型一起使用,而不是用 Maybe? 包装

转载 作者:行者123 更新时间:2023-12-02 09:31:56 25 4
gpt4 key购买 nike

我在代码中做了这样的事情:

data MyType = Cons1 a b
data OtherType = OtherType
{ val1 :: Int
, val2 :: String
, val3 :: Maybe MyType
}

我想知道将代码更改为这样是否会更整洁/更简单以及优点/缺点是什么:

data MyType = Cons1 a b | Missing
data OtherType = OtherType
{ val1 :: Int
, val2 :: String
, val3 :: MyType
}

我正在做的是将文件中的行读入 [OtherType],每行有 4 列,其中第 3 列和第 4 列用于创建 val3::MyType。目前,我正在使用 readMaybe 读取 a 和 b,然后将它们传递给一个函数,如果它们中的任何一个是 Nothing,则返回 Nothing;如果它们是 Just a 和 Just b,则返回 Just MyType。我想我可以将其更改为返回 Missing,从而去除一层包装。

最佳答案

只有在所有 MyType 值都可能存在 Missing 的情况下才有意义时,才应将 Missing 构造函数添加到 MyType 。您必须在处理 MyType 值的所有函数中处理 Missing 问题。如果其中大多数不是全部(抛出错误或以其他方式失败),那么显然 Missing 不属于 MyType,您应该只使用 Maybe MyType 相反。

简单地说:如果类型固有可选性,则将其编码到类型中。否则,请将其分开。

关于haskell - 将空构造函数与代数数据类型一起使用,而不是用 Maybe? 包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054448/

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