----------------------------------------------------------------------------- -- | -- Module : Text.JSON.ToJSON -- Copyright : (c) Scrive 2011 -- License : BSD-style (see the LICENSE file in the distribution) -- -- Maintainer : mariusz@scrive.com -- Stability : development -- Portability : portable -- -- Unifing some structures so they can be serialized to JSValue -- module Text.JSON.ToJSValue (ToJSValue(..))where import Data.Int import Data.Map as M import Data.Word import Text.JSON class ToJSValue a where toJSValue :: a -> JSValue instance ToJSValue JSValue where toJSValue = id instance ToJSValue Bool where toJSValue = JSBool instance {-# OVERLAPPING #-} ToJSValue String where toJSValue = JSString . toJSString instance ToJSValue Integer where toJSValue = JSRational False . toRational instance ToJSValue Int where toJSValue = JSRational False . toRational instance ToJSValue Int8 where toJSValue = JSRational False . toRational instance ToJSValue Int16 where toJSValue = JSRational False . toRational instance ToJSValue Int32 where toJSValue = JSRational False . toRational instance ToJSValue Int64 where toJSValue = JSRational False . toRational instance ToJSValue Word where toJSValue = JSRational False . toRational instance ToJSValue Word8 where toJSValue = JSRational False . toRational instance ToJSValue Word16 where toJSValue = JSRational False . toRational instance ToJSValue Word32 where toJSValue = JSRational False . toRational instance ToJSValue Word64 where toJSValue = JSRational False . toRational instance ToJSValue Double where toJSValue = JSRational False . toRational instance ToJSValue Float where toJSValue = JSRational True . toRational instance ToJSValue a => ToJSValue [a] where toJSValue = JSArray . fmap toJSValue instance ToJSValue a => ToJSValue (M.Map String a) where toJSValue = JSObject . toJSObject . M.toList . fmap toJSValue instance ToJSValue a => ToJSValue (Maybe a) where toJSValue = maybe JSNull toJSValue instance (ToJSValue a, ToJSValue b) => ToJSValue (a,b) where toJSValue (a,b) = JSArray [toJSValue a, toJSValue b]