gpt4 book ai didi

haskell - 构造函数中的不可见/隐藏字段

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

我正在努力通过Learn You a Haskell for Great Good ,我已达到 section 8.4, "Derived Instances" 。在本节中,有以下数据类型声明:

data Person = Person { firstName :: String  
, lastName :: String
, age :: Int
} deriving (Eq)

尝试时

*Main> mikeD == Person {firstName = "Michael", lastname = "Diamond", age = 43}

我收到以下错误:

<interactive>:55:41:
`lastname' is not a (visible) field of constructor `Person'

通过将 lastname 更正为 lastName,我删除了错误。

问题:

在错误消息中单词(可见)向我暗示一定有可能将字段声明为隐藏/不可见。这是否正确?如果是,如何将构造函数中的字段声明为隐藏字段,以及需要声明隐藏字段的一般情况是什么?如果您可以通过给出一个简单的使用示例来解释这一点,我们将不胜感激。

注意:我在 LYAH 中找不到任何有关隐藏或不可见字段的引用/详细信息。

最佳答案

可以隐藏记录的字段或任何数据类型的构造函数,尽管不是在声明站点。这个想法是简单地选择不从模块中导出该构造函数和/或字段,如下所示:

module MyModule (DT(C1, int, mStr)) where

data DT = C1 -- visible
{
int :: Int, -- visible
str :: String -- hidden
}
| C2 -- hidden
{
dbl :: Double, -- hidden
mStr :: Maybe String -- visible
}

请注意,MyModule 中的所有内容仍然可以访问构造函数和所有四个字段,但在导入 MyModule 的其他模块中,只有导出的内容可见。

关于haskell - 构造函数中的不可见/隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607576/

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