Các ý kiến đều đúng. Bạn có thể Hoogle cho các chức năng này và tìm tài liệu haddock chính xác, cho thấy các toán tử này là các hàm được định nghĩa trong một thư viện và không phải là một phần không thể thiếu của ngôn ngữ Haskell. Nói chung, một bắt đầu .
được sử dụng bởi các thư viện để xác định các hàm infix vì nhiều biểu tượng mong muốn khác không hợp lệ cho các hàm (ví dụ: :.
) hoặc ký tự số ít được đặt trước trong Haskell (ví dụ: =
, :
).
(.=)
được sử dụng để giúp tạo đối tượng JSON trong khi .:
là để phân tích cú pháp JSON. Thông thường với Aeson bạn có một trận đấu một-một giữa một số cấu trúc dữ liệu và một số thiết lập các thông điệp JSON, vì vậy ví dụ:
{-# 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
Bây giờ bạn có thể tải module này trong GHCi và chơi xung quanh một cách dễ dàng:
*Main> testJSON
Object fromList [("msg",String "Hello user3526171"),("msgId",Number 398242.0)]
*Main> testParse
Success (ServerMsg {msgId = 398242, msg = "Hello user3526171"})
Nguồn
2014-04-12 15:25:49
Chúng là các hàm từ thư viện 'aeson'. Xem phần này để biết thêm chi tiết: http://hackage.haskell.org/package/aeson-0.7.0.3/docs/Data-Aeson.html – Sibi
Hoogle biết. ['(.:)'] (http://www.haskell.org/hoogle/?hoogle=.%3A+%2Baeson) và ['(. =)'] (http://www.haskell.org/ hoogle /? hoogle =.% 3D +% 2Baeson) – hammar
Nói chung, các toán tử không thực sự là "cú pháp" trong Haskell. Với rất ít ngoại lệ, chúng chỉ được định nghĩa trong thư viện. – kosmikus