3 ms·
Wouldn’t closures and let’s say “type-driven” also support your definition? It’s quite tricky as sometuple.fun() and fun(sometuple) might as well be interchang
by danielscrubs 4y ago
Wouldn’t closures and let’s say “type-driven” also support your definition?
It’s quite tricky as sometuple.fun() and fun(sometuple) might as well be interchangeable. If you really want to support a formal definition it would probably be best to have it in denotational semantics… not an easy task.
- jcelerier 4y agoClosures aren't reusable across a whole program unlike classes since their type isn't named, and they don't allow to have more than one operation on the data held by the closure. They really are "poor man's objects" ;p
- uryga 4y agothey allow as many operations as you need, just pass in a "method name" :) const p = Point(3, 5) p('getX') // 3 p('up', 11)('toString') // "Point(3, 16)" const Point = (x, y) => (method, ...args) => { switch (method) { case 'getX': return x; case 'getY': return y; case 'toString': return `Point(${x}, ${y})` case 'up': return Point(x, y+args[0]); // ... } } (unfortunately statically typing this statically requires... some work, either sth like [typescript overloads + literal types] or full on dependent types)
- deltaonefour 4y agoMost things in programming aren't formally defined. It is especially hard given the isomorphisms everywhere. At best what I've done here is eliminate some of the vagueness surrounding the definition, which is really all that's needed in most cases.