Safe Haskell | None |
---|---|
Language | Haskell2010 |
Consume a Schema
and emit types intended for code generation.
Synopsis
- emitSchema :: Schema -> Emit ()
- emitElement :: Element -> Emit Type
- emitSimpleType :: SimpleType -> Emit Type
- emitComplexType :: Maybe QN -> ComplexType -> Emit Type
- emitCompositor :: [QN] -> Compositor -> Emit [Field]
- emitGroup :: [QN] -> Group -> Emit [Field]
- emitChoice :: [QN] -> Choice -> Maybe Documentation -> Emit [Field]
- emitSequence :: [QN] -> Maybe Occurs -> Sequence -> Maybe Documentation -> Emit [Field]
- emitParticle :: [QN] -> Particle -> Emit [Field]
- emitAttrFields :: Attributes -> Emit [Field]
- type Emit a = ReaderT Env (StateT EmitState IO) a
- data Env = Env {}
- schema :: Iso' Env Schema
- data EmitState = EmitState {}
- types :: Lens' EmitState (Map Name Type)
- stack :: Lens' EmitState [Name]
- runEmit :: Env -> EmitState -> Emit a -> IO (a, EmitState)
- die :: MonadIO m => String -> m a
- data Name = Name {}
- data Namespace
- data Cardinality
- data Field = Field {}
- fieldName :: Lens' Field QN
- fieldType :: Lens' Field Type
- fieldCardinality :: Lens' Field Cardinality
- fieldXmlEmit :: Lens' Field FieldEmit
- fieldIdx :: Lens' Field Int
- data FieldEmit
- data Ctor = Ctor {
- _ctorName :: String
- _ctorFields :: [Field]
- ctorName :: Lens' Ctor String
- ctorFields :: Lens' Ctor [Field]
- data Type
- = NewType {
- _typeName :: Name
- _typeType :: Type
- _typeDerives :: DerivesFamily
- _typeImpls :: [Impl]
- _typeDoc :: Maybe Documentation
- | DataType {
- _typeName :: Name
- _typeCtors :: [Ctor]
- _typeDerives :: DerivesFamily
- _typeImpls :: [Impl]
- _typeEmit :: DataTypeEmit
- _typeDoc :: Maybe Documentation
- | EnumType {
- _typeName :: Name
- _typeEnumValues :: [String]
- _typeDerives :: DerivesFamily
- _typeImpls :: [Impl]
- _typeDoc :: Maybe Documentation
- | BuiltIn {
- _typeName :: Name
- _coreType :: CoreType
- _typeDerives :: DerivesFamily
- _typeImpls :: [Impl]
- = NewType {
- typeName :: Lens' Type Name
- typeType :: Traversal' Type Type
- typeDerives :: Lens' Type DerivesFamily
- typeImpls :: Lens' Type [Impl]
- typeEmit :: Traversal' Type DataTypeEmit
- typeCtors :: Traversal' Type [Ctor]
- typeEnumValues :: Traversal' Type [String]
- coreType :: Traversal' Type CoreType
- data DerivesFamily
- data DataTypeEmit
- data CoreType
- data Impl
XSD Schema to types
emitSchema :: Schema -> Emit () Source #
Emit schema types. Starts with element productions and emits all dependent types.
Emit various productions
emitElement :: Element -> Emit Type Source #
Emit type for element content; element name production captured in containing field.
emitSimpleType :: SimpleType -> Emit Type Source #
Handle simpleType production.
emitComplexType :: Maybe QN -> ComplexType -> Emit Type Source #
Complex type. anon
arg indicates element-defined complex type, therefore unique;
otherwise defined type.
emitCompositor :: [QN] -> Compositor -> Emit [Field] Source #
Emit compositor field.
emitGroup :: [QN] -> Group -> Emit [Field] Source #
Emit group. Referenced groups make types, others pass through.
emitChoice :: [QN] -> Choice -> Maybe Documentation -> Emit [Field] Source #
Choice production.
emitSequence :: [QN] -> Maybe Occurs -> Sequence -> Maybe Documentation -> Emit [Field] Source #
Sequence production.
emitParticle :: [QN] -> Particle -> Emit [Field] Source #
Particle field production. Element fields emit containing element.
emitAttrFields :: Attributes -> Emit [Field] Source #
Handle attribute and attribute group productions as fields.
Emit monad
Types
Type name.
Instances
Eq Name Source # | |
Data Name Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Name -> c Name # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Name # dataTypeOf :: Name -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Name) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Name) # gmapT :: (forall b. Data b => b -> b) -> Name -> Name # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Name -> r # gmapQ :: (forall d. Data d => d -> u) -> Name -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Name -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Name -> m Name # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Name -> m Name # | |
Ord Name Source # | |
Show Name Source # | |
Namespaces for various productions.
Instances
Bounded Namespace Source # | |
Enum Namespace Source # | |
Defined in Fadno.Xml.EmitTypes succ :: Namespace -> Namespace # pred :: Namespace -> Namespace # fromEnum :: Namespace -> Int # enumFrom :: Namespace -> [Namespace] # enumFromThen :: Namespace -> Namespace -> [Namespace] # enumFromTo :: Namespace -> Namespace -> [Namespace] # enumFromThenTo :: Namespace -> Namespace -> Namespace -> [Namespace] # | |
Eq Namespace Source # | |
Data Namespace Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Namespace -> c Namespace # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Namespace # toConstr :: Namespace -> Constr # dataTypeOf :: Namespace -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Namespace) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Namespace) # gmapT :: (forall b. Data b => b -> b) -> Namespace -> Namespace # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Namespace -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Namespace -> r # gmapQ :: (forall d. Data d => d -> u) -> Namespace -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Namespace -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Namespace -> m Namespace # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Namespace -> m Namespace # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Namespace -> m Namespace # | |
Ord Namespace Source # | |
Defined in Fadno.Xml.EmitTypes | |
Show Namespace Source # | |
data Cardinality Source #
Field cardinality
Instances
Type field.
Field | |
|
Instances
Eq Field Source # | |
Data Field Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Field -> c Field # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Field # dataTypeOf :: Field -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Field) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Field) # gmapT :: (forall b. Data b => b -> b) -> Field -> Field # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Field -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Field -> r # gmapQ :: (forall d. Data d => d -> u) -> Field -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Field -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Field -> m Field # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Field -> m Field # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Field -> m Field # | |
Ord Field Source # | |
Show Field Source # | |
Field xml emit cue.
Instances
Eq FieldEmit Source # | |
Data FieldEmit Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FieldEmit -> c FieldEmit # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FieldEmit # toConstr :: FieldEmit -> Constr # dataTypeOf :: FieldEmit -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FieldEmit) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FieldEmit) # gmapT :: (forall b. Data b => b -> b) -> FieldEmit -> FieldEmit # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FieldEmit -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FieldEmit -> r # gmapQ :: (forall d. Data d => d -> u) -> FieldEmit -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> FieldEmit -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> FieldEmit -> m FieldEmit # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FieldEmit -> m FieldEmit # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FieldEmit -> m FieldEmit # | |
Ord FieldEmit Source # | |
Defined in Fadno.Xml.EmitTypes | |
Show FieldEmit Source # | |
Datatype constructor.
Ctor | |
|
Instances
Eq Ctor Source # | |
Data Ctor Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Ctor -> c Ctor # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Ctor # dataTypeOf :: Ctor -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Ctor) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Ctor) # gmapT :: (forall b. Data b => b -> b) -> Ctor -> Ctor # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Ctor -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Ctor -> r # gmapQ :: (forall d. Data d => d -> u) -> Ctor -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Ctor -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Ctor -> m Ctor # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Ctor -> m Ctor # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Ctor -> m Ctor # | |
Ord Ctor Source # | |
Show Ctor Source # | |
Emitted type.
NewType | |
| |
DataType | |
| |
EnumType | |
| |
BuiltIn | |
|
Instances
Eq Type Source # | |
Data Type Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Type -> c Type # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Type # dataTypeOf :: Type -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Type) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Type) # gmapT :: (forall b. Data b => b -> b) -> Type -> Type # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Type -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Type -> r # gmapQ :: (forall d. Data d => d -> u) -> Type -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Type -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Type -> m Type # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Type -> m Type # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Type -> m Type # | |
Ord Type Source # | |
Show Type Source # | |
data DerivesFamily Source #
Derive type "families".
Instances
data DataTypeEmit Source #
Data type xml emit cue.
Instances
newtype base types. Name after CT should be Haskell base type.
Instances
Bounded CoreType Source # | |
Enum CoreType Source # | |
Eq CoreType Source # | |
Data CoreType Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CoreType -> c CoreType # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CoreType # toConstr :: CoreType -> Constr # dataTypeOf :: CoreType -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CoreType) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CoreType) # gmapT :: (forall b. Data b => b -> b) -> CoreType -> CoreType # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CoreType -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CoreType -> r # gmapQ :: (forall d. Data d => d -> u) -> CoreType -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CoreType -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CoreType -> m CoreType # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CoreType -> m CoreType # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CoreType -> m CoreType # | |
Ord CoreType Source # | |
Defined in Fadno.Xml.EmitTypes | |
Show CoreType Source # | |
Impls of classes, but also grab-bag of type deets.
Bounds (Maybe (Bound String), Maybe (Bound String)) | Specifies min and max values |
Pattern String | Specifies string pattern |
NewTypeShow | Implement |
TopLevel | Top-level element, so emit element name as well as contents. Elements normally inherit the name from the referencing production. |
Instances
Eq Impl Source # | |
Data Impl Source # | |
Defined in Fadno.Xml.EmitTypes gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Impl -> c Impl # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Impl # dataTypeOf :: Impl -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Impl) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Impl) # gmapT :: (forall b. Data b => b -> b) -> Impl -> Impl # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Impl -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Impl -> r # gmapQ :: (forall d. Data d => d -> u) -> Impl -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Impl -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Impl -> m Impl # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Impl -> m Impl # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Impl -> m Impl # | |
Ord Impl Source # | |
Show Impl Source # | |