gpt4 book ai didi

haskell - Haskell 中的点等于和点冒号语法是什么意思?

转载 作者:行者123 更新时间:2023-12-01 19:23:34 24 4
gpt4 key购买 nike

在此取自 Aeson JSON 库的示例中,点等于 (.=) 和点冒号 (.:) 语法有何含义?

instance ToJSON Coord where
toJSON (Coord xV yV) = object [ "x" .= xV,
"y" .= yV ]

-- A FromJSON instance allows us to decode a value from JSON. This
-- should match the format used by the ToJSON instance.

instance FromJSON Coord where
parseJSON (Object v) = Coord <$>
v .: "x" <*>
v .: "y"
parseJSON _ = empty

Github 上的完整示例:https://github.com/bos/aeson/blob/master/examples/Simplest.hs

最佳答案

评论全部正确。您可以 Hoogle 查找这些函数并找到正确的 haddock 文档,该文档显示这些运算符是在库中定义的函数,而不是 Haskell 语言的组成部分。一般来说,库使用起始 . 来定义中缀函数,因为许多其他所需的符号对于函数无效(例如 :.),或者单数字符是保留语法在 Haskell 中(例如 =:)。

(.=) 用于帮助创建 JSON 对象,而 .: 用于解析 JSON。通常,使用 Aeson,某些数据结构和某些 JSON 消息集之间会存在一对一匹配,例如:

{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Data.Text
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
data ServerMsg = ServerMsg.
{ msgId :: Int
, msg :: Text
} deriving (Show)
instance ToJSON ServerMsg where
toJSON d = object [ "msgId" .= msgId d
, "msg" .= msg d
]
instance FromJSON ServerMsg where
parseJSON (Object o) =
ServerMsg <$> o .: "msgId" <*> o .: "msg"
parseJSON _ = mzero


testJSON :: Value
testJSON = toJSON (ServerMsg 398242 "Hello user3526171")

testParse :: Result ServerMsg
testParse = fromJSON testJSON

现在您可以在 GHCi 中加载此模块并轻松使用:

*Main> testJSON
Object fromList [("msg",String "Hello user3526171"),("msgId",Number 398242.0)]
*Main> testParse
Success (ServerMsg {msgId = 398242, msg = "Hello user3526171"})

关于haskell - Haskell 中的点等于和点冒号语法是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027412/

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