I commenti sono tutti corretti. Puoi utilizzare Hoogle per queste funzioni e trovare la corretta documentazione dell'eglefino, che mostra che questi operatori sono funzioni definite in una libreria e non parte integrante del linguaggio Haskell. In generale, una libreria .
viene utilizzata dalle librerie per definire le funzioni infette poiché molti altri simboli desiderabili non sono validi per le funzioni (ex :.
) o il carattere singolare è sintassi riservata in Haskell (ex =
, :
).
(.=)
viene utilizzato per aiutare a creare oggetti JSON mentre .:
è per l'analisi di JSON. Normalmente con Aeson si dispone di un one-to-one match tra qualche struttura dati e alcune serie di messaggi JSON, così per esempio:
{-# 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
Ora è possibile caricare questo modulo GHCi e giocare facilmente:
*Main> testJSON
Object fromList [("msg",String "Hello user3526171"),("msgId",Number 398242.0)]
*Main> testParse
Success (ServerMsg {msgId = 398242, msg = "Hello user3526171"})
fonte
2014-04-12 15:25:49
Sono funzioni della libreria 'aeson'. Vedi questo per maggiori dettagli: http://hackage.haskell.org/package/aeson-0.7.0.3/docs/Data-Aeson.html – Sibi
Hoogle sa. ['(.:)'] (http://www.haskell.org/hoogle/?hoogle=.%3A+%2Baeson) e ['(. =)'] (http://www.haskell.org/ hoogle /? hoogle =.% 3D +% 2Baeson) – hammar
In generale, gli operatori non sono realmente "sintassi" in Haskell. Con pochissime eccezioni, sono appena definiti nelle librerie. – kosmikus