Navigation

Datatype

Operates on the _dtypeMeta attrset attached to every datatype produced by H.datatype / H.datatypeI / H.datatypeP, and on H.app-spines whose head carries _dtypeMeta (instantiated polymorphic datatypes). datatypeInfo is the canonical entry: it normalises a raw meta or applies meta.instantiate to the spine args before returning a fully-defaulted record (indexed, params, paramArgs, indexTy, plus both constructors and the legacy cons alias).

Lookup helpers stay close to caller intent: constructors, fields, constructorByName, and constructorByIx accept either pre-normalised meta or a raw DataSpec. Mismatched names and out-of-range indices throw with descriptive messages; nothing fails silently.

Field-level resolution threads prev — the record of previously-materialised dependent-field values — so fieldType field prev returns the kernel HOAS type for both concrete fields (field.type) and dependent fields (field.typeFn prev). targetIndex con prev resolves a constructor's target index in the datatype's index type the same way. fieldRole exposes the optional role annotation used by generic derivations to distinguish payload from proof-bearing fields.

constructorByIx

constructorByIx: lookup a constructor by zero-based declaration-order index; throws on out-of-range or non-integer index.

constructorByIx : Meta | DataSpec -> Int -> Constructor

constructorByName

constructorByName: lookup a constructor by name in a datatype's meta/DataSpec; throws on unknown name with a descriptive message.

constructorByName : Meta | DataSpec -> String -> Constructor

constructors

constructors: extract the constructor list from a meta or DataSpec — accepts either a pre-normalised meta with constructors or a raw DataSpec, calling datatypeInfo for the latter.

constructors : Meta | DataSpec -> [Constructor]

datatypeInfo

datatypeInfo: produce normalised metadata from either a DataSpec (record with _dtypeMeta) or an H.app spine whose head is a polymorphic datatype; for polymorphic heads, applies meta.instantiate to the spine args.

datatypeInfo : DataSpec | Hoas -> Meta

fieldRole

fieldRole: extract the role annotation from a field, or null if unset. Used by generic derivations to distinguish e.g. proof-bearing fields from ordinary payload.

fieldRole : Field -> String | null

fieldType

fieldType: resolve a field's HOAS type — prefers field.typeFn prev (dependent fields) over field.type (concrete); throws if neither slot is filled.

fieldType : Field -> AttrSet -> Hoas

fields

fields: extract the field list from a constructor record; defaults to [] for constructors with no fields slot.

fields : Constructor -> [Field]

instantiate

instantiate: apply parameter arguments to a polymorphic datatype DataSpec, returning the normalised meta for that instantiation; throws for non-polymorphic datatypes given non-empty paramArgs.

instantiate : DataSpec -> [Hoas] -> Meta

isDatatype

isDatatype: predicate identifying values that carry _dtypeMeta directly, or app-spines whose head carries _dtypeMeta (instantiated polymorphic datatypes).

isDatatype : Any -> Bool

normalizeMetadata

normalizeMetadata: canonicalise a raw _dtypeMeta attrset — requires constructors, defaults indexed/params/paramArgs/indexTy, and pre-fills every field with level/eq/proof/type/typeFn/S/SFn/idxFn/branchIdxFn/role/source slots.

normalizeMetadata : Meta -> Meta

targetIndex

targetIndex: compute a constructor's target index in the datatype's index type — applies con.targetIdx prev where prev is the materialised previous-field record; throws if no targetIdx function is present.

targetIndex : Constructor -> AttrSet -> Hoas