| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Web.Spock.Api
Synopsis
- data Endpoint (p :: [Type]) (i :: Maybe Type) o where
- MethodGet :: forall o (p :: [Type]). (ToJSON o, FromJSON o) => Path p 'Open -> Endpoint p ('Nothing :: Maybe Type) o
- MethodPost :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o
- MethodPut :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o
- MethodPatch :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o
- MethodDelete :: forall o (p :: [Type]). (ToJSON o, FromJSON o) => Path p 'Open -> Endpoint p ('Nothing :: Maybe Type) o
- data Proxy (t :: k) = Proxy
- type family MaybeToList (a :: Maybe Type) :: [Type] where ...
- (<//>) :: forall (as :: [Type]) (bs :: [Type]) (ps :: PathState). Path as 'Open -> Path bs ps -> Path (Append as bs) ps
- (<.>) :: forall (as :: [Type]) (bs :: [Type]). Path as 'Open -> Path bs 'Open -> Path (Append as bs) 'Open
- var :: (Typeable a, FromHttpApiData a) => Path '[a] 'Open
- trailingSlash :: forall (as :: [Type]). Path as 'Open -> Path as 'Open
- data Path (as :: [Type]) (pathState :: PathState) where
- Empty :: Path ('[] :: [Type]) 'Open
- StaticCons :: forall (as :: [Type]) (pathState :: PathState). Text -> Path as pathState -> Path as pathState
- VarCons :: forall a (as1 :: [Type]) (pathState :: PathState). (FromHttpApiData a, Typeable a) => Path as1 pathState -> Path (a ': as1) pathState
- Wildcard :: forall (as1 :: [Type]). Path as1 'Open -> Path (Text ': as1) 'Closed
- WithExtension :: forall (as1 :: [Type]) (bs :: [Type]). Path as1 'Open -> Path bs 'Open -> Path (Append as1 bs) 'Open
- AppendPath :: forall (as1 :: [Type]) (bs :: [Type]) (pathState :: PathState). Path as1 'Open -> Path bs pathState -> Path (Append as1 bs) pathState
- data PathState
- renderRoute :: forall (as :: [Type]). AllHave ToHttpApiData as => Path as 'Open -> HVect as -> Text
- renderRouteWith :: forall (as :: [Type]). AllHave ToHttpApiData as => SlashPolicy -> Path as 'Open -> HVect as -> Text
- renderRouteEncoded :: forall (as :: [Type]). AllHave ToHttpApiData as => Path as 'Open -> HVect as -> Text
- renderRouteEncodedWith :: forall (as :: [Type]). AllHave ToHttpApiData as => SlashPolicy -> Path as 'Open -> HVect as -> Text
- data SlashPolicy
- class Generic a
- class ToJSON a
- class FromJSON a
- class NFData a
- class Typeable (a :: k)
Documentation
data Endpoint (p :: [Type]) (i :: Maybe Type) o where Source #
Describes an endpoint with path parameters, an optional json body and a json response
Constructors
| MethodGet :: forall o (p :: [Type]). (ToJSON o, FromJSON o) => Path p 'Open -> Endpoint p ('Nothing :: Maybe Type) o | |
| MethodPost :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o | |
| MethodPut :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o | |
| MethodPatch :: forall i1 o (p :: [Type]). (ToJSON i1, FromJSON i1, ToJSON o, FromJSON o) => Proxy (i1 -> o) -> Path p 'Open -> Endpoint p ('Just i1) o | |
| MethodDelete :: forall o (p :: [Type]). (ToJSON o, FromJSON o) => Path p 'Open -> Endpoint p ('Nothing :: Maybe Type) o |
Proxy is a type that holds no data, but has a phantom parameter of
arbitrary type (or even kind). Its use is to provide type information, even
though there is no value available of that type (or it may be too costly to
create one).
Historically, is a safer alternative to the
Proxy :: Proxy a idiom.undefined :: a
>>>Proxy :: Proxy (Void, Int -> Int)Proxy
Proxy can even hold types of higher kinds,
>>>Proxy :: Proxy EitherProxy
>>>Proxy :: Proxy FunctorProxy
>>>Proxy :: Proxy complicatedStructureProxy
Constructors
| Proxy |
Instances
| Generic1 (Proxy :: k -> Type) | |
Defined in GHC.Internal.Generics | |
| Eq1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Functor.Classes | |
| Ord1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Functor.Classes | |
| Read1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Functor.Classes | |
| Show1 (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
| Contravariant (Proxy :: Type -> Type) | |
Defined in Data.Functor.Contravariant | |
| NFData1 (Proxy :: Type -> Type) | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods liftRnf :: (a -> ()) -> Proxy a -> () | |
| Alternative (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
| Applicative (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
| Functor (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Defined in GHC.Internal.Data.Proxy | |
| Monad (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
| MonadPlus (Proxy :: Type -> Type) | Since: base-4.9.0.0 |
Defined in GHC.Internal.Data.Proxy | |
| Foldable (Proxy :: Type -> Type) | Since: base-4.7.0.0 |
Defined in GHC.Internal.Data.Foldable Methods fold :: Monoid m => Proxy m -> m foldMap :: Monoid m => (a -> m) -> Proxy a -> m foldMap' :: Monoid m => (a -> m) -> Proxy a -> m foldr :: (a -> b -> b) -> b -> Proxy a -> b foldr' :: (a -> b -> b) -> b -> Proxy a -> b foldl :: (b -> a -> b) -> b -> Proxy a -> b foldl' :: (b -> a -> b) -> b -> Proxy a -> b foldr1 :: (a -> a -> a) -> Proxy a -> a foldl1 :: (a -> a -> a) -> Proxy a -> a toList :: Proxy a -> [a] elem :: Eq a => a -> Proxy a -> Bool maximum :: Ord a => Proxy a -> a | |
| FromJSON1 (Proxy :: Type -> Type) | |
| ToJSON1 (Proxy :: Type -> Type) | |
Defined in Data.Aeson.Types.ToJSON Methods liftToJSON :: (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> Proxy a -> Value liftToJSONList :: (a -> Bool) -> (a -> Value) -> ([a] -> Value) -> [Proxy a] -> Value liftToEncoding :: (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> Proxy a -> Encoding liftToEncodingList :: (a -> Bool) -> (a -> Encoding) -> ([a] -> Encoding) -> [Proxy a] -> Encoding | |
| NFData (Proxy a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Proxy a -> () | |
| Monoid (Proxy s) | Since: base-4.7.0.0 |
| Semigroup (Proxy s) | Since: base-4.9.0.0 |
| Eq (Proxy s) | Since: base-4.7.0.0 |
| Ord (Proxy s) | Since: base-4.7.0.0 |
| Bounded (Proxy t) | Since: base-4.7.0.0 |
Defined in GHC.Internal.Data.Proxy | |
| Enum (Proxy s) | Since: base-4.7.0.0 |
| Generic (Proxy t) # | |
Defined in GHC.Internal.Generics | |
| Ix (Proxy s) | Since: base-4.7.0.0 |
Defined in GHC.Internal.Data.Proxy | |
| Read (Proxy t) | Since: base-4.7.0.0 |
| Show (Proxy s) | Since: base-4.7.0.0 |
| FromJSON (Proxy a) # | |
| ToJSON (Proxy a) # | |
| type Rep1 (Proxy :: k -> Type) # | Since: base-4.6.0.0 |
| type Rep (Proxy t) # | Since: base-4.6.0.0 |
type family MaybeToList (a :: Maybe Type) :: [Type] where ... #
Equations
| MaybeToList ('Just r) = '[r] | |
| MaybeToList ('Nothing :: Maybe Type) = '[] :: [Type] |
(<//>) :: forall (as :: [Type]) (bs :: [Type]) (ps :: PathState). Path as 'Open -> Path bs ps -> Path (Append as bs) ps Source #
(<.>) :: forall (as :: [Type]) (bs :: [Type]). Path as 'Open -> Path bs 'Open -> Path (Append as bs) 'Open infixl 8 #
Join the last segment on the left and the first on the right with a dot.
Both sides may contain typed captures: var . "txt" or var . var.
Matching tries the rightmost dot first and accepts the first split whose
typed parsers and literals succeed. Use a custom capture type to restrict
extensions; a Text capture accepts any text, including an empty extension.
Static routes take precedence over extensions, then plain captures and
wildcards. More literal characters give an extension pattern priority.
trailingSlash :: forall (as :: [Type]). Path as 'Open -> Path as 'Open #
Require a trailing slash in strict routing, including after a capture. Root remains root, and a path already ending in a slash is unchanged.
data Path (as :: [Type]) (pathState :: PathState) where #
Constructors
| Empty :: Path ('[] :: [Type]) 'Open | |
| StaticCons :: forall (as :: [Type]) (pathState :: PathState). Text -> Path as pathState -> Path as pathState | |
| VarCons :: forall a (as1 :: [Type]) (pathState :: PathState). (FromHttpApiData a, Typeable a) => Path as1 pathState -> Path (a ': as1) pathState | |
| Wildcard :: forall (as1 :: [Type]). Path as1 'Open -> Path (Text ': as1) 'Closed | |
| WithExtension :: forall (as1 :: [Type]) (bs :: [Type]). Path as1 'Open -> Path bs 'Open -> Path (Append as1 bs) 'Open | |
| AppendPath :: forall (as1 :: [Type]) (bs :: [Type]) (pathState :: PathState). Path as1 'Open -> Path bs pathState -> Path (Append as1 bs) pathState |
renderRoute :: forall (as :: [Type]). AllHave ToHttpApiData as => Path as 'Open -> HVect as -> Text #
renderRouteWith :: forall (as :: [Type]). AllHave ToHttpApiData as => SlashPolicy -> Path as 'Open -> HVect as -> Text #
Render with the same empty-segment policy used by the registry. Values are
URL pieces, as with renderRoute; this function does not percent-encode them.
renderRouteEncoded :: forall (as :: [Type]). AllHave ToHttpApiData as => Path as 'Open -> HVect as -> Text #
Percent-encode each complete segment after joining extension pieces.
This protects slashes, spaces, percent signs, query delimiters and Unicode
in captures. The unencoded renderRoute remains available for compatibility.
renderRouteEncodedWith :: forall (as :: [Type]). AllHave ToHttpApiData as => SlashPolicy -> Path as 'Open -> HVect as -> Text #
data SlashPolicy #
How empty path segments are treated. The compatibility default ignores every empty segment. Strict policies preserve internal and trailing slashes. Redirects are performed by the HTTP adapter, using strict registry matching.
Constructors
| IgnoreSlashes | |
| StrictSlashes | |
| RedirectTrailingSlashes |
Instances
| Eq SlashPolicy | |
Defined in Web.Routing.SafeRouting | |
| Read SlashPolicy | |
Defined in Web.Routing.SafeRouting Methods readsPrec :: Int -> ReadS SlashPolicy readList :: ReadS [SlashPolicy] readPrec :: ReadPrec SlashPolicy readListPrec :: ReadPrec [SlashPolicy] | |
| Show SlashPolicy | |
Defined in Web.Routing.SafeRouting Methods showsPrec :: Int -> SlashPolicy -> ShowS show :: SlashPolicy -> String showList :: [SlashPolicy] -> ShowS | |
Representable types of kind *.
This class is derivable in GHC with the DeriveGeneric flag on.
A Generic instance must satisfy the following laws:
from.to≡idto.from≡id
Instances
A type that can be converted to JSON.
Instances in general must specify toJSON and should (but don't need
to) specify toEncoding.
An example type and instance:
-- Allow ourselves to writeTextliterals. {-# LANGUAGE OverloadedStrings #-} data Coord = Coord { x :: Double, y :: Double } instanceToJSONCoord wheretoJSON(Coord x y) =object["x".=x, "y".=y]toEncoding(Coord x y) =pairs("x".=x<>"y".=y)
Instead of manually writing your ToJSON instance, there are two options
to do it automatically:
- Data.Aeson.TH provides Template Haskell functions which will derive an instance at compile time. The generated instance is optimized for your type so it will probably be more efficient than the following option.
- The compiler can provide a default generic implementation for
toJSON.
To use the second, simply add a deriving clause to your
datatype and declare a GenericToJSON instance. If you require nothing other than
defaultOptions, it is sufficient to write (and this is the only
alternative where the default toJSON implementation is sufficient):
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
data Coord = Coord { x :: Double, y :: Double } deriving Generic
instance ToJSON Coord where
toEncoding = genericToEncoding defaultOptions
or more conveniently using the DerivingVia extension
deriving viaGenericallyCoord instanceToJSONCoord
If on the other hand you wish to customize the generic decoding, you have to implement both methods:
customOptions =defaultOptions{fieldLabelModifier=maptoUpper} instanceToJSONCoord wheretoJSON=genericToJSONcustomOptionstoEncoding=genericToEncodingcustomOptions
Previous versions of this library only had the toJSON method. Adding
toEncoding had two reasons:
toEncodingis more efficient for the common case that the output oftoJSONis directly serialized to aByteString. Further, expressing either method in terms of the other would be non-optimal.- The choice of defaults allows a smooth transition for existing users:
Existing instances that do not define
toEncodingstill compile and have the correct semantics. This is ensured by making the default implementation oftoEncodingusetoJSON. This produces correct results, but since it performs an intermediate conversion to aValue, it will be less efficient than directly emitting anEncoding. (this also means that specifying nothing more thaninstance ToJSON Coordwould be sufficient as a generically decoding instance, but there probably exists no good reason to not specifytoEncodingin new instances.)
Instances
| ToJSON IntSet # | |
| ToJSON UUID # | |
| ToJSON Void # | |
| ToJSON All # | Since: aeson-2.2.3.0 |
| ToJSON Any # | Since: aeson-2.2.3.0 |
| ToJSON Version # | |
| ToJSON CTime # | |
| ToJSON Int16 # | |
| ToJSON Int32 # | |
| ToJSON Int64 # | |
| ToJSON Int8 # | |
| ToJSON Ordering # | |
| ToJSON Word16 # | |
| ToJSON Word32 # | |
| ToJSON Word64 # | |
| ToJSON Word8 # | |
| ToJSON URI # | Since: aeson-2.2.0.0 |
| ToJSON Scientific # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: Scientific -> Value toEncoding :: Scientific -> Encoding toJSONList :: [Scientific] -> Value toEncodingList :: [Scientific] -> Encoding omitField :: Scientific -> Bool | |
| ToJSON Key # | |
| ToJSON DotNetTime # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: DotNetTime -> Value toEncoding :: DotNetTime -> Encoding toJSONList :: [DotNetTime] -> Value toEncodingList :: [DotNetTime] -> Encoding omitField :: DotNetTime -> Bool | |
| ToJSON Value # | |
| ToJSON CalendarDiffDays # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: CalendarDiffDays -> Value toEncoding :: CalendarDiffDays -> Encoding toJSONList :: [CalendarDiffDays] -> Value toEncodingList :: [CalendarDiffDays] -> Encoding omitField :: CalendarDiffDays -> Bool | |
| ToJSON Day # | |
| ToJSON Month # | |
| ToJSON Quarter # | |
| ToJSON QuarterOfYear # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: QuarterOfYear -> Value toEncoding :: QuarterOfYear -> Encoding toJSONList :: [QuarterOfYear] -> Value toEncodingList :: [QuarterOfYear] -> Encoding omitField :: QuarterOfYear -> Bool | |
| ToJSON DayOfWeek # | |
| ToJSON DiffTime # | |
| ToJSON NominalDiffTime # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: NominalDiffTime -> Value toEncoding :: NominalDiffTime -> Encoding toJSONList :: [NominalDiffTime] -> Value toEncodingList :: [NominalDiffTime] -> Encoding omitField :: NominalDiffTime -> Bool | |
| ToJSON SystemTime # | Encoded as number |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: SystemTime -> Value toEncoding :: SystemTime -> Encoding toJSONList :: [SystemTime] -> Value toEncodingList :: [SystemTime] -> Encoding omitField :: SystemTime -> Bool | |
| ToJSON UTCTime # | |
| ToJSON CalendarDiffTime # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: CalendarDiffTime -> Value toEncoding :: CalendarDiffTime -> Encoding toJSONList :: [CalendarDiffTime] -> Value toEncodingList :: [CalendarDiffTime] -> Encoding omitField :: CalendarDiffTime -> Bool | |
| ToJSON LocalTime # | |
| ToJSON TimeOfDay # | |
| ToJSON ZonedTime # | |
| ToJSON Text # | |
| ToJSON Text # | |
| ToJSON ShortText # | Since: aeson-2.0.2.0 |
| ToJSON Integer # | |
| ToJSON Natural # | |
| ToJSON () # | |
| ToJSON Bool # | |
| ToJSON Char # | |
| ToJSON Double # | |
| ToJSON Float # | |
| ToJSON Int # | |
| ToJSON Word # | |
| ToJSON a => ToJSON (First a) # | |
| ToJSON a => ToJSON (Last a) # | |
| ToJSON a => ToJSON (Max a) # | |
| ToJSON a => ToJSON (Min a) # | |
| ToJSON a => ToJSON (WrappedMonoid a) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: WrappedMonoid a -> Value toEncoding :: WrappedMonoid a -> Encoding toJSONList :: [WrappedMonoid a] -> Value toEncodingList :: [WrappedMonoid a] -> Encoding omitField :: WrappedMonoid a -> Bool | |
| ToJSON a => ToJSON (IntMap a) # | |
| ToJSON a => ToJSON (Seq a) # | |
| ToJSON a => ToJSON (Set a) # | |
| ToJSON v => ToJSON (Tree v) # | |
| ToJSON a => ToJSON (DNonEmpty a) # | Since: aeson-1.5.3.0 |
| ToJSON a => ToJSON (DList a) # | |
| ToJSON1 f => ToJSON (Fix f) # | Since: aeson-1.5.3.0 |
| (ToJSON1 f, Functor f) => ToJSON (Mu f) # | Since: aeson-1.5.3.0 |
| (ToJSON1 f, Functor f) => ToJSON (Nu f) # | Since: aeson-1.5.3.0 |
| ToJSON a => ToJSON (NonEmpty a) # | |
| ToJSON a => ToJSON (Identity a) # | |
| ToJSON a => ToJSON (First a) # | |
| ToJSON a => ToJSON (Last a) # | |
| ToJSON a => ToJSON (Down a) # | Since: aeson-2.2.0.0 |
| ToJSON a => ToJSON (Dual a) # | |
| ToJSON a => ToJSON (Product a) # | Since: aeson-2.2.3.0 |
| ToJSON a => ToJSON (Sum a) # | Since: aeson-2.2.3.0 |
| (Generic a, GToJSON' Value Zero (Rep a), GToJSON' Encoding Zero (Rep a)) => ToJSON (Generically a) # | Since: aeson-2.1.0.0 |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: Generically a -> Value toEncoding :: Generically a -> Encoding toJSONList :: [Generically a] -> Value toEncodingList :: [Generically a] -> Encoding omitField :: Generically a -> Bool | |
| (ToJSON a, Integral a) => ToJSON (Ratio a) # | |
| ToJSON a => ToJSON (HashSet a) # | |
| ToJSON a => ToJSON (Array a) # | |
| (Prim a, ToJSON a) => ToJSON (PrimArray a) # | |
| ToJSON a => ToJSON (SmallArray a) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: SmallArray a -> Value toEncoding :: SmallArray a -> Encoding toJSONList :: [SmallArray a] -> Value toEncodingList :: [SmallArray a] -> Encoding omitField :: SmallArray a -> Bool | |
| ToJSON v => ToJSON (KeyMap v) # | |
| ToJSON a => ToJSON (Maybe a) # | Since: aeson-1.5.3.0 |
| ToJSON a => ToJSON (Vector a) # | |
| (Prim a, ToJSON a) => ToJSON (Vector a) # | |
| (Storable a, ToJSON a) => ToJSON (Vector a) # | |
| (Vector Vector a, ToJSON a) => ToJSON (Vector a) # | |
| ToJSON a => ToJSON (Maybe a) # | |
| ToJSON a => ToJSON (Solo a) # | Since: aeson-2.0.2.0 |
| ToJSON a => ToJSON [a] # | |
| HasResolution a => ToJSON (Fixed a) # | |
| (ToJSON v, ToJSONKey k) => ToJSON (Map k v) # | |
| (ToJSON a, ToJSON b) => ToJSON (Either a b) # | |
| ToJSON (Proxy a) # | |
| (ToJSON v, ToJSONKey k) => ToJSON (HashMap k v) # | |
| (ToJSON a, ToJSON b) => ToJSON (Either a b) # | Since: aeson-1.5.3.0 |
| (ToJSON a, ToJSON b) => ToJSON (These a b) # | Since: aeson-1.5.3.0 |
| (ToJSON a, ToJSON b) => ToJSON (Pair a b) # | Since: aeson-1.5.3.0 |
| (ToJSON a, ToJSON b) => ToJSON (These a b) # | Since: aeson-1.5.1.0 |
| (ToJSON a, ToJSON b) => ToJSON (a, b) # | |
| ToJSON a => ToJSON (Const a b) # | |
| ToJSON b => ToJSON (Tagged a b) # | |
| (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (These1 f g a) # | Since: aeson-1.5.1.0 |
| (ToJSON a, ToJSON b, ToJSON c) => ToJSON (a, b, c) # | |
| (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Product f g a) # | |
| (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Sum f g a) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d) => ToJSON (a, b, c, d) # | |
| (ToJSON1 f, ToJSON1 g, ToJSON a) => ToJSON (Compose f g a) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e) => ToJSON (a, b, c, d, e) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f) => ToJSON (a, b, c, d, e, f) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g) => ToJSON (a, b, c, d, e, f, g) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h) => ToJSON (a, b, c, d, e, f, g, h) # | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i) => ToJSON (a, b, c, d, e, f, g, h, i) # | |
Defined in Data.Aeson.Types.ToJSON | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j) => ToJSON (a, b, c, d, e, f, g, h, i, j) # | |
Defined in Data.Aeson.Types.ToJSON | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k) => ToJSON (a, b, c, d, e, f, g, h, i, j, k) # | |
Defined in Data.Aeson.Types.ToJSON | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l) => ToJSON (a, b, c, d, e, f, g, h, i, j, k, l) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: (a, b, c, d, e, f, g, h, i, j, k, l) -> Value toEncoding :: (a, b, c, d, e, f, g, h, i, j, k, l) -> Encoding toJSONList :: [(a, b, c, d, e, f, g, h, i, j, k, l)] -> Value toEncodingList :: [(a, b, c, d, e, f, g, h, i, j, k, l)] -> Encoding omitField :: (a, b, c, d, e, f, g, h, i, j, k, l) -> Bool | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l, ToJSON m) => ToJSON (a, b, c, d, e, f, g, h, i, j, k, l, m) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: (a, b, c, d, e, f, g, h, i, j, k, l, m) -> Value toEncoding :: (a, b, c, d, e, f, g, h, i, j, k, l, m) -> Encoding toJSONList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m)] -> Value toEncodingList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m)] -> Encoding omitField :: (a, b, c, d, e, f, g, h, i, j, k, l, m) -> Bool | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l, ToJSON m, ToJSON n) => ToJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -> Value toEncoding :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -> Encoding toJSONList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m, n)] -> Value toEncodingList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m, n)] -> Encoding omitField :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -> Bool | |
| (ToJSON a, ToJSON b, ToJSON c, ToJSON d, ToJSON e, ToJSON f, ToJSON g, ToJSON h, ToJSON i, ToJSON j, ToJSON k, ToJSON l, ToJSON m, ToJSON n, ToJSON o) => ToJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) # | |
Defined in Data.Aeson.Types.ToJSON Methods toJSON :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -> Value toEncoding :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -> Encoding toJSONList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)] -> Value toEncodingList :: [(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)] -> Encoding omitField :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -> Bool | |
A type that can be converted from JSON, with the possibility of failure.
In many cases, you can get the compiler to generate parsing code for you (see below). To begin, let's cover writing an instance by hand.
There are various reasons a conversion could fail. For example, an
Object could be missing a required key, an Array could be of
the wrong size, or a value could be of an incompatible type.
The basic ways to signal a failed conversion are as follows:
failyields a custom error message: it is the recommended way of reporting a failure;empty(ormzero) is uninformative: use it when the error is meant to be caught by some(;<|>)typeMismatchcan be used to report a failure when the encountered value is not of the expected JSON type;unexpectedis an appropriate alternative when more than one type may be expected, or to keep the expected type implicit.
prependFailure (or modifyFailure) add more information to a parser's
error messages.
An example type and instance using typeMismatch and prependFailure:
-- Allow ourselves to writeTextliterals. {-# LANGUAGE OverloadedStrings #-} data Coord = Coord { x :: Double, y :: Double } instanceFromJSONCoord whereparseJSON(Objectv) = Coord<$>v.:"x"<*>v.:"y" -- We do not expect a non-Objectvalue here. -- We could useemptyto fail, buttypeMismatch-- gives a much more informative error message.parseJSONinvalid =prependFailure"parsing Coord failed, " (typeMismatch"Object" invalid)
For this common case of only being concerned with a single
type of JSON value, the functions withObject, withScientific, etc.
are provided. Their use is to be preferred when possible, since
they are more terse. Using withObject, we can rewrite the above instance
(assuming the same language extension and data type) as:
instanceFromJSONCoord whereparseJSON=withObject"Coord" $ \v -> Coord<$>v.:"x"<*>v.:"y"
Instead of manually writing your FromJSON instance, there are two options
to do it automatically:
- Data.Aeson.TH provides Template Haskell functions which will derive an instance at compile time. The generated instance is optimized for your type so it will probably be more efficient than the following option.
- The compiler can provide a default generic implementation for
parseJSON.
To use the second, simply add a deriving clause to your
datatype and declare a GenericFromJSON instance for your datatype without giving
a definition for parseJSON.
For example, the previous example can be simplified to just:
{-# LANGUAGE DeriveGeneric #-}
import GHC.Generics
data Coord = Coord { x :: Double, y :: Double } deriving Generic
instance FromJSON Coord
or using the DerivingVia extension
deriving viaGenericallyCoord instanceFromJSONCoord
The default implementation will be equivalent to
parseJSON = ; if you need different
options, you can customize the generic decoding by defining:genericParseJSON defaultOptions
customOptions =defaultOptions{fieldLabelModifier=maptoUpper} instanceFromJSONCoord whereparseJSON=genericParseJSONcustomOptions
Instances
| FromJSON IntSet # | |
| FromJSON UUID # | |
| FromJSON Void # | |
| FromJSON All # | Since: aeson-2.2.3.0 |
| FromJSON Any # | Since: aeson-2.2.3.0 |
| FromJSON Version # | |
| FromJSON CTime # | |
| FromJSON Int16 # | |
| FromJSON Int32 # | |
| FromJSON Int64 # | |
| FromJSON Int8 # | |
| FromJSON Ordering # | |
| FromJSON Word16 # | |
| FromJSON Word32 # | |
| FromJSON Word64 # | |
| FromJSON Word8 # | |
| FromJSON URI # | Since: aeson-2.2.0.0 |
| FromJSON Scientific # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser Scientific parseJSONList :: Value -> Parser [Scientific] omittedField :: Maybe Scientific | |
| FromJSON Key # | |
| FromJSON DotNetTime # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser DotNetTime parseJSONList :: Value -> Parser [DotNetTime] omittedField :: Maybe DotNetTime | |
| FromJSON Value # | |
| FromJSON CalendarDiffDays # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser CalendarDiffDays parseJSONList :: Value -> Parser [CalendarDiffDays] omittedField :: Maybe CalendarDiffDays | |
| FromJSON Day # | |
| FromJSON Month # | |
| FromJSON Quarter # | |
| FromJSON QuarterOfYear # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser QuarterOfYear parseJSONList :: Value -> Parser [QuarterOfYear] omittedField :: Maybe QuarterOfYear | |
| FromJSON DayOfWeek # | |
| FromJSON DiffTime # | This instance includes a bounds check to prevent maliciously
large inputs to fill up the memory of the target system. You can
newtype |
| FromJSON NominalDiffTime # | This instance includes a bounds check to prevent maliciously
large inputs to fill up the memory of the target system. You can
newtype |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser NominalDiffTime parseJSONList :: Value -> Parser [NominalDiffTime] omittedField :: Maybe NominalDiffTime | |
| FromJSON SystemTime # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser SystemTime parseJSONList :: Value -> Parser [SystemTime] omittedField :: Maybe SystemTime | |
| FromJSON UTCTime # | |
| FromJSON CalendarDiffTime # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser CalendarDiffTime parseJSONList :: Value -> Parser [CalendarDiffTime] omittedField :: Maybe CalendarDiffTime | |
| FromJSON LocalTime # | |
| FromJSON TimeOfDay # | |
| FromJSON ZonedTime # | Supported string formats:
The first space may instead be a |
| FromJSON Text # | |
| FromJSON Text # | |
| FromJSON ShortText # | Since: aeson-2.0.2.0 |
| FromJSON Integer # | This instance includes a bounds check to prevent maliciously
large inputs to fill up the memory of the target system. You can
newtype |
| FromJSON Natural # | |
| FromJSON () # | |
| FromJSON Bool # | |
| FromJSON Char # | |
| FromJSON Double # | |
| FromJSON Float # | |
| FromJSON Int # | |
| FromJSON Word # | |
| FromJSON a => FromJSON (First a) # | |
| FromJSON a => FromJSON (Last a) # | |
| FromJSON a => FromJSON (Max a) # | |
| FromJSON a => FromJSON (Min a) # | |
| FromJSON a => FromJSON (WrappedMonoid a) # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser (WrappedMonoid a) parseJSONList :: Value -> Parser [WrappedMonoid a] omittedField :: Maybe (WrappedMonoid a) | |
| FromJSON a => FromJSON (IntMap a) # | |
| FromJSON a => FromJSON (Seq a) # | |
| (Ord a, FromJSON a) => FromJSON (Set a) # | |
| FromJSON v => FromJSON (Tree v) # | |
| FromJSON a => FromJSON (DNonEmpty a) # | Since: aeson-1.5.3.0 |
| FromJSON a => FromJSON (DList a) # | |
| FromJSON1 f => FromJSON (Fix f) # | Since: aeson-1.5.3.0 |
| (FromJSON1 f, Functor f) => FromJSON (Mu f) # | Since: aeson-1.5.3.0 |
| (FromJSON1 f, Functor f) => FromJSON (Nu f) # | Since: aeson-1.5.3.0 |
| FromJSON a => FromJSON (NonEmpty a) # | |
| FromJSON a => FromJSON (Identity a) # | |
| FromJSON a => FromJSON (First a) # | |
| FromJSON a => FromJSON (Last a) # | |
| FromJSON a => FromJSON (Down a) # | Since: aeson-2.2.0.0 |
| FromJSON a => FromJSON (Dual a) # | |
| FromJSON a => FromJSON (Product a) # | Since: aeson-2.2.3.0 |
| FromJSON a => FromJSON (Sum a) # | Since: aeson-2.2.3.0 |
| (Generic a, GFromJSON Zero (Rep a)) => FromJSON (Generically a) # | Since: aeson-2.1.0.0 |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser (Generically a) parseJSONList :: Value -> Parser [Generically a] omittedField :: Maybe (Generically a) | |
| (FromJSON a, Integral a) => FromJSON (Ratio a) # | |
| (Eq a, Hashable a, FromJSON a) => FromJSON (HashSet a) # | |
| FromJSON a => FromJSON (Array a) # | |
| (Prim a, FromJSON a) => FromJSON (PrimArray a) # | |
| FromJSON a => FromJSON (SmallArray a) # | |
Defined in Data.Aeson.Types.FromJSON Methods parseJSON :: Value -> Parser (SmallArray a) parseJSONList :: Value -> Parser [SmallArray a] omittedField :: Maybe (SmallArray a) | |
| FromJSON v => FromJSON (KeyMap v) # | Since: aeson-2.0.1.0 |
| FromJSON a => FromJSON (Maybe a) # | Since: aeson-1.5.3.0 |
| FromJSON a => FromJSON (Vector a) # | |
| (Prim a, FromJSON a) => FromJSON (Vector a) # | |
| (Storable a, FromJSON a) => FromJSON (Vector a) # | |
| (Vector Vector a, FromJSON a) => FromJSON (Vector a) # | |
| FromJSON a => FromJSON (Maybe a) # | |
| FromJSON a => FromJSON (Solo a) # | Since: aeson-2.0.2.0 |
| FromJSON a => FromJSON [a] # | |
| HasResolution a => FromJSON (Fixed a) # | This instance includes a bounds check to prevent maliciously
large inputs to fill up the memory of the target system. You can
newtype |
| (FromJSONKey k, Ord k, FromJSON v) => FromJSON (Map k v) # | |
| (FromJSON a, FromJSON b) => FromJSON (Either a b) # | |
| FromJSON (Proxy a) # | |
| (FromJSON v, FromJSONKey k, Eq k, Hashable k) => FromJSON (HashMap k v) # | |
| (FromJSON a, FromJSON b) => FromJSON (Either a b) # | Since: aeson-1.5.3.0 |
| (FromJSON a, FromJSON b) => FromJSON (These a b) # | Since: aeson-1.5.3.0 |
| (FromJSON a, FromJSON b) => FromJSON (Pair a b) # | Since: aeson-1.5.3.0 |
| (FromJSON a, FromJSON b) => FromJSON (These a b) # | Since: aeson-1.5.1.0 |
| (FromJSON a, FromJSON b) => FromJSON (a, b) # | |
| FromJSON a => FromJSON (Const a b) # | |
| FromJSON b => FromJSON (Tagged a b) # | |
| (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (These1 f g a) # | Since: aeson-1.5.1.0 |
| (FromJSON a, FromJSON b, FromJSON c) => FromJSON (a, b, c) # | |
| (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Product f g a) # | |
| (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Sum f g a) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d) => FromJSON (a, b, c, d) # | |
| (FromJSON1 f, FromJSON1 g, FromJSON a) => FromJSON (Compose f g a) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e) => FromJSON (a, b, c, d, e) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f) => FromJSON (a, b, c, d, e, f) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g) => FromJSON (a, b, c, d, e, f, g) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h) => FromJSON (a, b, c, d, e, f, g, h) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i) => FromJSON (a, b, c, d, e, f, g, h, i) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j) => FromJSON (a, b, c, d, e, f, g, h, i, j) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k) => FromJSON (a, b, c, d, e, f, g, h, i, j, k) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m, FromJSON n) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n) # | |
| (FromJSON a, FromJSON b, FromJSON c, FromJSON d, FromJSON e, FromJSON f, FromJSON g, FromJSON h, FromJSON i, FromJSON j, FromJSON k, FromJSON l, FromJSON m, FromJSON n, FromJSON o) => FromJSON (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) # | |
A class of types that can be fully evaluated.
Since: deepseq-1.1.0.0
Instances
| NFData ByteArray # | Since: deepseq-1.4.7.0 |
Defined in Control.DeepSeq Methods rnf :: ByteArray -> () | |
| NFData Buffer # | Like the Since: bytestring-0.12.2.0 |
Defined in Data.ByteString.Builder.Internal Methods rnf :: Buffer -> () | |
| NFData BufferRange # | Since: bytestring-0.12.2.0 |
Defined in Data.ByteString.Builder.Internal Methods rnf :: BufferRange -> () | |
| NFData ByteString # | |
Defined in Data.ByteString.Internal.Type Methods rnf :: ByteString -> () | |
| NFData ByteString # | |
Defined in Data.ByteString.Lazy.Internal Methods rnf :: ByteString -> () | |
| NFData ShortByteString # | |
Defined in Data.ByteString.Short.Internal Methods rnf :: ShortByteString -> () | |
| NFData IntSet # | |
Defined in Data.IntSet.Internal Methods rnf :: IntSet -> () | |
| NFData Void # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Void -> () | |
| NFData ThreadId # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: ThreadId -> () | |
| NFData All # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: All -> () | |
| NFData Any # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Any -> () | |
| NFData TypeRep # | NOTE: Prior to Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: TypeRep -> () | |
| NFData Unique # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Unique -> () | |
| NFData Version # | Since: deepseq-1.3.0.0 |
Defined in Control.DeepSeq Methods rnf :: Version -> () | |
| NFData Fingerprint # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Fingerprint -> () | |
| NFData CBool # | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: CBool -> () | |
| NFData CChar # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CChar -> () | |
| NFData CClock # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CClock -> () | |
| NFData CDouble # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CDouble -> () | |
| NFData CFile # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CFile -> () | |
| NFData CFloat # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CFloat -> () | |
| NFData CFpos # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CFpos -> () | |
| NFData CInt # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CInt -> () | |
| NFData CIntMax # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CIntMax -> () | |
| NFData CIntPtr # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CIntPtr -> () | |
| NFData CJmpBuf # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CJmpBuf -> () | |
| NFData CLLong # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CLLong -> () | |
| NFData CLong # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CLong -> () | |
| NFData CPtrdiff # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CPtrdiff -> () | |
| NFData CSChar # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CSChar -> () | |
| NFData CSUSeconds # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CSUSeconds -> () | |
| NFData CShort # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CShort -> () | |
| NFData CSigAtomic # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CSigAtomic -> () | |
| NFData CSize # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CSize -> () | |
| NFData CTime # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CTime -> () | |
| NFData CUChar # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUChar -> () | |
| NFData CUInt # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUInt -> () | |
| NFData CUIntMax # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUIntMax -> () | |
| NFData CUIntPtr # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUIntPtr -> () | |
| NFData CULLong # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CULLong -> () | |
| NFData CULong # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CULong -> () | |
| NFData CUSeconds # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUSeconds -> () | |
| NFData CUShort # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CUShort -> () | |
| NFData CWchar # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: CWchar -> () | |
| NFData MaskingState # | Since: deepseq-1.4.4.0 |
Defined in Control.DeepSeq Methods rnf :: MaskingState -> () | |
| NFData ExitCode # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: ExitCode -> () | |
| NFData Int16 # | |
Defined in Control.DeepSeq Methods rnf :: Int16 -> () | |
| NFData Int32 # | |
Defined in Control.DeepSeq Methods rnf :: Int32 -> () | |
| NFData Int64 # | |
Defined in Control.DeepSeq Methods rnf :: Int64 -> () | |
| NFData Int8 # | |
Defined in Control.DeepSeq Methods rnf :: Int8 -> () | |
| NFData CallStack # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: CallStack -> () | |
| NFData SrcLoc # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: SrcLoc -> () | |
| NFData Module # | Since: deepseq-1.4.8.0 |
Defined in Control.DeepSeq Methods rnf :: Module -> () | |
| NFData Ordering # | |
Defined in Control.DeepSeq Methods rnf :: Ordering -> () | |
| NFData TyCon # | NOTE: Prior to Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: TyCon -> () | |
| NFData Word16 # | |
Defined in Control.DeepSeq Methods rnf :: Word16 -> () | |
| NFData Word32 # | |
Defined in Control.DeepSeq Methods rnf :: Word32 -> () | |
| NFData Word64 # | |
Defined in Control.DeepSeq Methods rnf :: Word64 -> () | |
| NFData Word8 # | |
Defined in Control.DeepSeq Methods rnf :: Word8 -> () | |
| NFData URI # | |
Defined in Network.URI Methods rnf :: URI -> () | |
| NFData URIAuth # | |
Defined in Network.URI Methods rnf :: URIAuth -> () | |
| NFData Scientific # | |
Defined in Data.Scientific Methods rnf :: Scientific -> () | |
| NFData Key # | |
Defined in Data.Aeson.Key Methods rnf :: Key -> () | |
| NFData JSONPathElement # | |
Defined in Data.Aeson.Types.Internal Methods rnf :: JSONPathElement -> () | |
| NFData Value # | |
Defined in Data.Aeson.Types.Internal Methods rnf :: Value -> () | |
| NFData LocalTime # | |
Defined in Data.Time.LocalTime.Internal.LocalTime Methods rnf :: LocalTime -> () | |
| NFData ZonedTime # | |
Defined in Data.Time.LocalTime.Internal.ZonedTime Methods rnf :: ZonedTime -> () | |
| NFData UnicodeException # | |
Defined in Data.Text.Encoding.Error Methods rnf :: UnicodeException -> () | |
| NFData Text # | |
| NFData Text # | |
Defined in Data.Text.Lazy Methods rnf :: Text -> () | |
| NFData ShortText # | |
Defined in Data.Text.Short.Internal Methods rnf :: ShortText -> () | |
| NFData Integer # | |
Defined in Control.DeepSeq Methods rnf :: Integer -> () | |
| NFData Natural # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Natural -> () | |
| NFData () # | |
Defined in Control.DeepSeq Methods rnf :: () -> () | |
| NFData Bool # | |
Defined in Control.DeepSeq Methods rnf :: Bool -> () | |
| NFData Char # | |
Defined in Control.DeepSeq Methods rnf :: Char -> () | |
| NFData Double # | |
Defined in Control.DeepSeq Methods rnf :: Double -> () | |
| NFData Float # | |
Defined in Control.DeepSeq Methods rnf :: Float -> () | |
| NFData Int # | |
Defined in Control.DeepSeq Methods rnf :: Int -> () | |
| NFData Word # | |
Defined in Control.DeepSeq Methods rnf :: Word -> () | |
| NFData (MutableByteArray s) # | Since: deepseq-1.4.8.0 |
Defined in Control.DeepSeq Methods rnf :: MutableByteArray s -> () | |
| NFData a => NFData (Complex a) # | |
Defined in Control.DeepSeq Methods rnf :: Complex a -> () | |
| NFData a => NFData (First a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: First a -> () | |
| NFData a => NFData (Last a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: Last a -> () | |
| NFData a => NFData (Max a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: Max a -> () | |
| NFData a => NFData (Min a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: Min a -> () | |
| NFData m => NFData (WrappedMonoid m) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: WrappedMonoid m -> () | |
| NFData a => NFData (SCC a) # | |
Defined in Data.Graph Methods rnf :: SCC a -> () | |
| NFData a => NFData (IntMap a) # | |
Defined in Data.IntMap.Internal Methods rnf :: IntMap a -> () | |
| NFData a => NFData (Digit a) # | |
Defined in Data.Sequence.Internal Methods rnf :: Digit a -> () | |
| NFData a => NFData (Elem a) # | |
Defined in Data.Sequence.Internal Methods rnf :: Elem a -> () | |
| NFData a => NFData (FingerTree a) # | |
Defined in Data.Sequence.Internal Methods rnf :: FingerTree a -> () | |
| NFData a => NFData (Node a) # | |
Defined in Data.Sequence.Internal Methods rnf :: Node a -> () | |
| NFData a => NFData (Seq a) # | |
Defined in Data.Sequence.Internal Methods rnf :: Seq a -> () | |
| NFData a => NFData (Set a) # | |
Defined in Data.Set.Internal Methods rnf :: Set a -> () | |
| NFData a => NFData (Tree a) # | |
| NFData a => NFData (DNonEmpty a) # | |
Defined in Data.DList.DNonEmpty.Internal Methods rnf :: DNonEmpty a -> () | |
| NFData a => NFData (DList a) # | |
Defined in Data.DList.Internal Methods rnf :: DList a -> () | |
| NFData1 f => NFData (Fix f) # | |
| NFData a => NFData (NonEmpty a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: NonEmpty a -> () | |
| NFData a => NFData (Identity a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Identity a -> () | |
| NFData a => NFData (First a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: First a -> () | |
| NFData a => NFData (Last a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Last a -> () | |
| NFData a => NFData (Down a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Down a -> () | |
| NFData a => NFData (Dual a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Dual a -> () | |
| NFData a => NFData (Product a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Product a -> () | |
| NFData a => NFData (Sum a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Sum a -> () | |
| NFData a => NFData (ZipList a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: ZipList a -> () | |
| NFData (IORef a) # | NOTE: Only strict in the reference and not the referenced value. Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: IORef a -> () | |
| NFData (MVar a) # | NOTE: Only strict in the reference and not the referenced value. Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: MVar a -> () | |
| NFData (FunPtr a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: FunPtr a -> () | |
| NFData (Ptr a) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: Ptr a -> () | |
| NFData a => NFData (Ratio a) # | |
Defined in Control.DeepSeq Methods rnf :: Ratio a -> () | |
| NFData (StableName a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: StableName a -> () | |
| NFData (PrimArray a) # | |
Defined in Data.Primitive.PrimArray Methods rnf :: PrimArray a -> () | |
| NFData a => NFData (SmallArray a) # | |
Defined in Data.Primitive.SmallArray Methods rnf :: SmallArray a -> () | |
| NFData x => NFData (PathMap x) # | |
Defined in Web.Routing.SafeRouting Methods rnf :: PathMap x -> () | |
| NFData v => NFData (KeyMap v) # | |
Defined in Data.Aeson.KeyMap Methods rnf :: KeyMap v -> () | |
| NFData a => NFData (IResult a) # | |
Defined in Data.Aeson.Types.Internal Methods rnf :: IResult a -> () | |
| NFData a => NFData (Result a) # | |
Defined in Data.Aeson.Types.Internal Methods rnf :: Result a -> () | |
| NFData a => NFData (Maybe a) # | |
Defined in Data.Strict.Maybe Methods rnf :: Maybe a -> () | |
| NFData a => NFData (Vector a) # | |
Defined in Data.Vector Methods rnf :: Vector a -> () | |
| NFData (Vector a) # | |
Defined in Data.Vector.Primitive Methods rnf :: Vector a -> () | |
| NFData (Vector a) # | |
Defined in Data.Vector.Storable Methods rnf :: Vector a -> () | |
| NFData a => NFData (Vector a) # | |
Defined in Data.Vector.Strict Methods rnf :: Vector a -> () | |
| NFData (Vector a) # | |
Defined in Data.Vector.Unboxed.Base Methods rnf :: Vector a -> () | |
| NFData a => NFData (Maybe a) # | |
Defined in Control.DeepSeq Methods rnf :: Maybe a -> () | |
| NFData a => NFData (Solo a) # | Since: deepseq-1.4.6.0 |
Defined in Control.DeepSeq Methods rnf :: Solo a -> () | |
| NFData a => NFData [a] # | |
Defined in Control.DeepSeq Methods rnf :: [a] -> () | |
| NFData (Fixed a) # | Since: deepseq-1.3.0.0 |
Defined in Control.DeepSeq Methods rnf :: Fixed a -> () | |
| (NFData a, NFData b) => NFData (Arg a b) # | Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: Arg a b -> () | |
| (NFData k, NFData a) => NFData (Map k a) # | |
Defined in Data.Map.Internal Methods rnf :: Map k a -> () | |
| (NFData a, NFData b) => NFData (Array a b) # | |
Defined in Control.DeepSeq Methods rnf :: Array a b -> () | |
| (NFData a, NFData b) => NFData (Either a b) # | |
Defined in Control.DeepSeq Methods rnf :: Either a b -> () | |
| NFData (Proxy a) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Proxy a -> () | |
| NFData (TypeRep a) # | Since: deepseq-1.4.8.0 |
Defined in Control.DeepSeq Methods rnf :: TypeRep a -> () | |
| NFData (STRef s a) # | NOTE: Only strict in the reference and not the referenced value. Since: deepseq-1.4.2.0 |
Defined in Control.DeepSeq Methods rnf :: STRef s a -> () | |
| NFData (MutablePrimArray s a) # | |
Defined in Data.Primitive.PrimArray Methods rnf :: MutablePrimArray s a -> () | |
| (NFData a, NFData b) => NFData (Either a b) # | |
Defined in Data.Strict.Either Methods rnf :: Either a b -> () | |
| (NFData a, NFData b) => NFData (These a b) # | |
Defined in Data.Strict.These Methods rnf :: These a b -> () | |
| (NFData a, NFData b) => NFData (Pair a b) # | |
Defined in Data.Strict.Tuple Methods rnf :: Pair a b -> () | |
| (NFData a, NFData b) => NFData (These a b) # | Since: these-0.7.1 |
Defined in Data.These Methods rnf :: These a b -> () | |
| NFData (MVector s a) # | |
Defined in Data.Vector.Unboxed.Base Methods rnf :: MVector s a -> () | |
| (NFData a, NFData b) => NFData (a, b) # | |
Defined in Control.DeepSeq Methods rnf :: (a, b) -> () | |
| NFData (a -> b) # | This instance is for convenience and consistency with Since: deepseq-1.3.0.0 |
Defined in Control.DeepSeq Methods rnf :: (a -> b) -> () | |
| NFData a => NFData (Const a b) # | Since: deepseq-1.4.0.0 |
Defined in Control.DeepSeq Methods rnf :: Const a b -> () | |
| NFData (a :~: b) # | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: (a :~: b) -> () | |
| (NFData (f a), NFData (g a), NFData a) => NFData (These1 f g a) # | Available always Since: these-1.2 |
Defined in Data.Functor.These Methods rnf :: These1 f g a -> () | |
| (NFData a1, NFData a2, NFData a3) => NFData (a1, a2, a3) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3) -> () | |
| (NFData (f a), NFData (g a)) => NFData (Product f g a) # | Note: in Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: Product f g a -> () | |
| (NFData (f a), NFData (g a)) => NFData (Sum f g a) # | Note: in Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: Sum f g a -> () | |
| NFData (a :~~: b) # | Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: (a :~~: b) -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4) => NFData (a1, a2, a3, a4) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4) -> () | |
| NFData (f (g a)) => NFData (Compose f g a) # | Note: in Since: deepseq-1.4.3.0 |
Defined in Control.DeepSeq Methods rnf :: Compose f g a -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => NFData (a1, a2, a3, a4, a5) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4, a5) -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => NFData (a1, a2, a3, a4, a5, a6) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4, a5, a6) -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => NFData (a1, a2, a3, a4, a5, a6, a7) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4, a5, a6, a7) -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8) => NFData (a1, a2, a3, a4, a5, a6, a7, a8) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4, a5, a6, a7, a8) -> () | |
| (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8, NFData a9) => NFData (a1, a2, a3, a4, a5, a6, a7, a8, a9) # | |
Defined in Control.DeepSeq Methods rnf :: (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> () | |