@@ -0,0 +1,33 @@
1+{-# LANGUAGE OverloadedStrings #-}
3+import Control.Applicative ((<$>), (<*>))
4+import Control.Monad (mzero)
6+import qualified Data.Aeson.Types as T
7+import Data.Attoparsec (parse, Result(..))
8+import qualified Data.ByteString.Char8 as BS
9+import qualified Data.ByteString.Lazy.Char8 as BSL
13+ print $ parseFromString "{\"x\":3.0,\"y\":-1.0}"
14+ let reply = Coord 123.4 20
15+ putStrLn $ BSL.unpack (encode reply)
17+data Coord = Coord { x :: Double, y :: Double } deriving (Show)
19+instance ToJSON Coord where
20+ toJSON (Coord xV yV) = object ["x" .= xV, "y" .= yV]
22+instance FromJSON Coord where
23+ parseJSON (Object v) = Coord <$>
28+parseFromString :: String -> Maybe Coord
31+ in case parse json bs of
32+ Done _rest res -> T.parseMaybe parseJSON res