-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | JSON-biased spec and validation tool
--
-- JSON-biased spec and validation tool
@package schematic
@version 0.1.6.0
module Data.Schematic.Utils
class Known a
known :: Known a => a
data Dict c
[Dict] :: c => Dict c
instance forall k (a :: k). Data.Schematic.Utils.Known (Data.Proxy.Proxy a)
instance GHC.TypeLits.KnownNat n => Data.Schematic.Utils.Known (Data.Singletons.Sing n)
instance GHC.TypeLits.KnownSymbol s => Data.Schematic.Utils.Known (Data.Singletons.Sing s)
instance forall k k1 (a :: k1) (b :: k). (Data.Schematic.Utils.Known (Data.Singletons.Sing a), Data.Schematic.Utils.Known (Data.Singletons.Sing b)) => Data.Schematic.Utils.Known (Data.Singletons.Sing '(a, b))
instance Data.Schematic.Utils.Known (Data.Singletons.Sing '[])
instance forall a (a1 :: a) (as :: [a]). (Data.Schematic.Utils.Known (Data.Singletons.Sing a1), Data.Schematic.Utils.Known (Data.Singletons.Sing as)) => Data.Schematic.Utils.Known (Data.Singletons.Sing (a1 : as))
instance Data.Schematic.Utils.Known (Data.Vinyl.Core.Rec Data.Singletons.Sing '[])
instance forall u (a :: u) (tl :: [u]). (Data.Schematic.Utils.Known (Data.Singletons.Sing a), Data.Schematic.Utils.Known (Data.Vinyl.Core.Rec Data.Singletons.Sing tl)) => Data.Schematic.Utils.Known (Data.Vinyl.Core.Rec Data.Singletons.Sing (a : tl))
instance c => Data.Schematic.Utils.Known (Data.Schematic.Utils.Dict c)
module Data.Schematic.Path
data PathSegment
Key :: Symbol -> PathSegment
Ix :: Nat -> PathSegment
data DemotedPathSegment
DKey :: Text -> DemotedPathSegment
DIx :: Integer -> DemotedPathSegment
-- | Textual representation of json path.
newtype JSONPath
JSONPath :: Text -> JSONPath
demotePath :: Sing (ps :: [PathSegment]) -> [DemotedPathSegment]
demotedPathToText :: [DemotedPathSegment] -> JSONPath
pathToText :: Sing (ps :: [PathSegment]) -> JSONPath
instance GHC.Show.Show Data.Schematic.Path.JSONPath
instance GHC.Show.Show Data.Schematic.Path.DemotedPathSegment
instance (GHC.TypeLits.KnownSymbol k, Data.Schematic.Utils.Known (Data.Singletons.Sing k)) => Data.Schematic.Utils.Known (Data.Singletons.Sing ('Data.Schematic.Path.Key k))
instance (GHC.TypeLits.KnownNat n, Data.Schematic.Utils.Known (Data.Singletons.Sing n)) => Data.Schematic.Utils.Known (Data.Singletons.Sing ('Data.Schematic.Path.Ix n))
module Data.Schematic.Instances
instance forall u (m :: * -> *) (f :: u -> GHC.Types.*). GHC.Base.Monad m => Test.SmallCheck.Series.Serial m (Data.Vinyl.Core.Rec f '[])
instance forall a (m :: * -> *) (f :: a -> *) (a1 :: a) (as :: [a]). (Test.SmallCheck.Series.Serial m (f a1), Test.SmallCheck.Series.Serial m (Data.Vinyl.Core.Rec f as), GHC.Base.Monad m) => Test.SmallCheck.Series.Serial m (Data.Vinyl.Core.Rec f (a1 : as))
instance Test.SmallCheck.Series.Serial m a => Test.SmallCheck.Series.Serial m (Data.Vector.Vector a)
instance GHC.Base.Monad m => Test.SmallCheck.Series.Serial m Data.Scientific.Scientific
module Data.Schematic.Schema
data TextConstraint
TEq :: Nat -> TextConstraint
TLt :: Nat -> TextConstraint
TLe :: Nat -> TextConstraint
TGt :: Nat -> TextConstraint
TGe :: Nat -> TextConstraint
TRegex :: Symbol -> TextConstraint
TEnum :: [Symbol] -> TextConstraint
data NumberConstraint
NLe :: Nat -> NumberConstraint
NLt :: Nat -> NumberConstraint
NGt :: Nat -> NumberConstraint
NGe :: Nat -> NumberConstraint
NEq :: Nat -> NumberConstraint
data ArrayConstraint
AEq :: Nat -> ArrayConstraint
data Schema
SchemaText :: [TextConstraint] -> Schema
SchemaNumber :: [NumberConstraint] -> Schema
SchemaObject :: [(Symbol, Schema)] -> Schema
SchemaArray :: [ArrayConstraint] -> Schema -> Schema
SchemaNull :: Schema
SchemaOptional :: Schema -> Schema
data FieldRepr :: (Symbol, Schema) -> Type
[FieldRepr] :: (SingI schema, KnownSymbol name) => JsonRepr schema -> FieldRepr '(name, schema)
-- | Forgetful Functor Ufr
toJsonRepr :: FieldRepr '(fn, sch) -> JsonRepr sch
knownFieldName :: forall proxy (fieldName :: Symbol) schema. KnownSymbol fieldName => proxy '(fieldName, schema) -> Text
knownFieldSchema :: forall proxy fieldName schema. SingI schema => proxy '(fieldName, schema) -> Sing schema
data JsonRepr :: Schema -> Type
[ReprText] :: Text -> JsonRepr (SchemaText cs)
[ReprNumber] :: Scientific -> JsonRepr (SchemaNumber cs)
[ReprNull] :: JsonRepr SchemaNull
[ReprArray] :: Vector (JsonRepr s) -> JsonRepr (SchemaArray cs s)
[ReprObject] :: Rec FieldRepr fs -> JsonRepr (SchemaObject fs)
[ReprOptional] :: Maybe (JsonRepr s) -> JsonRepr (SchemaOptional s)
fromOptional :: SingI s => Sing (SchemaOptional s) -> Value -> Parser (Maybe (JsonRepr s))
class FalseConstraint a
instance GHC.Generics.Generic Data.Schematic.Schema.Schema
instance GHC.Generics.Generic Data.Schematic.Schema.ArrayConstraint
instance GHC.Generics.Generic Data.Schematic.Schema.NumberConstraint
instance GHC.Generics.Generic Data.Schematic.Schema.TextConstraint
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr schema) => GHC.Show.Show (Data.Schematic.Schema.FieldRepr '(name, schema))
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.TEq n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.TGt n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.TGe n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.TLt n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.TLe n)
instance (GHC.TypeLits.KnownSymbol s, Data.Singletons.SingI s) => Data.Singletons.SingI ('Data.Schematic.Schema.TRegex s)
instance (Data.Schematic.Schema.All GHC.TypeLits.KnownSymbol ss, Data.Singletons.SingI ss) => Data.Singletons.SingI ('Data.Schematic.Schema.TEnum ss)
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TEq n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TLt n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TLe n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TGt n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TGe n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TRegex t))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.TEnum ss))
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.NEq n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.NGt n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.NGe n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.NLt n)
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.NLe n)
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.NEq n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.NLt n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.NLe n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.NGt n))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.NGe n))
instance GHC.TypeLits.KnownNat n => Data.Singletons.SingI ('Data.Schematic.Schema.AEq n)
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.AEq n))
instance Data.Singletons.SingI sl => Data.Singletons.SingI ('Data.Schematic.Schema.SchemaText sl)
instance Data.Singletons.SingI sl => Data.Singletons.SingI ('Data.Schematic.Schema.SchemaNumber sl)
instance Data.Singletons.SingI 'Data.Schematic.Schema.SchemaNull
instance (Data.Singletons.SingI ac, Data.Singletons.SingI s) => Data.Singletons.SingI ('Data.Schematic.Schema.SchemaArray ac s)
instance Data.Singletons.SingI stl => Data.Singletons.SingI ('Data.Schematic.Schema.SchemaObject stl)
instance Data.Singletons.SingI s => Data.Singletons.SingI ('Data.Schematic.Schema.SchemaOptional s)
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.SchemaText cs))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.SchemaNumber cs))
instance GHC.Classes.Eq (Data.Singletons.Sing 'Data.Schematic.Schema.SchemaNull)
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.SchemaArray as s))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.SchemaObject cs))
instance GHC.Classes.Eq (Data.Singletons.Sing ('Data.Schematic.Schema.SchemaOptional s))
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr schema) => GHC.Classes.Eq (Data.Schematic.Schema.FieldRepr '(name, schema))
instance (GHC.TypeLits.KnownSymbol name, Data.Singletons.SingI schema, Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr schema)) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.FieldRepr '(name, schema))
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaText cs))
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaNumber cs))
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr 'Data.Schematic.Schema.SchemaNull)
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr s) => GHC.Show.Show (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaArray acs s))
instance Data.Vinyl.TypeLevel.RecAll Data.Schematic.Schema.FieldRepr fs GHC.Show.Show => GHC.Show.Show (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaObject fs))
instance GHC.Show.Show (Data.Schematic.Schema.JsonRepr s) => GHC.Show.Show (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaOptional s))
instance (GHC.Base.Monad m, Test.SmallCheck.Series.Serial m Data.Text.Internal.Text) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaText cs))
instance (GHC.Base.Monad m, Test.SmallCheck.Series.Serial m Data.Scientific.Scientific) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaNumber cs))
instance GHC.Base.Monad m => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr 'Data.Schematic.Schema.SchemaNull)
instance Test.SmallCheck.Series.Serial m (Data.Vector.Vector (Data.Schematic.Schema.JsonRepr s)) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaArray cs s))
instance Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr s) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaOptional s))
instance (GHC.Base.Monad m, Test.SmallCheck.Series.Serial m (Data.Vinyl.Core.Rec Data.Schematic.Schema.FieldRepr fs)) => Test.SmallCheck.Series.Serial m (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaObject fs))
instance GHC.Classes.Eq (Data.Vinyl.Core.Rec Data.Schematic.Schema.FieldRepr fs) => GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaObject fs))
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaText cs))
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaNumber cs))
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr 'Data.Schematic.Schema.SchemaNull)
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr s) => GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaArray as s))
instance GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr s) => GHC.Classes.Eq (Data.Schematic.Schema.JsonRepr ('Data.Schematic.Schema.SchemaOptional s))
instance Data.Singletons.SingI schema => Data.Aeson.Types.FromJSON.FromJSON (Data.Schematic.Schema.JsonRepr schema)
instance Data.Aeson.Types.ToJSON.ToJSON (Data.Schematic.Schema.JsonRepr a)
module Data.Schematic.Lens
-- | A partial relation that gives the index of a value in a list.
class i ~ FIndex fn rs => FElem (fn :: Symbol) (rs :: [(Symbol, Schema)]) (i :: Nat) where type ByRevision fn rs i :: Schema where {
type family ByRevision fn rs i :: Schema;
}
flens :: (FElem fn rs i, Functor g) => proxy fn -> (FieldRepr '(fn, ByRevision fn rs i) -> g (FieldRepr '(fn, ByRevision fn rs i))) -> Rec FieldRepr rs -> g (Rec FieldRepr rs)
-- | For Vinyl users who are not using the lens package, we
-- provide a getter.
fget :: FElem fn rs i => proxy fn -> Rec FieldRepr rs -> FieldRepr '(fn, ByRevision fn rs i)
-- | For Vinyl users who are not using the lens package, we also
-- provide a setter. In general, it will be unambiguous what field is
-- being written to, and so we do not take a proxy argument here.
fput :: FElem fn rs i => FieldRepr '(fn, ByRevision fn rs i) -> Rec FieldRepr rs -> Rec FieldRepr rs
instance Data.Schematic.Lens.FElem fn ('(fn, r) : rs) 'Data.Vinyl.TypeLevel.Z
instance (Data.Schematic.Lens.FIndex r (s : rs) ~ 'Data.Vinyl.TypeLevel.S i, Data.Schematic.Lens.FElem r rs i) => Data.Schematic.Lens.FElem r (s : rs) ('Data.Vinyl.TypeLevel.S i)
module Data.Schematic.Migration
data Path
PKey :: Symbol -> Path
PTraverse :: Path
data Builder
BKey :: Schema -> Symbol -> Builder -> Builder
BTraverse :: Schema -> Builder -> Builder
BScalar :: Schema -> Builder
-- | Extracts revision/schema pairs from Versioned in reverse
-- order.
class MigrateSchema (a :: Schema) (b :: Schema)
migrate :: MigrateSchema a b => JsonRepr a -> JsonRepr b
data Action
AddKey :: Symbol -> Schema -> Action
Update :: Schema -> Action
DeleteKey :: Symbol -> Action
-- | User-supplied atomic difference between schemas. Migrations can
-- consists of many differences.
data Diff
Diff :: [Path] -> Action -> Diff
-- | User-provided name of the revision.
type Revision = Symbol
data Migration
Migration :: Revision -> [Diff] -> Migration
data Versioned
Versioned :: Schema -> [Migration] -> Versioned
data MList :: [Schema] -> Type
[MNil] :: (SingI s, TopLevel s) => MList '[s]
[:&&] :: (TopLevel s, SingI s) => proxy s -> (JsonRepr h -> JsonRepr s) -> MList (h : tl) -> MList (s : (h : tl))
instance GHC.TypeLits.KnownSymbol s => Data.Singletons.SingI ('Data.Schematic.Migration.PKey s)
instance Data.Singletons.SingI 'Data.Schematic.Migration.PTraverse
module Data.Schematic.Validation
type Validation a = ValidationT ErrorMap Identity a
type ErrorMap = MonoidMap Text [Text]
data ParseResult a
Valid :: a -> ParseResult a
DecodingError :: Text -> ParseResult a
ValidationError :: ErrorMap -> ParseResult a
isValid :: ParseResult a -> Bool
isDecodingError :: ParseResult a -> Bool
isValidationError :: ParseResult a -> Bool
validateTextConstraint :: JSONPath -> Text -> Sing (tcs :: TextConstraint) -> Validation ()
validateNumberConstraint :: JSONPath -> Scientific -> Sing (tcs :: NumberConstraint) -> Validation ()
validateArrayConstraint :: JSONPath -> Vector a -> Sing (tcs :: ArrayConstraint) -> Validation ()
validateJsonRepr :: Sing schema -> [DemotedPathSegment] -> JsonRepr schema -> Validation ()
instance GHC.Base.Functor Data.Schematic.Validation.ParseResult
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Schematic.Validation.ParseResult a)
instance GHC.Show.Show a => GHC.Show.Show (Data.Schematic.Validation.ParseResult a)
module Data.Schematic
decodeAndValidateJson :: forall schema. (FromJSON (JsonRepr schema), TopLevel schema, SingI schema) => ByteString -> ParseResult (JsonRepr schema)
parseAndValidateJson :: forall schema. (FromJSON (JsonRepr schema), TopLevel schema, SingI schema) => Value -> ParseResult (JsonRepr schema)
parseAndValidateJsonBy :: (FromJSON (JsonRepr schema), TopLevel schema, SingI schema) => proxy schema -> Value -> ParseResult (JsonRepr schema)
parseAndValidateVersionedJson :: forall proxy v. (SingI (AllVersions v), Migratable (AllVersions v)) => proxy v -> Value -> ParseResult (JsonRepr (Snd (Head (AllVersions v))))
parseAndValidateTopVersionJson :: forall proxy (v :: Versioned). (SingI (TopVersion (AllVersions v))) => proxy v -> Value -> ParseResult (JsonRepr (TopVersion (AllVersions v)))
decodeAndValidateVersionedJson :: (Migratable (AllVersions versioned), SingI (AllVersions versioned)) => proxy versioned -> ByteString -> ParseResult (JsonRepr (Snd (Head (AllVersions versioned))))
parseAndValidateWithMList :: MList revisions -> Value -> ParseResult (JsonRepr (Head revisions))
decodeAndValidateVersionedWithMList :: proxy versioned -> MList (MapSnd (AllVersions versioned)) -> ByteString -> ParseResult (JsonRepr (Head (MapSnd (AllVersions versioned))))
isValid :: ParseResult a -> Bool
isDecodingError :: ParseResult a -> Bool
isValidationError :: ParseResult a -> Bool
data ParseResult a
Valid :: a -> ParseResult a
DecodingError :: Text -> ParseResult a
ValidationError :: ErrorMap -> ParseResult a
class Migratable (revisions :: [(Revision, Schema)])
instance (Data.Schematic.Schema.TopLevel (Data.Singletons.Prelude.Tuple.Snd rev), Data.Singletons.SingI (Data.Singletons.Prelude.Tuple.Snd rev)) => Data.Schematic.Migratable '[rev]
instance (Data.Schematic.Migratable (Data.Singletons.Prelude.List.Tail revisions), Data.Schematic.Migration.MigrateSchema (Data.Singletons.Prelude.Tuple.Snd (Data.Singletons.Prelude.List.Head (Data.Singletons.Prelude.List.Tail revisions))) (Data.Singletons.Prelude.Tuple.Snd (Data.Singletons.Prelude.List.Head revisions)), Data.Singletons.SingI (Data.Singletons.Prelude.Tuple.Snd (Data.Singletons.Prelude.List.Head revisions))) => Data.Schematic.Migratable revisions