/* very complicated idea, might not be possible! */ any {f:function, g:function}: (f+g)(...) => apply(f, args) + apply(g, args) /* addition */ (f-g)(...) => f(x) - g(x) /* subtraction */ (f.g)(...) => f(g(x)) /* composition */ ; /* syntax for quickly typed simple functions and more involved functions by returning a language construct */ simple(x) => x+2 complex(x) => do: x = x+2 return x ; many_args(...) => do: return args /* array of arguments */ ; /* example of an iterator */ ArrayIterator(some_array) => for elem in some_array: yield elem ; /* Object from dictionary, dictionaries can be accessed using the '.' if there are valid characters in them. Do not confuse this with real objects! */ Object(d:dict) => do: this = d if !this.construct: this.construct = ()=>null ; return (...)=>do: apply(this.construct, args) return this ; ; Iterator = Object({ construct: (ls:list)=> do: ;, })