4 ms·
The first part of the article mixes genericity with feature-richness seamlessly. I don't necessarily agree that creating generic interfaces means bloatness, but
by finishingmove 12y ago
The first part of the article mixes genericity with feature-richness seamlessly. I don't necessarily agree that creating generic interfaces means bloatness, but I think a lot of the pains that the author mentions come from the way OO languages, especially the older ones, do generics (yes, inheritance abuse). Haskell is one example of a language that tries to achieve abstract and generic interfaces that are elegant (and type safe!). Another beauty of such high-level languages is that you can always create a DSL to match the abstraction level of your problem domain.
- tome 12y agoI think there should be some sort of distinction between different meanings of "general" or "generic". One means "covering as many use cases as we can think of" and is criticised here. Another means "not requiring more of its inputs than necessary", which is a different thing. Haskell does the latter well, as you mention.
- seanmcdirmid 12y agoHaskell's type system is great, unless you need semi unification (equivalent to nominal subtyping and imperative assignment), then it's not so great anymore. Unification is pretty limiting.
- tome 12y agoCould you explain a bit more? A quick search suggests that semi-unification is equivalent to Milner-Mycroft typeability, which is polymorphic recursion, which Haskell does indeed have. http://homepages.dcc.ufmg.br/~camarao/SUP/ http://homepages.dcc.ufmg.br/~camarao/SUP/ http://en.wikipedia.org/wiki/Polymorphic_recursion http://en.wikipedia.org/wiki/Polymorphic_recursion
- seanmcdirmid 12y agoRight, but not without type inference. One of the reasons Scala's type system is quite complicated is that it can do semi-unification to achieve local type inference, at least (semi-unification is undecidable in general, and Scala makes a best effort, I believe). How does Haskell deal with refs?
- tome 12y agoI'm not sure what you mean. I'm not aware of any type inference difficulties with IORefs or STRefs. Polymorphic recursion, on the other hand, does often (or maybe always) require an explicit type signature.
- seanmcdirmid 12y agoIf you were to do type inference across mutable reference assignments, you would have to do some semi unification. I don't think haskell does, even ML treats refs very strangely.
- codygman 12y agoThat sounds like something you'd use the state monad for if I understand correctly. Can you provide an example of semi unification where Haskell would be not so great?
- the_af 12y agoI don't think the author truly means generic programming. He is (in my opinion) confusing terms. What he probably means is over-engineered software with too many features and/or needless extensibility that introduces unacceptable complexity. Generic programming actually reduces assumptions, is less bug prone, and is (probably) not what the author was thinking of.