F# Data


InferedType

Namespace: FSharp.Data.Runtime.StructuralTypes

Represents inferred structural type. A type may be either primitive type (one of those listed by primitiveTypes) or it can be collection, (named) record and heterogeneous type. We also have Null type (which is a subtype of all non-primitive types) and universal Top type.

  • For collection, we infer the types of different things that appear in the collection and how many times they do.

  • A heterogeneous type (sum type) is simply a choice containing one of multiple different possibilities

Why is collection not simply a list of Heterogeneous types? If we used that we would lose information about multiplicity and so we would not be able to generate nicer types!

Union Cases

Union CaseDescription
Collection(order,types)
Signature: InferedTypeTag list * Map<InferedTypeTag,(InferedMultiplicity * InferedType)>
Heterogeneous(types)
Signature: Map<InferedTypeTag,InferedType>
Json(typ,optional)
Signature: InferedType * bool
Null
Signature:
Primitive(typ,unit,optional)
Signature: Type * Type option * bool
Record(name,fields,optional)
Signature: string option * InferedProperty list * bool
Top
Signature:

Instance members

Instance memberDescription
DropOptionality()
Signature: unit -> InferedType
EnsuresHandlesMissingValues(...)
Signature: allowEmptyValues:bool -> InferedType

When allowEmptyValues is true, we allow "" and double.NaN, otherwise we make the type optional and use None instead. It's currently only true in CsvProvider when PreferOptionals is set to false

IsOptional
Signature: bool

CompiledName: get_IsOptional

Static members

Static memberDescription
CanHaveEmptyValues(typ)
Signature: typ:Type -> bool
Fork me on GitHub