Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Three import postures

A modeler picks an ontological posture per module by choosing what to use. Three cover almost all code:

// Posture 1 — pure data, no ontology. `struct`/`enum` are lexer built-ins.
use std::math::Nat;
pub struct Receipt { lease_id: Nat, paid: Money, at: Date }
pub enum Severity { Error, Warning, Info, Hint }
// Posture 2 — generic ontological commitment via the std::core
// baseline, brought into scope explicitly (RFD 0038).
use std::core::{type, rel};
pub type Document { title: String, body: String }
pub rel Cites(citer: Document, cited: Document) [0..*] [0..*];
// Posture 3 — vocabulary-classified. The vocabulary is an ordinary
// EXTERNAL package — here a hypothetical third-party UFO package;
// nothing UFO-related ships with Argon or its stdlib — or the module
// declares its own `pub metatype` / `pub metarel` vocabulary locally.
use ufo_foundational::prelude::*;   // a third-party vocabulary package
pub kind Person { name: String, age: Nat }
pub rel ParentOf(parent: Person, child: Person) [1..1] [0..*];
pub mediation Involves(m: Marriage, p: Person);

Postures compose and are per-module, not per-package: a module may use the imported std::core baseline (use std::core::{type, rel}, or via the package prelude) alongside another imported (or locally-declared) vocabulary, and a package may ship modules in different postures behind one prelude. The metatype calculus (Meta-calculus atom) distinguishes the declarations by the keyword in declaration position.