atomo-0.3: prelude/core.atomo
operator right 0 = := =!
operator right 1 ->
macro (x match: (ts: Block))
`Match new: (ts contents map: { `(~p -> ~e) | p -> e expand }) on: x expand
macro (p = e)
`Set new: p to: e
macro (p := e)
`Define new: p as: e
macro (define: (name: Dispatch) as: root)
`({ ~name := ~name _?
~(`DefineDynamic new: name as: root)
} call-in: this)
macro (x _?)
`GetDynamic new: x
macro (x =! y)
`SetDynamic new: x to: y
macro (with: x as: y do: b)
`NewDynamic new: [x -> y] do: `(~b call)
macro (with: (bs: List) do: action)
`NewDynamic new: (bs contents map: { `(~a -> ~b) | a -> b }) do: `(~action call)
macro (modify: param as: change do: action)
`(with: ~param as: (~change call: [~param _?]) do: ~action)
macro (target slurp: filename)
{ src = File read: (super evaluate: filename)
exprs = src parse-expressions
blk = `Block new: exprs
`(~blk call-in: ~target)
} call