This is a work in progress project to experiment with Chain and E.num in useful ways.
publicenumVariable:Hashable{case void
case bool(Bool)case int(Int)case float(Float)case double(Double)case string(String)case set(Set<Variable>)case array([Variable])case dictionary([Variable:Variable])}publicenumFunction{case void(()->())case `in`((Variable)->())case out(()->Variable)case `inout`((Variable)->Variable)}publicindirectenumChain{case end
case complete(E.Function?)case link(E.Function,Chain)case background(E.Function,Chain)case multi([Chain])}letobservedValue:ObservedValue<Int>=ObservedValue()
observedValue.didChangeHandler =.complete(.void {sleep(1)print("Done!")XCTAssertNotNil(observedValue.value)})
observedValue.update(value:5)
observedValue.update(value:15)
observedValue.update(value:25)@Observedvarindex=4
_index.didChangeHandler =.link(.void {
viewModel.update(value:values[index])},.complete(.void {updateUI()}))guard values.count < index && index >=0else{return}
index +=1