Re:Two Weeks of Rust
by catnaroek on Tuesday January 12, 2016 @08:48AM
(#10887346)
They're not similar at all. Algebraic data types are finite sums and (tensor) products. Abstract data types are existential types, which are infinite sums indexed by a kind.
[ Parent
| on HN ]
The purpose of my remark is how they look like in terms of usage for the humble programmer.
They being similar how having a limited data structure (non extensible) with a set of functions that operate on it. Depending on the FP language ADTs can also partially hide their implementation like the Abstract Data Types in modular languages.
But I can also happily discuss the math theory and the denotational semantics about them across languages, but I don't think it will help for many readers.
What makes them weak?
When you unpack a weak existential type repeatedly, every time you get a fresh new type. When you unpack a strong existential repeatedly, you always get the same type.
Anyway, my original comment was wrong: in ML, every time you project a type component from a module, you always get the same type. So it's more like a strong existential. My bad.