观澜Media

AI技术 · 深度资讯 · 前沿观察

组装记录时更喜欢使用 do 符号而不是应用运算符 (2024)

Haskell for all:在组装记录时,更喜..

Haskell for all:在组装记录时,更喜欢 do notation 而不是 Applicative 运算符 Haskell for all Monday, May 20, 2024 在组装记录时,更喜欢 do notation 而不是 Applicative 运算符 这是一篇简短的文章,解释了为什么在组装记录时应该更喜欢 do 表示法,而不是使用 Applicative 运算符(即 () / () )。

此建议既适用于实现 Monad 的类型构造函数(例如 IO ),也适用于实现 Applicative 但不实现 Monad 的类型构造函数(例如 optparse-applicative 包中的 Parser 类型构造函数)。

唯一的区别是,在后一种情况下,您需要启用 ApplicativeDo 语言扩展。

而不是这样做: data Person = Person { firstName :: String , lastName :: String } getPerson :: IO Person getPerson = Person getLine getLine … 你应该这样做: {-# LANGUAGE RecordWildCards #-} {-# OPTIONS_GHC -Werror=missing-fields #-} data Person = Person {firstName :: String , lastName :: String } getPerson :: IO Person getPerson = do firstName ( putStrLn “输入你的名字:” *> getLine ) ( putStrLn “输入你的姓氏:” *> getLine ) 表达式变得如此之大,以至于你最终不得不将其拆分为多行,但如果我们已经将其拆分为多行,那么为什么不使用 do 表示法呢。

getPerson :: IO Person getPerson = do putStrLn “输入你的名字:”firstName Person’ 和 ‘Person’ 预期:Bool -> String -> Person 实际:Bool -> String -> String -> Person • 可能原因:’Person’ 应用于太少的参数 在 ‘()’ 的第一个参数中,即 ‘Person’ 在 ‘()’ 的第一个参数中,即 ‘Person getLine’ 在表达式中: Person getLine getLine | | getPerson = Person 获取行^^^^^^ 示例。

}’ 在 ‘do’ 块的 stmt 中: return Person {。

来源:HackerNews New

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关于我们

观澜Media

AI技术 · 深度资讯 · 前沿观察。专注科技、AI、互联网领域的深度报道与前沿资讯。

搜索归档

Access over the years of investigative journalism and breaking reports