Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Codec' fr fw w r = Codec {}
- type Codec fr fw a = Codec' fr fw a a
- (>-<) :: Functor fr => Field r a x y -> Codec fr fw a -> Build r (Codec' fr fw r) x y
- type ConcreteCodec b f a = Codec (ReaderT b f) (Const b) a
- concrete :: (b -> f a) -> (a -> b) -> ConcreteCodec b f a
- parseVal :: ConcreteCodec b f a -> b -> f a
- produceVal :: ConcreteCodec b f a -> a -> b
- type PartialCodec fr fw a = Codec fr (Compose Maybe fw) a
- cbuild :: (Functor fr, Buildable r y) => Con r x -> Build r (Codec' fr fw r) x y -> PartialCodec fr fw r
- assume :: (a -> Bool) -> Codec fr fw a -> PartialCodec fr fw a
- covered :: PartialCodec fr fw a -> Codec fr fw a
- (<->) :: Alternative fr => PartialCodec fr fw a -> PartialCodec fr fw a -> PartialCodec fr fw a
- produceMaybe :: PartialCodec fr fw a -> a -> Maybe (fw ())
- opt :: (Alternative fr, Applicative fw) => Codec fr fw a -> Codec fr fw (Maybe a)
- mapCodec :: Functor fr => (a -> b) -> (b -> a) -> Codec fr fw a -> Codec fr fw b
- mapCodecF :: (fr a -> gr a) -> (fw () -> gw ()) -> Codec fr fw a -> Codec gr gw a
- mapCodecM :: (Monad fr, Monad fw) => (a -> fr b) -> (b -> fw a) -> Codec fr fw a -> Codec fr fw b
Codecs
De/serializer for the given types. Usually w ~ r, but they are separate
to allow for an Applicative
instance.
(ToJSON a, FromJSON a) => IsString (ObjectCodec a) | |
(ToJSON a, FromJSON a) => Default (JSONCodec a) | |
Functor fr => Functor (Codec' fr fw w) | |
(Applicative fw, Applicative fr) => Applicative (Codec' fr fw w) |
Concrete codecs
type ConcreteCodec b f a = Codec (ReaderT b f) (Const b) a Source
A codec where a
can be produced from a concrete value of b
in context f
,
and a concrete type of value b
can always be produced.
concrete :: (b -> f a) -> (a -> b) -> ConcreteCodec b f a Source
Create a concrete codec from a reader and a writer.
parseVal :: ConcreteCodec b f a -> b -> f a Source
Parse a concrete value with a given ConcreteCodec
.
produceVal :: ConcreteCodec b f a -> a -> b Source
Produce a concrete value with a given ConcreteCodec
.
Partial codecs
Partial codecs are useful for creating codecs
for types with multiple constructors. See examples/Multi.hs
.
type PartialCodec fr fw a = Codec fr (Compose Maybe fw) a Source
A codec that can only serialize a subset of values.
cbuild :: (Functor fr, Buildable r y) => Con r x -> Build r (Codec' fr fw r) x y -> PartialCodec fr fw r Source
Finish a codec construction with a
to produce a Con
rPartialCodec
.
This will check that the given record has the appropriate constructor
before serializing.
assume :: (a -> Bool) -> Codec fr fw a -> PartialCodec fr fw a Source
Guard a Codec
with a predicate to create a PartialCodec
.
covered :: PartialCodec fr fw a -> Codec fr fw a Source
Convert a PartialCodec
into a Codec
, throwing an error
on values it cannot serialize.
(<->) :: Alternative fr => PartialCodec fr fw a -> PartialCodec fr fw a -> PartialCodec fr fw a Source
Combine alternative PartialCodec
s.
produceMaybe :: PartialCodec fr fw a -> a -> Maybe (fw ()) Source
Attempt to get a serialization for a given value.
Codec combinators
opt :: (Alternative fr, Applicative fw) => Codec fr fw a -> Codec fr fw (Maybe a) Source