User Tools

Site Tools


type-proposal

This is an old revision of the document!


Type proposal

There's a bunch of informal types in folk, such as quads, spaces, libraries, etc. It would be useful to have a standard representation between different parts of the system, to aid in introspection and consistency.

Goals:

  • Automatic visualization (á la Glamorous Toolkit)
  • Type descriptions
  • Automatic preconditions and verification
  • Extensible (don't want to be locked in with a bad design)
  • Flexible (this is tcl after all)

Non goals:

  • Complex types
  • Soundness
  • One Unified Type System

Types will be tagged with their type name, and optionally with type parameters.

Basic operations

Types can be manually created with `[list typeName typeValue]`, or with helper functions like `[$box::typeName typeValue]`. Types are NOT verified when boxed.

Types are unboxed using `[$unbox::typeName $thing]`. This is where types are checked for correctness, if a type verifier has been registered.

To check if a type is a certain type, use `[$is::typeName $type]` or `[expr {[$typeName $type] == typeLookingFor}]`.

Type names

Type names come in two forms: canonical and inline. Canonical type names are either a name, or a list with the first parameter as its name. For example, a type name for meters could be “m”, and a type name for acceleration could be “{accel m s}” (note meters and seconds as type parameters). All following type parameters are type-specific, and should not be assumed to be referencing an existing type.

Inline type names are a mixture of wildcards and symbol/number characters. For example, the type signature of acceleration could be expressed as “*/*^2”. One thing that signature would match to is “m/s^2”, with “m” and “s” as the types' parameters. The canonical form would be “{accel m s}”. Not all types have inline representations.

Postfix or prefix?

I'm not sure which way to go.

Pros of postfix:

  • Types like “10 mm” are automatically a two item list, and as such are a full type.

Cons of postfix:

  • If the value is long, it will exceed the text boundaries, and as such the tag won't be rendered. (Somewhat mitigated by having something like `[typeof $foo]`)

Pros of prefix:

  • A lot of current types are already in the prefix form.

Cons of prefix:

  • Makes constructing some types harder (like “10 mm”).
type-proposal.1754514267.txt.gz · Last modified: 2025/08/06 21:04 by smj-edison

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki