LanguageValues and typesStandard types
How standard types are named, and what is left out
A standard type's name says exactly what it is, and a type you might look for
may be part of another or left for your app to define.
Standard types lists every one, from A to Z and
by group, and each has a page saying what it is and how to make one. Each part
or kind a standard type names is a standard type too: IdentityDocument's
IdentityDocumentKind, or RichText's RichTextBlock. GeoJSON's Feature and
FeatureCollection are explained on the Geospatial page. Why
Jadpo defines these types itself is in the
design notes.
Three rules shape the list:
- Country-specific identifiers are global types, like the rest.
UkSortCode,UsSsnandNhsNumberare named by their country, so they don't clash. - Gender and sex at birth are left out. They are contested, and they are personal data, so your app models them deliberately, and Personal data treats them as sensitive.
- A quantity is stored in its SI base unit. You choose a unit when
you make the value and when you show it:
units.of(5, LengthUnit.mile)holds metres, andtext.format(distance, locale:, unit: LengthUnit.mile)shows miles. So==and ordering just work, and storage is onenumericcolumn.
How standard types are named
A standard type's name says exactly what it is, so it doesn't take a word your app needs for something else. The name is, in order of preference:
- the defining standard's own term, qualified until it is unambiguous:
PostalAddress,RecurrenceRule,ProblemDetails; - otherwise the noun, qualified by what it holds:
DateRange,DataSize,ImageDimensions; - never a bare word an app plausibly uses for its own, different thing,
except a generic container that takes a type, such as
Range<T>, asList<T>is.
So it is CountrySubdivision, not Subdivision, which could be a housing
subdivision, and UnitQuantity, not Quantity, which could be an order
line's count. The same rule gives SecretText, NetworkPort,
WritingScript and WebOrigin, and a time interval is the built-in
InstantRange. A bare word passes when an app using it means the
standard thing: Price, Area, Mass, Currency.
Point and Length are the two exceptions, so that geography and
quantities read naturally (var shelf: Length = 2metre). Built-in names
older than the rule (File, Page, Access) keep their names.
Types that aren't on the list
Some types you might look for are folded into another, so nothing is lost: units into their quantity type, roles into the general type, and duplicates into the one type they duplicate. Formats and application entities are left out:
| What | Became |
|---|---|
Units (Metre, Mile, Kilogram, Pound, Celsius, Litre, KilowattHour, every ...Unit enum and 17 more) |
The quantity type, with a unit at construction and display |
Roles: Height, GeoDistance · FloorArea · WindSpeed · BodyTemperature · BarometricPressure · MediaDuration · DateOfBirth, ExpiryDate · CountryOfOrigin · UsState, Region · Salary |
Length · Area · Speed · Temperature · Pressure · Duration · CalendarDate · Country · CountrySubdivision · Money: a field of the general type |
Duplicates: Timestamp, Uri, Ipv4Address, Ipv6Address, HexColour, HslColour, Sha256, UuidV7, Point3D, CountryAlpha3, LanguageAlpha3, UkPostcode, UsZipCode, UkNumberPlate, EuVatNumber, UkVatNumber, TimeRange, MinorUnits, MediaType, ImageFormat |
The one standard type each duplicates |
Also folded in review: AddressLine, BarcodeSymbology, DoseFrequency, FlightDesignator, GitSha, Gtin, HttpHeaders, Humidity, PackageDimensions, PackageName, PhysicalQuantity, UnitOfMeasure, Ucum, Proportion, QueryString, SubtitleTrack, UkBankAccount, WebhookSignature, WindDirection, CarbonDioxideEquivalent |
PostalAddress, Barcode, DosageInstruction, FlightNumber, GitRef, Ean13, HttpHeaderName, Percentage, Dimensions, PackageUrl, UnitQuantity (three), Ratio, Url, SubtitleCue, BankAccount, Hmac, Bearing, Mass |
Formats: Hex, Base64, Wkt, Json, CsvDialect, MessageFormat, VCard, OtpAuthUri, CssLength |
Out: encoding. and json. operations |
Application entities: Recipe, HotelStay, OrderStatus, PaymentStatus, Consent, SensorReading, StoredFile, UserId, Allergy and 31 more |
Out: an application's own records |
Gender, SexAtBirth, Cvv |
Out: sensitive (a CVV is never stored) |
HashAlgorithm, KeyAlgorithm; SessionId; AcceptLanguage |
Out: no algorithm choices; the runtime's (Sign-in and identity); a call, locale.from_accept_language |
| Niche, silly, or a maybe with no published standard | Out: 729 entries, a package's to define |
What's left out on purpose
Some things you might reach for aren't in the standard library, each for a reason and with something to use instead:
| Left out | Why | Instead |
|---|---|---|
| Generic functions in your own code | They bring type-parameter errors for agents to fight | The standard library stays generic |
reduce, fold |
A second way to accumulate | for with var mut; list.sum |
| Comparators | A key expresses every order, and an inconsistent comparator differs by target | sort_by, reverse |
items[i] |
Out of range needs an arm or a defect | list.at gives T? |
| Regular expressions as calls | A pattern is a type's rule, in linear time | pattern: and construction (Values and types) |
| Graphemes | They'd disagree with max_length and PostgreSQL, and change with each Unicode version |
Code points |
| Dynamic keys on records | A field is its own type and carries its own policy and marks | Map |
| A dynamic JSON value | Nothing Jadpo is meant for needs one | json.read(..., as:); Text to pass on |
| CSV in memory | One way to read rows | csv.read through a store |
| MD5, SHA-1 | Broken | A package |
| Bitwise operations | Flags read better as a set; device formats belong in their package | Set<Enum> |
| Fetching exchange rates | Outside data with a time and a source | A provider package; money.convert applies a rate the app holds |
| Gender, sex at birth | Contested, and personal data | The app's own type, marked sensitive (Personal data) |
| CMYK and print colour | Needs a colour profile | A package on the standard Colour |
| Training models | Needs GPUs, datasets and long jobs | A package or an outside service |
Aliases (size for count) |
One obvious name each | The name this page gives |
Markdown for agents: /docs/the-standard-types.md.Built from Jadpo main at aee2e8f.