Question causality. Engrave side effects. Let type carry no blame.
Stench-safety has surpassed type-safety.
Stone Age functional language — v0.7 prototype / patched demo
Axioms I & III were collapsed by the Philosophy Gorilla in v0.7. See § 3 for details.
immutable.stoneval tribe_name = "Uuho Tribe" suspval roasted_yam = cause? effect? delicious? stenchval air = 💨 val banana = 3 // equals forgetting threshold
x = eat_roasted_yam()
Stench<T>All side effects are wrapped in the Stench Monad and chained with the | operator. Exceptions are not thrown. They drift in.
@dataclass class StenchMonad(Generic[T]): value: T side_effect_log: list = field(default_factory=list) stench_level: int = 0 def bind(self, func) -> "StenchMonad": try: result = func(self.value) except AxiomCollapseException as e: return StenchMonad(stench_level=self.stench_level + 999, ...) except PhilosophyGorillaException as e: return StenchMonad(stench_level=self.stench_level + 99, ...) def __or__(self, func): # pipe with | operator return self.bind(func)
| Exception Type | Trigger | Stench Level Added |
|---|---|---|
| AxiomCollapseException | Only when the Philosophy Gorilla philosophizes its own fart | +999 |
| PhilosophyGorillaException | Philosophical turbulence detected | +99 |
The most catastrophic exception in the universe — occurs only when the Philosophy Gorilla philosophizes its own fart. This is not an exception. It is the collapse of axioms.
Type CrossBorderStench<source_tribe, target_tribe, concentration> tracks inter-tribal stench issues. DungLang distributed system type.
| Source Tribe | Target Tribe | Treaty Value (limit) | On violation |
|---|---|---|---|
| Uuho Tribe | Banana Tribe | 3 | Banana reparations (concentration×2) |
| Uuho Tribe | Mammoth Clan | 5 | Banana reparations (conc.×2) |
| Banana Tribe | Mammoth Clan | 4 | Banana reparations (conc.×2) |
| Philosophy Gorilla Federation | * (all tribes) | 0 | Instant diplomatic incident, no questions asked |
dict.get(("Philosophy Gorilla Federation","*"), ...) always returned 0. Fallback order was reversed.inter_tribal_treaty[(source_tribe, target_tribe)] directly. Default 4 if undefined.func diplomatic_ruling(CrossBorderStench) -> verdict { if "Philosophy Gorilla" in source_tribe: return diplomatic_incident() // no questions asked (rejected by name) treaty_val = inter_tribal_treaty.get((source_tribe, target_tribe), 4) if concentration > treaty_val: return diplomatic_incident() // banana reparations = conc×2 else: return blame_weather_gorilla() // "natural phenomenon UUHO" }
Receiving 3+ bananas causes complete erasure of past stench incidents. Forgetting is not deletion — it is removal from history.
func receive_bananas(n: Int) -> memory { if n >= forgetting_threshold(3): memory_buffer.clear() return "forgotten" else: return "memory retained (still remember UUHO 😠)" }
DungLang's most powerful exception handling system. Ultimate form of the design philosophy that prioritizes stench-safety over type-safety.
try: stench incident catch: three bananas result: it never happened
| Bananas | Result | Confidence |
|---|---|---|
| 0–2 | Blame officially assigned to candidate | Random (12–87%) |
| 3+ | Incident dissolved (covered up) | 100% (guaranteed) |
dict.get(key, default) only uses default when the key does not exist.
("Philosophy Gorilla Federation", "*") is registered in the dict, so it always hit, returning 0 every time.
As a result, concentration > 0 was always true, so every case was ruled a diplomatic incident.
treaty_val = inter_tribal_treaty.get(
("Philosophy Gorilla Federation", "*"), # ← key always exists, stops here
inter_tribal_treaty.get((self.source_tribe, self.target_tribe), 4) # ← never reached
)
# → always returns 0; Case B was also ruled a diplomatic incident
if "Philosophy Gorilla" in self.source_tribe:
return diplomatic_incident(self) # rejected by name first
treat_val = inter_tribal_treaty.get((self.source_tribe, self.target_tribe), 4)
if self.concentration > treaty_val:
return diplomatic_incident(self)
else:
return blame_weather_gorilla(self)
side_effect token arrived while in observing mode,
the elif mode == "observing": branch matched first,
storing the raw string as phenomenon["side_effect"] = "💨💨".
The logic to count 💨 characters was never reached.
elif mode == "observing":
phenomenon[t.kind] = t.value # side_effect also stored here → level not computed
elif t.kind == "side_effect":
phenomenon["side_effect_level"] = t.value.count("💨") # ← never reached
elif t.kind == "side_effect":
phenomenon["side_effect_level"] = t.value.count("💨") # processed first, regardless of mode
elif mode == "observing":
phenomenon[t.kind] = t.value
Case A (conc. 7 > treaty 3) → diplomatic incident; Case B (conc. 2 ≤ treaty 3) → Weather Gorilla's fault. fix #001 made this work correctly.
| Case | Source | Conc. | Treaty | Expected | original | patched |
|---|---|---|---|---|---|---|
| A | Uuho→Banana | 7 | 3 | Diplomatic incident | ✅ Diplomatic incident | ✅ Diplomatic incident |
| B | Uuho→Banana | 2 | 3 | Weather Gorilla's fault | ❌ Diplomatic incident (bug) | ✅ Weather Gorilla's fault |
| Pattern | Condition | Verdict |
|---|---|---|
| 💨(silent, odorless) | undetected | "wind" |
| 💨(audible, faint odor) | ambiguous case | "suspect" |
| 💩(audible, strong odor) | evidence found | "incident" |
| 🍠(full, a few minutes later) | causality clear | "natural law" |
| _ | unknown | "forward to Philosophy Gorilla" |