schemas-0.4.0.0: src/Schemas.hs
{-# LANGUAGE PatternSynonyms #-}
-- | As a simple example of a schema, let's consider a simple record type:
--
-- @
-- import Schemas
-- import Schemas.SOP
--
-- data Person = Person
-- { name :: String
-- , age :: Int
-- , addresses :: [String]
-- }
--
-- personSchema :: TypedSchema Person
-- personSchema = record $ Person
-- \<$\> fieldWith string "name" name
-- \<*\> fieldWith int "age" age
-- \<*\> fieldWith (list string) "addresses" addresses
-- @
--
-- Or, by relying on the @HasSchema@ type class:
--
-- @
-- personSchema :: TypedSchema Person
-- personSchema = record $ Person
-- \<$\> field "name" name
-- \<*\> field "age" age
-- \<*\> field "addresses" addresses
-- @
--
-- Or, if the type is SOP generic:
--
-- @
-- personSchema = gSchema defOptions
-- @
module Schemas
(
-- * Typed schemas
TypedSchemaFlex
, TypedSchema
, HasSchema(..)
-- ** Construction
, emptySchema
, pureSchema
, enum
, readShow
, list
, string
, vector
, Key(..)
, stringMap
, viaJSON
, viaIso
, named
-- *** Applicative record definition
, record
, RecordFields
, RecordField
, field
, fieldWith
, fieldWith'
, optField
, optFieldWith
, optFieldEither
, optFieldEitherWith
, optFieldGeneral
, fieldName
, fieldNameL
, overFieldNames
, extractFields
-- *** Partial schemas
, liftJust
, liftRight
-- *** Discriminated Unions
, union
, alt
, altWith
, UnionAlt
-- *** Undiscriminated unions
, Typed.oneOf
, eitherSchema
, liftPrism
-- ** Encoding
, encode
, decode
, encodeTo
, decodeFrom
, encodeWith
, decodeWith
, encodeToWith
, decodeFromWith
-- ** Results
, Result
, runResult
-- * Untyped schemas
, Schema(.., Unit, Union)
, Field(..)
, _Unit
, _Union
-- ** Extraction
, extractSchema
, schemaFor
-- ** Functions
, Mismatch(..)
, Trace
, TracedMismatches
, isSubtypeOf
, coerce
-- * Validation
, validate
, extractValidators
, validatorsFor
-- * Reexports
, Profunctor(..)
)
where
import Data.Profunctor
import Schemas.Class
import Schemas.Internal as Typed
import Schemas.Untyped