11 ms·
The alternative is one type, with many functions that can operate on that type. Like how clojure basically uses maps everywhere and the whole standard library
by strawhatguy 7mo ago
The alternative is one type, with many functions that can operate on that type.
Like how clojure basically uses maps everywhere and the whole standard library allows you to manipulate them in various ways.
The main problem with the many type approach is several same it worse similar types, all incompatible.
- packetlost 7mo agoI don't really get why this is getting flagged, I've found this to be true but more of a trade off than a pure benefit. It also is sort of besides the point: you always need to parse inputs from external, usually untrusted, sources.
- doublesocket 7mo agoAgree with this. Mismatching types are generally an indicator of an underlying issue with the code, not the language itself. These are areas AI can be helpful flagging potential problems.
- fiddlerwoaroof 7mo agoYeah, there's something of a tension between the Perlis quote "It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures" and Parse, don't validate. The way I've thought about it, though, is that it's possible to design a program well either by encoding your important invariants in your types or in your functions (especially simple functions). In dynamically typed languages like Clojure, my experience is that there's a set of design practices that have a lot of the same effects as "Parse, Don't Validate" without statically enforced types. And, ultimately, it's a question of mindset which style you prefer.
- strawhatguy 7mo agoThere's probably a case for both. Core logic might benefit from hard types deep in the bowels of unchanging engine. The real world often changes though, and more often than not the code has to adapt, regardless of how elegant are systems are designed.
- fiddlerwoaroof 7mo agoCoalton ( https://coalton-lang.github.io https://coalton-lang.github.io ) is the sort of thing I like: a Haskell-style language hosted inside a very dynamic one with good interop.
- strawhatguy 7mo agoYes it's quite the blend!
- eddd-ddde 7mo agoDo those design practices protect you when you apply a refactor and now you don't know which call sites may be broken now?
- fiddlerwoaroof 7mo agoYes
- marcosdumay 7mo agoThere are more than two alternatives, since functions can operate in more than one type.
- Rygian 7mo agoThis sounds like the "stringly typed language" mockery of some languages. How is it actually different?
- deleted 7mo ago[deleted]
- Kinrany 7mo agoIt's not an alternative. Start with a more dynamic type, do stuff that doesn't care about the shape, parse into a more precise type, do stuff that relies on the additional invariants, drop back into the more dynamic type again.
- slopinthebag 7mo agoI find a balance is important. You can do nominal typing in a structural type system with branding, and you can kinda do structural typing in a nominal type system, but it's not as ergonomic. But you should probably end up doing a mix of both.