
On Sunday 18 September 2005 07:59 am, Tom Hawkins wrote:
Aaron Denney wrote:
On 2005-09-17, Jason Dagit
wrote: A link to supertyping can be found here: http://repetae.net/john/recent/out/supertyping.html
After reading that, I wonder why it's not implemented.
Not enough people calling for it.
It seems like a wonderfully useful idea.
It is. It would be terribly useful for those trying to prototype a new Prelude, and clean up the mathematical structures.
I like the idea of supertyping, but wouldn't that only allow you to alter identifiers that were already classified? What about functions in the Prelude that don't belong to a type class?
For instance, I have a datatype that needs an append-like operation, yet it appears (++) is reserved only for lists.
I recently switched to Haskell from OCaml because I thought type classes may solve one of my problems. I'm building an embedded language, which has a lot of the basic operations. In OCaml I was forced to invent all sort of obscure operator names for the embedded language so as not to collide with the standard library.
But with Haskell's Num class, I have been able to reuse (+), (-), and (*). However, (==) and (++) are still sticking points. My general impression of Haskell is good, though it seems you're somewhat locked-in by how the upper levels of the class hierarchy are defined in the Prelude, or when the Prelude does not type class generic operator names such as (++).
Again, I just stared programming Haskell. Please let me know if I'm missing something.
One possible solution for DSLs is to import the Prelude qualified, or with a hiding clause. That allows you to redefine most of the symbols in the Prelude, but still use the Prelude ones if needed. (==) is still a little special because the Prelude (==) is used for some desugaring steps.