Loss-aware built-in and custom datatype correspondence.
Unknown Ash types are never stringified implicitly. Custom semantic types are
admitted as RDF datatypes only when their AshR2RML.Type contract is
explicitly :literal; IRI, concept, value-object, and resource semantics must
take their own R2RML term-map/resource path.
Summary
Functions
@spec builtin_contracts() :: map()
@spec resolve(term(), String.t() | nil, term() | nil) :: {:ok, AshR2RML.Mapping.Datatype.t()} | {:error, AshR2RML.Refusal.t()}