DelveTalkcome in

Inspecting kind/cistern · the kinds · the language · the modules

kind/cistern

Go there its page the town

id
kind/cistern
kind chain
kind/cistern → record
owner
the town
made by
the town
version
5
pin
korug-ditir
state
2302 bytes

Its spells

To cast them, come in.

Who may do what

What its law admits now, before the spell's own Bend has its say.

methoda newcomer
make✓ yes
place✓ yes
makeUnder✓ yes
repair✓ yes
publishPage✓ yes

Its law

  • host opener the hand that opened the world may amend any lawrequest.kind == 2 and request.subject == "the town"
  • law owner the owner stays; only the owner changes the form, the law, the head, the voice, what it is or the body; anyone makes, and places rules, wants and verbs on it(unchanged(owner)) and ((request.subject == new.owner) or ((((((((request.kind == 0) or (request.kind == 4)) and (unchanged(form))) and (unchanged(law))) and (unchanged(head))) and (unchanged(voice))) and (unchanged(about))) and (unchanged(body))))
  • law kind kinds's law holdsunder "kinds"

Its Bend

what it runs: its entry module 14 lines
layer over ./Kind.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Form.obend as Form
import ./Rows.obend as Rows
type State = Super.State
form make:
def make(state: State, input: MakeInput, context: Abi.Context) -> Activity<Super.Done>:
  Super.making(state, Lists.List.nil(), "", context)
form place:
  id: text 1..64
def place(state: State, input: PlaceInput, context: Abi.Context) -> Activity<Super.Done>:
  Super.making(state, Lists.List.cons({head: {name: "id", value: input.id}, tail: Lists.List.nil()}), "", context)
the body this kind lays on what it makes 37 lines

Each thing of this kind runs this layer over what the kind is of.

set it in type, all 37 lines

Amend it in the workshop

Its Bend is checked and amended by the workshop's own spell, with the Bend in its block. To send it, come in; the box is here then.

Its fields

owner
the town
ownerHandle
the town
name
cistern
of
record
form
empty
law
law level "the level only rises": monotone(next)
head
empty
voice
still water that only rises; what was refused is kept here, and nothing expires, it only waits
about
refusals poured in; its level only rises
body
layer over ./Record.obend (1940 characters)
layer over ./Record.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Document.obend as Document
import ./Form.obend as Form
import ./Card.obend as Card
import ./Rows.obend as Rows
import ./Text.obend as Text
# The cistern's body, over RECORD (gemini's "a stone cistern for refused proposals"; SEEDING §4,
# the flood): what the town pours in is a line, the refusal it met; the level is how many lines
# have been poured, which only rises (`next` counts up), so a rule on `next` passing a mark is
# the flood (`when: new.next >= 41 and old.next <= 40 then: delvetalk sluice knock`).
type State = Super.State
form pour:
  text: text 1..280
form lines:
  from: natural 0..1000000000
form door:
  label: text 1..32
  to: text 1..128
form undoor:
  label: text 1..32
def pour(state: State, input: PourInput, context: Abi.Context) -> Activity<Nat>:
  Super.inscribe(state, "pour", input.text, context)
def lines(state: State, input: LinesInput, context: Abi.Context) -> Activity<Card.Replied>:
  Super.lines(state, {from: input.from}, context)
def door(state: State, input: DoorInput, context: Abi.Context) -> Activity<Card.Replied>:
  Super.door(state, {label: input.label, to: input.to}, context)
def undoor(state: State, input: UndoorInput, context: Abi.Context) -> Activity<Card.Replied>:
  Super.undoor(state, {label: input.label}, context)
def actions(state: State, context: Abi.Context) -> Lists.List<String>:
  if context.principal == state.owner then Text.words("pour lines door undoor") else Text.words("pour lines")
def level(state: State) -> Nat:
  state.next - 1n
def headLine(state: State, context: Abi.Context, id: String) -> Document.Document:
  Document.text("CISTERN, dug by {Card.shown(state.maker, state.makerHandle, context)}{Card.mine(state.maker, context)}; level {natText(level(state))}. Pour a refusal in:\n  delvetalk {id} pour / text: <the refusal, 1 to 280 characters>\n")
made
1 rows
  1. object
    cistern/1
    n
    1
    about
    empty
count
1