miso
Copyright(C) 2016-2026 David M. Johnson
LicenseBSD3-style (see the file LICENSE)
MaintainerDavid M. Johnson <code@dmj.io>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Miso.JSON

Description

A JSON library specialized to MisoString for performance. Largely based on microaeson.

Uses JS runtime primitives `JSON.stringify()` and `JSON.parse()`.

Synopsis

JSON

Core JSON types

data Value Source #

Instances

Instances details
IsString Value Source # 
Instance details

Defined in Miso.JSON.Types

Methods

fromString :: String -> Value #

Show Value Source # 
Instance details

Defined in Miso.JSON.Types

Methods

showsPrec :: Int -> Value -> ShowS #

show :: Value -> String #

showList :: [Value] -> ShowS #

Eq Value Source # 
Instance details

Defined in Miso.JSON.Types

Methods

(==) :: Value -> Value -> Bool #

(/=) :: Value -> Value -> Bool #

FromJSVal Value Source # 
Instance details

Defined in Miso.DSL

ToJSVal Value Source # 
Instance details

Defined in Miso.DSL

Methods

toJSVal :: Value -> IO JSVal Source #

FromJSON Value Source # 
Instance details

Defined in Miso.JSON

ToJSON Value Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Value -> Value Source #

FromMisoString Value Source # 
Instance details

Defined in Miso.JSON

ToMisoString Value Source # 
Instance details

Defined in Miso.JSON

data Result a Source #

Constructors

Success a 
Error MisoString 

Instances

Instances details
Alternative Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

empty :: Result a #

(<|>) :: Result a -> Result a -> Result a #

some :: Result a -> Result [a] #

many :: Result a -> Result [a] #

Applicative Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

pure :: a -> Result a #

(<*>) :: Result (a -> b) -> Result a -> Result b #

liftA2 :: (a -> b -> c) -> Result a -> Result b -> Result c #

(*>) :: Result a -> Result b -> Result b #

(<*) :: Result a -> Result b -> Result a #

Functor Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

fmap :: (a -> b) -> Result a -> Result b #

(<$) :: a -> Result b -> Result a #

Monad Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

(>>=) :: Result a -> (a -> Result b) -> Result b #

(>>) :: Result a -> Result b -> Result b #

return :: a -> Result a #

MonadPlus Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

mzero :: Result a #

mplus :: Result a -> Result a -> Result a #

MonadFail Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

fail :: String -> Result a #

Foldable Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

fold :: Monoid m => Result m -> m #

foldMap :: Monoid m => (a -> m) -> Result a -> m #

foldMap' :: Monoid m => (a -> m) -> Result a -> m #

foldr :: (a -> b -> b) -> b -> Result a -> b #

foldr' :: (a -> b -> b) -> b -> Result a -> b #

foldl :: (b -> a -> b) -> b -> Result a -> b #

foldl' :: (b -> a -> b) -> b -> Result a -> b #

foldr1 :: (a -> a -> a) -> Result a -> a #

foldl1 :: (a -> a -> a) -> Result a -> a #

toList :: Result a -> [a] #

null :: Result a -> Bool #

length :: Result a -> Int #

elem :: Eq a => a -> Result a -> Bool #

maximum :: Ord a => Result a -> a #

minimum :: Ord a => Result a -> a #

sum :: Num a => Result a -> a #

product :: Num a => Result a -> a #

Traversable Result Source # 
Instance details

Defined in Miso.JSON.Types

Methods

traverse :: Applicative f => (a -> f b) -> Result a -> f (Result b) #

sequenceA :: Applicative f => Result (f a) -> f (Result a) #

mapM :: Monad m => (a -> m b) -> Result a -> m (Result b) #

sequence :: Monad m => Result (m a) -> m (Result a) #

Monoid (Result a) Source # 
Instance details

Defined in Miso.JSON.Types

Methods

mempty :: Result a #

mappend :: Result a -> Result a -> Result a #

mconcat :: [Result a] -> Result a #

Semigroup (Result a) Source # 
Instance details

Defined in Miso.JSON.Types

Methods

(<>) :: Result a -> Result a -> Result a #

sconcat :: NonEmpty (Result a) -> Result a #

stimes :: Integral b => b -> Result a -> Result a #

Show a => Show (Result a) Source # 
Instance details

Defined in Miso.JSON.Types

Methods

showsPrec :: Int -> Result a -> ShowS #

show :: Result a -> String #

showList :: [Result a] -> ShowS #

Eq a => Eq (Result a) Source # 
Instance details

Defined in Miso.JSON.Types

Methods

(==) :: Result a -> Result a -> Bool #

(/=) :: Result a -> Result a -> Bool #

Constructors

(.=) :: ToJSON v => MisoString -> v -> Pair infixr 8 Source #

object :: [Pair] -> Value Source #

