dead-simple-json-0.1.2: src/Text/DeadSimpleJSON/Types.hs
{-# LANGUAGE Haskell2010,
DeriveDataTypeable #-}
{-# OPTIONS -Wall -O2 #-}
-- | The basic JSON data types.
module Text.DeadSimpleJSON.Types (
Value (..),
JSON (..)
) where
import Data.Data
import Data.Map (Map)
import Data.Vector (Vector)
-- | A top-level JSON object.
--
-- Merely a wrapper that ensures that no other 'Value's
-- but 'Array' and 'Object' reside at the top-level.
newtype JSON = JSON Value
deriving (Eq, Data, Typeable)
-- | A JSON value.
data Value
= String String
-- ^ A JSON String, represented as ordinary Haskell String.
| Number !Integer !Integer
-- ^ A JSON Number, represented by two 'Integer's in
-- exponontial form. @Number n e@ is the same as @{n}e{exp}@,
-- that is @n * 10 ^ e@. This allows for arbitrary precision
-- fixed point rationals. See 'Convert' for easy conversions.
| Object (Map String Value)
-- ^ A JSON Object, represented as 'Map'.
| Array (Vector Value)
-- ^ A JSON Array, represented as 'Vector' of Values.
| True
-- ^ True.
| False
-- ^ False.
| Null
-- ^ Null (void, unit, @()@).
deriving (Eq, Show, Read, Data, Typeable)