xenharmonic-devs / sonic-weave

The SonicWeave DSL for manipulating musical frequencies, ratios and equal temperaments
MIT License
4 stars 4 forks source link

Immutable containers #338

Open frostburn opened 1 month ago

frostburn commented 1 month ago

Requires immutable Fraction in xen-dev-utils and immutable Interval class etc.

New keyword immutable.

(* Immutable array expression *)
let myTuple = immutable [1, 2, 3]
(* Sugar for cost foo = immutable bar *)
immutable myConstTuple = [4, 5]
(* Only immutables can be nested inside other immutables *)
immutable myNestedTuple = [0, myTuple, myConstTuple, [6, 7]]

(* Variables with immutable values can be reassigned *)
myTuple = (8,) (* Pythonic tuple syntax *)

Records:

immutable myConstImmutableRecord = {foo: 1, bar: 2}
let myReassignableImmutableRecord = immutable {baz: 3, qux: {quux: 4, corge: 5}}