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]