{-# LANGUAGE OverloadedStrings #-} module Yesod.Transloadit.OrderedJSON ( encode, is, obj, str ) where import Data.Monoid (mconcat) import Data.Text type KeyValue = (Text, OrderedValue) data OrderedValue = Object [KeyValue] | String Text deriving (Eq, Show) quote :: Text quote = "\"" lbrace :: Text lbrace = "{" rbrace :: Text rbrace = "}" colon :: Text colon = ":" comma :: Text comma = "," encodeKV :: KeyValue -> Text encodeKV (t, v) = mconcat [quote, t, quote, colon, encode v] encode :: OrderedValue -> Text encode (String t) = mconcat [quote, t, quote] encode (Object kvs) = mconcat [lbrace, intercalate comma $ fmap encodeKV kvs, rbrace] is :: Text -> OrderedValue -> KeyValue is = (,) obj :: [KeyValue] -> OrderedValue obj = Object str :: Text -> OrderedValue str = String