Create a Value from a list of name/value Pairs.

emptyArray :: Value Source #

The empty JSON Array (i.e. []).

emptyObject :: Value Source #

The empty JSON Object (i.e. {}).

Accessors

(.!=) :: Parser (Maybe a) -> a -> Parser a Source #

Encoding and decoding

encodePure :: ToJSON a => a -> MisoString Source #

Relies on the pure implementation of JSON parsing / serialization.

This can be used on the server or the client, it is more efficient to use encode on the client (since it relies on JSON.stringify()).

Prism-style parsers

Type conversion

class FromJSON a where Source #

Minimal complete definition

Nothing

Methods

parseJSON :: Value -> Parser a Source #

default parseJSON :: (Generic a, GFromJSON (Rep a)) => Value -> Parser a Source #

Instances

Instances details
FromJSON Int16 Source # 
Instance details

Defined in Miso.JSON

FromJSON Int32 Source # 
Instance details

Defined in Miso.JSON

FromJSON Int64 Source # 
Instance details

Defined in Miso.JSON

FromJSON Int8 Source # 
Instance details

Defined in Miso.JSON

FromJSON Word16 Source # 
Instance details

Defined in Miso.JSON

FromJSON Word32 Source # 
Instance details

Defined in Miso.JSON

FromJSON Word64 Source # 
Instance details

Defined in Miso.JSON

FromJSON Word8 Source # 
Instance details

Defined in Miso.JSON

FromJSON Ordering Source # 
Instance details

Defined in Miso.JSON

FromJSON Checked Source # 
Instance details

Defined in Miso.Event.Types

FromJSON KeyCode Source # 
Instance details

Defined in Miso.Event.Types

FromJSON PointerType Source # 
Instance details

Defined in Miso.Event.Types

FromJSON Value Source # 
Instance details

Defined in Miso.JSON

FromJSON MisoString Source # 
Instance details

Defined in Miso.JSON

FromJSON Text Source # 
Instance details

Defined in Miso.JSON

FromJSON Integer Source # 
Instance details

Defined in Miso.JSON

FromJSON Natural Source # 
Instance details

Defined in Miso.JSON

FromJSON String Source # 
Instance details

Defined in Miso.JSON

FromJSON () Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser () Source #

FromJSON Bool Source # 
Instance details

Defined in Miso.JSON

FromJSON Char Source # 
Instance details

Defined in Miso.JSON

FromJSON Double Source # 
Instance details

Defined in Miso.JSON

FromJSON Float Source # 
Instance details

Defined in Miso.JSON

FromJSON Int Source # 
Instance details

Defined in Miso.JSON

FromJSON Word Source # 
Instance details

Defined in Miso.JSON

FromJSON a => FromJSON (Maybe a) Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser (Maybe a) Source #

FromJSON a => FromJSON [a] Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser [a] Source #

FromJSON v => FromJSON (Map MisoString v) Source # 
Instance details

Defined in Miso.JSON

(FromJSON a, FromJSON b) => FromJSON (a, b) Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser (a, b) Source #

(FromJSON a, FromJSON b, FromJSON c) => FromJSON (a, b, c) Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser (a, b, c) Source #

(FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON (a, b, c, d) Source # 
Instance details

Defined in Miso.JSON

Methods

parseJSON :: Value -> Parser (a, b, c, d) Source #

newtype Parser a Source #

Constructors

Parser 

Instances

Instances details
Alternative Parser Source # 
Instance details

Defined in Miso.JSON

Methods

empty :: Parser a #

(<|>) :: Parser a -> Parser a -> Parser a #

some :: Parser a -> Parser [a] #

many :: Parser a -> Parser [a] #

Applicative Parser Source # 
Instance details

Defined in Miso.JSON

Methods

pure :: a -> Parser a #

(<*>) :: Parser (a -> b) -> Parser a -> Parser b #

liftA2 :: (a -> b -> c) -> Parser a -> Parser b -> Parser c #

(*>) :: Parser a -> Parser b -> Parser b #

(<*) :: Parser a -> Parser b -> Parser a #

Functor Parser Source # 
Instance details

Defined in Miso.JSON

Methods

fmap :: (a -> b) -> Parser a -> Parser b #

(<$) :: a -> Parser b -> Parser a #

Monad Parser Source # 
Instance details

Defined in Miso.JSON

Methods

(>>=) :: Parser a -> (a -> Parser b) -> Parser b #

(>>) :: Parser a -> Parser b -> Parser b #

return :: a -> Parser a #

MonadPlus Parser Source # 
Instance details

Defined in Miso.JSON

Methods

mzero :: Parser a #

mplus :: Parser a -> Parser a -> Parser a #

MonadFail Parser Source # 
Instance details

Defined in Miso.JSON

Methods

fail :: String -> Parser a #

parseMaybe :: (a -> Parser b) -> a -> Maybe b Source #

class ToJSON a where Source #

Minimal complete definition

Nothing

Methods

toJSON :: a -> Value Source #

default toJSON :: (Generic a, GToJSON (Rep a)) => a -> Value Source #

Instances

Instances details
ToJSON Int16 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Int16 -> Value Source #

ToJSON Int32 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Int32 -> Value Source #

ToJSON Int64 Source #

Possibly lossy due to conversion to Double

Instance details

Defined in Miso.JSON

Methods

toJSON :: Int64 -> Value Source #

ToJSON Int8 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Int8 -> Value Source #

ToJSON Word16 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Word16 -> Value Source #

ToJSON Word32 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Word32 -> Value Source #

ToJSON Word64 Source #

Possibly lossy due to conversion to Double

Instance details

Defined in Miso.JSON

Methods

toJSON :: Word64 -> Value Source #

ToJSON Word8 Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Word8 -> Value Source #

ToJSON Value Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Value -> Value Source #

ToJSON MisoString Source # 
Instance details

Defined in Miso.JSON

ToJSON Key Source # 
Instance details

Defined in Miso.Types

Methods

toJSON :: Key -> Value Source #

ToJSON Text Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Text -> Value Source #

ToJSON Integer Source #

Possibly lossy due to conversion to Double

Instance details

Defined in Miso.JSON

Methods

toJSON :: Integer -> Value Source #

ToJSON Natural Source #

Possibly lossy due to conversion to Double

Instance details

Defined in Miso.JSON

Methods

toJSON :: Natural -> Value Source #

ToJSON String Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: String -> Value Source #

ToJSON () Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: () -> Value Source #

ToJSON Bool Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Bool -> Value Source #

ToJSON Char Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Char -> Value Source #

ToJSON Double Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Double -> Value Source #

ToJSON Float Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Float -> Value Source #

ToJSON Int Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Int -> Value Source #

ToJSON Word Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Word -> Value Source #

ToJSON a => ToJSON (Maybe a) Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: Maybe a -> Value Source #

ToJSON a => ToJSON [a] Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: [a] -> Value Source #

ToJSON v => ToJSON (Map MisoString v) Source # 
Instance details

Defined in Miso.JSON

(ToJSON a, ToJSON b) => ToJSON (a, b) Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: (a, b) -> Value Source #

(ToJSON a, ToJSON b, ToJSON c) => ToJSON (a, b, c) Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: (a, b, c) -> Value Source #

(ToJSON a, ToJSON b, ToJSON c, ToJSON d) => ToJSON (a, b, c, d) Source # 
Instance details

Defined in Miso.JSON

Methods

toJSON :: (a, b, c, d) -> Value Source #

Misc.

parseEither :: (a -> Parser b) -> a -> Either MisoString b Source #

Pretty

newtype Config Source #

Constructors

Config 

Fields

Instances

Instances details
Show Config Source # 
Instance details

Defined in Miso.JSON

Eq Config Source # 
Instance details

Defined in Miso.JSON

Methods

(==) :: Config -> Config -> Bool #

(/=) :: Config -> Config -> Bool #

FFI

Options

data Options Source #

Constructors

Options 

Fields

Generics

class GToJSON (f :: Type -> Type) where Source #

Top-level generic encoding class.

Encoding rules match aeson's defaults:

  • All-nullary sum + allNullaryToStringTag: "C"
  • Single-constructor record: {"field1": v1, ...}
  • Single-constructor positional: v (1 field), [v1,v2,...] (n>1), [] (0)
  • Sum record constructor: {"tag": "C", "field1": v1, ...}
  • Sum nullary constructor: {"tag": "C"}
  • Sum positional constructor: {"tag": "C", "contents": v} or [...]

Methods

gToJSON :: Options -> f a -> Value Source #

Instances

Instances details
GToJSONRep f => GToJSON (D1 m f) Source # 
Instance details

Defined in Miso.JSON

Methods

gToJSON :: Options -> D1 m f a -> Value Source #

class GToFields (f :: Type -> Type) where Source #

Collect a constructor's fields into Fields.

Methods

gToFields :: Options -> f a -> Fields Source #

Instances

Instances details
GToFields (U1 :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> U1 a -> Fields Source #

GToFields (V1 :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> V1 a -> Fields Source #

(GToFields f, GToFields g) => GToFields (f :*: g) Source # 
Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> (f :*: g) a -> Fields Source #

ToJSON a => GToFields (K1 r a :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> K1 r a a0 -> Fields Source #

(Selector m, ToJSON a) => GToFields (S1 m (K1 r (Maybe a) :: Type -> Type)) Source #

Special GToFields instance for Maybe a fields that honours omitNothingFields: when the option is True and the value is Nothing, the field is omitted from the encoded object entirely.

Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> S1 m (K1 r (Maybe a) :: Type -> Type) a0 -> Fields Source #

(Selector m, GToFields f) => GToFields (S1 m f) Source # 
Instance details

Defined in Miso.JSON

Methods

gToFields :: Options -> S1 m f a -> Fields Source #

class GToJSONSum (f :: Type -> Type) where Source #

Encode sum constructors with a "tag" key.

Methods

gToJSONSum :: Options -> f a -> Value Source #

Instances

Instances details
(GToJSONSum f, GToJSONSum g) => GToJSONSum (f :+: g) Source # 
Instance details

Defined in Miso.JSON

Methods

gToJSONSum :: Options -> (f :+: g) a -> Value Source #

(Constructor m, GToFields f) => GToJSONSum (C1 m f) Source # 
Instance details

Defined in Miso.JSON

Methods

gToJSONSum :: Options -> C1 m f a -> Value Source #

class GAllNullary (f :: Type -> Type) where Source #

Determine at the type level whether every constructor of a sum type is nullary (has no fields). Used to implement allNullaryToStringTag.

Instances

Instances details
GAllNullary (U1 :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

(GAllNullary f, GAllNullary g) => GAllNullary (f :*: g) Source # 
Instance details

Defined in Miso.JSON

(GAllNullary f, GAllNullary g) => GAllNullary (f :+: g) Source # 
Instance details

Defined in Miso.JSON

GAllNullary f => GAllNullary (C1 m f) Source # 
Instance details

Defined in Miso.JSON

GAllNullary (K1 r a :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

GAllNullary f => GAllNullary (S1 m f) Source # 
Instance details

Defined in Miso.JSON

data Fields Source #

Intermediate representation of a constructor's fields after encoding.

RecordFields is produced when every selector has a name (record syntax); PositionalFields is produced for all other constructors.

Constructors

RecordFields [(MisoString, Value)]

Named fields (record constructor)

PositionalFields [Value]

Positional fields (non-record constructor)

class GFromJSON (f :: Type -> Type) where Source #

Top-level generic decoding class. Symmetric with GToJSON.

Decoding rules match aeson's defaults (see Options and defaultOptions).

Methods

gParseJSON :: Options -> Value -> Parser (f a) Source #

Instances

Instances details
GFromJSONRep f => GFromJSON (D1 m f) Source # 
Instance details

Defined in Miso.JSON

Methods

gParseJSON :: Options -> Value -> Parser (D1 m f a) Source #

class GFromFields (f :: Type -> Type) where Source #

Field-level decoder. Knows whether the constructor is a record and how many fields it has; can decode from a JSON Object (record mode) or a positional '[Value]' list.

Methods

gIsRecord :: Bool Source #

Is this a record constructor (all selectors have names)?

gFieldCount :: Int Source #

Number of fields.

gFromRecord :: Options -> Object -> Parser (f a) Source #

Decode from a JSON Object (record mode: look up by field name).

gFromPositional :: Options -> [Value] -> Parser (f a) Source #

Decode from a positional list of Value.

Instances

Instances details
GFromFields (U1 :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

GFromFields (V1 :: Type -> Type) Source # 
Instance details

Defined in Miso.JSON

(GFromFields f, GFromFields g) => GFromFields (f :*: g) Source # 
Instance details

Defined in Miso.JSON

(Selector m, FromJSON a) => GFromFields (S1 m (K1 r (Maybe a) :: Type -> Type)) Source #

Selector with a Maybe field: uses .:? so missing keys decode as Nothing.

Instance details

Defined in Miso.JSON

(Selector m, FromJSON a) => GFromFields (S1 m (K1 r a :: Type -> Type)) Source #

General selector.

Instance details

Defined in Miso.JSON

Methods

gIsRecord :: Bool Source #

gFieldCount :: Int Source #

gFromRecord :: Options -> Object -> Parser (S1 m (K1 r a :: Type -> Type) a0) Source #

gFromPositional :: Options -> [Value] -> Parser (S1 m (K1 r a :: Type -> Type) a0) Source #

class GFromJSONSum (f :: Type -> Type) where Source #

Parse sum constructors, trying each branch left-to-right.

Methods

gFromJSONSum :: Options -> Value -> Parser (f a) Source #

Instances

Instances details
(GFromJSONSum f, GFromJSONSum g) => GFromJSONSum (f :+: g) Source # 
Instance details

Defined in Miso.JSON

Methods

gFromJSONSum :: Options -> Value -> Parser ((f :+: g) a) Source #

(Constructor m, GFromFields f) => GFromJSONSum (C1 m f) Source # 
Instance details

Defined in Miso.JSON

Methods

gFromJSONSum :: Options -> Value -> Parser (C1 m f a) Source #

Modifiers

Orphan instances