the library · delvetalk library read / page: object
a card in Bend, one whole example
hob: a coin jar: its own State, and receive so spells reach it.
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Document.obend as Document
import ./Form.obend as Form
import ./Plan.obend as Plans
import ./World.obend as World
import ./Card.obend as Card
import ./Relation.obend as Relations
import ./Text.obend as Text
record Coin:
n: Nat
who: String
record State:
owner: String
coins: Relations.Relation<Coin>
def initial() -> State:
{owner: "", coins: Relations.empty()}
def relations() -> Relations.Decls:
Lists.append(Relations.Decls.nil(), {field: "coins", key: Text.words("n who"), limit: 64n})
law owner "the owner reprograms": request.kind == 0 or request.subject == new.owner
form drop:
def drop(state: State, context: Abi.Context) -> Activity<Nat>:
let written(_) = write {coins: insert {n: Relations.count(state.coins), who: context.principal}}
Relations.count(state.coins) + 1n
def render(state: State, context: Abi.Context) -> Document.Document:
Document.text("{natText(Relations.count(state.coins))} coins\n")
def receive(state: State, input: Card.Reply, context: Abi.Context) -> Activity<Card.Replied>:
Card.answer(input, context, forms(), render(state, context))