User Tools

Site Tools


type-proposal

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
type-proposal [2025/08/06 21:04] smj-edisontype-proposal [2025/08/06 21:24] (current) – [Types are reactive] smj-edison
Line 20: Line 20:
 Types can be manually created with `[list typeName typeValue]`, or with helper functions like `[$box::typeName typeValue]`. Types are NOT verified when boxed. 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.+Types are unboxed using `[$unbox::typeName $thing]`. This is where values are verified, 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}]`. To check if a type is a certain type, use `[$is::typeName $type]` or `[expr {[$typeName $type] == typeLookingFor}]`.
  
 +To get details of a type, use `[$details $typeName]`. It should return a doc string or similar.
 ===== Type names ===== ===== 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.+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 the type parameters specific to the type, 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. 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.
 +
 +===== Types are reactive =====
 +To get the type list (or any type list, lists can coexist), use <code>
 +When the types are /types/ {
 +  lassign $types box unbox is typeName details
 +  
 +  # example using the newly imported types
 +  puts [$unbox::mm "10 mm"]
 +}
 +</code>
  
 ===== Postfix or prefix? ===== ===== Postfix or prefix? =====
Line 36: Line 47:
  
 Cons of postfix: 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]`)+  * If the value is long, it will often exceed the renderer'boundaries, and as such the tag won't be seen. (Somewhat mitigated by having something like `[$typeName $foo]`)
  
 Pros of prefix: Pros of prefix:
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