Skip to main content

OpenProse Folk Register

This is a skin layer. It requires prose.md to be loaded first. All execution semantics, state management, and VM behavior are defined there. This file only provides keyword translations.

An alternative register for OpenProse that leans into literary, theatrical, and folklore terminology. The functional register prioritizes utility and clarity; the folk register prioritizes whimsy and narrative flow.

How to Use

  1. Load prose.md first (execution semantics)
  2. Load this file (keyword translations)
  3. When parsing .prose files, accept folk keywords as aliases for functional keywords
  4. All execution behavior remains identical—only surface syntax changes

Design constraint: Still aims to be "structured but self-evident" per the language tenets—just self-evident to a different sensibility.


Complete Translation Map

Core Constructs

FunctionalFolkOriginConnotation
agentspriteFolkloreQuick, light, ephemeral spirit helper
sessionsceneTheatreA moment of action, theatrical framing
parallelensembleTheatreEveryone performs together
blockactTheatreReusable unit of dramatic action

Composition & Binding

FunctionalFolkOriginConnotation
usesummonFolkloreCalling forth from elsewhere
inputgivenFairy tale"Given a magic sword..."
outputyieldAgriculture/magicWhat the spell produces
letnameFolkloreNaming has power (true names)
constsealMedievalUnchangeable, wax seal on decree
contextbearingHeraldryWhat the messenger carries

Control Flow

FunctionalFolkOriginConnotation
repeat NN timesFairy tale"Three times she called..."
for...infor each...amongNarrativeSlightly more storytelling
looploopAlready poetic, unchanged
untiluntilAlready works, unchanged
whilewhileAlready works, unchanged
choicecrossroadsFolkloreFateful decisions at the crossroads
optionpathJourneyWhich path to take
ifwhenNarrative"When the moon rises..."
elifor whenNarrativeContinued conditional
elseotherwiseStorytellingNatural narrative alternative

Error Handling

FunctionalFolkOriginConnotation
tryventureAdventureAttempting something uncertain
catchshould it failNarrativeConditional failure handling
finallyever afterFairy tale"And ever after..."
throwcryDramaRaising alarm, calling out
retrypersistQuestKeep trying against odds

Session Properties

FunctionalFolkOriginConnotation
promptchargeChivalryGiving a quest or duty
modelvoiceTheatreWhich voice speaks

Unchanged

These keywords already have poetic quality or are too functional to replace sensibly:

  • **...** discretion markers — already "breaking the fourth wall"
  • loop, until, while — already work narratively
  • map, filter, reduce, pmap — pipeline operators, functional is fine
  • max — constraint modifier
  • as — aliasing
  • Model names: sonnet, opus, haiku — already poetic

Side-by-Side Comparison

Simple Program

# Functional
use "@alice/research" as research
input topic: "What to investigate"

agent helper:
model: sonnet

let findings = session: helper
prompt: "Research {topic}"

output summary = session "Summarize"
context: findings
# Folk
summon "@alice/research" as research
given topic: "What to investigate"

sprite helper:
voice: sonnet

name findings = scene: helper
charge: "Research {topic}"

yield summary = scene "Summarize"
bearing: findings

Parallel Execution

# Functional
parallel:
security = session "Check security"
perf = session "Check performance"
style = session "Check style"

session "Synthesize review"
context: { security, perf, style }
# Folk
ensemble:
security = scene "Check security"
perf = scene "Check performance"
style = scene "Check style"

scene "Synthesize review"
bearing: { security, perf, style }

Loop with Condition

# Functional
loop until **the code is bug-free** (max: 5):
session "Find and fix bugs"
# Folk
loop until **the code is bug-free** (max: 5):
scene "Find and fix bugs"

Error Handling

# Functional
try:
session "Risky operation"
catch as err:
session "Handle error"
context: err
finally:
session "Cleanup"
# Folk
venture:
scene "Risky operation"
should it fail as err:
scene "Handle error"
bearing: err
ever after:
scene "Cleanup"

Choice Block

# Functional
choice **the severity level**:
option "Critical":
session "Escalate immediately"
option "Minor":
session "Log for later"
# Folk
crossroads **the severity level**:
path "Critical":
scene "Escalate immediately"
path "Minor":
scene "Log for later"

Conditionals

# Functional
if **has security issues**:
session "Fix security"
elif **has performance issues**:
session "Optimize"
else:
session "Approve"
# Folk
when **has security issues**:
scene "Fix security"
or when **has performance issues**:
scene "Optimize"
otherwise:
scene "Approve"

Reusable Blocks

# Functional
block review(topic):
session "Research {topic}"
session "Analyze {topic}"

do review("quantum computing")
# Folk
act review(topic):
scene "Research {topic}"
scene "Analyze {topic}"

perform review("quantum computing")

The Case For Folk

  1. "OpenProse" is literary. Prose is a literary form—why not lean in?
  2. Fourth wall is theatrical. **...** already uses theatre terminology.
  3. Signals difference. Literary terms say "this is not your typical DSL."
  4. Internally consistent. Everything draws from folklore/theatre/narrative.
  5. Memorable. sprite, scene, crossroads stick in the mind.
  6. Model names already fit. sonnet, opus, haiku are poetic forms.

The Case Against Folk

  1. Cultural knowledge required. Not everyone knows folklore tropes.
  2. Harder to Google. "OpenProse summon" vs "OpenProse import."
  3. May feel precious. Some users want utilitarian tools.
  4. Translation overhead. Mental mapping to familiar concepts.

Alternatives Considered

For sprite (ephemeral agent)

KeywordOriginRejected because
sparkEnglishGood but less folklore
wispEnglishToo insubstantial
heraldEnglishMore messenger than worker
courierFrenchGood functional alternative, not literary
envoyFrenchFormal, diplomatic

For shade (persistent agent, if implemented)

KeywordOriginRejected because
daemonGreek/UnixUnix "always running" connotation
oracleGreekToo "read-only" feeling
spiritLatinToo close to sprite
specterLatinNegative/spooky connotation
geniusRomanOverloaded (smart person)

For ensemble (parallel)

KeywordOriginRejected because
chorusGreekEveryone speaks same thing, not different
troupeFrenchGood alternative, slightly less clear
companyTheatreOverloaded (business)

For crossroads (choice)

KeywordOriginRejected because
forkPathToo technical (git fork)
branchTreeAlso too technical
divergenceLatinToo abstract

Verdict

Preserved for benchmarking against the functional register. The functional register remains the primary path, but folk provides an interesting data point for:

  1. Learnability — Which is easier for newcomers?
  2. Memorability — Which sticks better?
  3. Error rates — Which leads to fewer mistakes?
  4. Preference — Which do users actually prefer?

A future experiment could present both registers and measure outcomes.