gpt4 book ai didi

haskell - 当 Haskell 记录访问器以下划线开头时通常是什么意思?

转载 作者:行者123 更新时间:2023-12-03 09:08:27 26 4
gpt4 key购买 nike

HaskellNet 库中的一个示例:

data MailboxInfo = MboxInfo { _mailbox :: MailboxName
, _exists :: Integer
, _recent :: Integer
, _flags :: [Flag]
, _permanentFlags :: [Flag]
, _isWritable :: Bool
, _isFlagWritable :: Bool
, _uidNext :: UID
, _uidValidity :: UID
}
deriving (Show, Eq)

字段名称中的下划线是否意味着什么,如果不是编译器,那么至少根据 Haskell 约定?

最佳答案

通过类比下划线表示不相关的模式,例如fst (x, _) = x ,下划线前缀(在记录字段上或其他)用于指示标识符应该被任何阅读代码的人忽略,或者可能被编译器在某些类型的用户交互中忽略,即使它因某种原因被赋予了名称.

请注意,这不仅仅是一个约定,而是基于明确声明的 in the Haskell Report :

Underscore, "_", is treated as a lower-case letter, and can occur wherever a lower-case letter can. However, "_" all by itself is a reserved identifier, used as wild card in patterns. Compilers that offer warnings for unused identifiers are encouraged to suppress such warnings for identifiers beginning with underscore. This allows programmers to use "_foo" for a parameter that they expect to be unused.



一个示例是旨在供 Template Haskell 使用的定义,然后定义不带下划线的等效标识符,如基于记录字段生成镜头的常见示例(我猜这是您的示例正在执行的操作)。在这种情况下,标识符比实际定义更多地输入到 TH; TH 生成的代码实际上可能使用也可能不使用下划线前缀标识符。

但是,除了上述之外,下划线前缀与常规小写标识符没有任何不同。

关于haskell - 当 Haskell 记录访问器以下划线开头时通常是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746229/

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