atomo-0.1: src/Atomo/Kernel/Parameter.hs
{-# LANGUAGE QuasiQuotes #-}
module Atomo.Kernel.Parameter (load) where
import Atomo.Environment
import Atomo.Haskell
load :: VM ()
load = mapM_ eval [$es|
operator right 0 =!
Parameter = Object clone
Parameter new: v := Parameter clone do: {
set-default: v
}
(p: Parameter) _? := p value: self
(p: Parameter) =! v :=
(p) value: (self) = v
(p: Parameter) set-default: v :=
(p) value: _ = v
with: (p: Parameter) as: new do: (action: Block) := {
old = p _?
action before: { p =! new } after: { p =! old }
} call
with-default: (p: Parameter) as: new do: (action: Block) := {
old = p _?
action before: { p set-default: new } after: { p set-default: old }
} call
with: [] do: (action: Block) := action call
with: (b . bs) do: (action: Block) :=
with: b from as: b to do: { with: bs do: action }
with-defaults: [] do: (action: Block) := action call
with-defaults: (b . bs) do: (action: Block) :=
with-default: b from as: b to do: { with: bs do: action }
|]