# Values and types

What kinds of value a Jadpo program works with, how you give a value a
meaning in your business, and when one type can stand in for another.

The idea behind all of it: **how a value is stored is not what it means**. An
email address and a username are both text underneath, and an order ID and a
customer ID are both UUIDs, but Jadpo treats them as different types. A value
becomes a type only by being checked against that type's rules, and the
compiler never converts between types without being asked.

| Page | What it covers |
|---|---|
| [Built-in types](/docs/built-in-types.md) | Jadpo comes with its types built in. |
| [Named types](/docs/named-types.md) | Most of a program's types are named types: a built-in representation, a name that says what the value means, and the rules a valid value must follow. |
| [Creating values](/docs/creating-values.md) | Applying a type to a value, `Type(value)`, creates a value of that type by checking every rule on it and on the types it builds on. |
| [Validating in the middle of a program](/docs/validating-in-the-middle-of-a-program.md) | To check a value partway through a program, construct it. |
| [One form for every type](/docs/one-form-for-every-type.md) | Every type is declared the same way, `type Name = Base { ... }`. |
| [Signatures use named types](/docs/signatures-use-named-types.md) | A function, action or query can't take or return a built-in representation type directly. |
| [Objects](/docs/objects.md) | An object is a fixed set of named fields. |
| [Building a type from other types](/docs/building-a-type-from-other-types.md) | Most object types are slices of an entity or of another object, so you build them from it rather than repeat its fields. |
| [Values that may be missing](/docs/absent-values.md) | There is no `null` or `undefined`. |
| [Enums](/docs/enums.md) | An enum is a closed list of named alternatives. |
| [Collections](/docs/collections.md) | `List<T>`, `Set<T>` and `Map<K, V>` can be used as field types, parameter types and boundary types, nested in each other or holding objects. |
| [When one type can stand in for another](/docs/when-one-type-can-stand-in-for-another.md) | A value can be used where its own type is expected, and where a type it widens to is expected. |
| [Values never change](/docs/values-never-change.md) | Every value is immutable. |
| [Dates and times](/docs/dates-and-times.md) | The types for dates, times and durations, how to read the clock, and how to work across zones and show a time to people. |
| [Standard types](/docs/types.md) | Every standard type from A to Z, and what all of them can do. |

[What is built](/docs/values-and-types-built.md) says which of this works today.
