3 ms·
I have yet to find a mainstream language which implements any of those features well. Show me one which didn't have and now has proper ADTs.
by wereHamster 11y ago
I have yet to find a mainstream language which implements any of those features well. Show me one which didn't have and now has proper ADTs.
- eru 11y agoDepends on how high you set your standards. Ie Python mostly has higher order functions that work, even though for mostly syntax reasons they interact badly with mutating variables---a bit of sugar would help a lot. In any case, your point stands and complements mine. (Apropos ADTs, did Scala always have them? From what I can tell their syntax is pretty awkward, though. Google's Protobuf, which in some sense denotes a type system, even if not a programming language, did get something like ADTs: https://developers.google.com/protocol-buffers/docs/proto3#oneof https://developers.google.com/protocol-buffers/docs/proto3#o... I am pretty lenient, and would go for anything that resembles a compiler-enforced tagged union. (Think C-style union.))
- GFK_of_xmaspast 11y ago> I am pretty lenient, and would go for anything that resembles a compiler-enforced tagged union http://www.boost.org/doc/libs/1_60_0/doc/html/variant.html http://www.boost.org/doc/libs/1_60_0/doc/html/variant.html ??? (and I think it's supposed to be coming in c++17)
- eru 11y agoThat's interesting, thanks! It seems this one discriminates the different possibilities by type, and not by some extra tag (like the constructor in Haskell's ADTs). I wonder how that works, if you want to write something like the `either' function (or even just write down its type in C++): either :: (a -> c) -> (b -> c) -> Either a b -> c