[Haskell-cafe] What is your favourite Haskell "aha" moment?
Joachim Durchholz
jo at durchholz.org
Thu Jul 12 06:52:40 UTC 2018
Am 11.07.2018 um 18:24 schrieb Simon Peyton Jones via Haskell-Cafe:
> One thing that stands our for me is the ability to abstract over type
> *constructors*:
>
> f :: forall (m :: * -> *) (a :: *). Monad m => a -> m a
>
> That ability is what has given rise to a stunningly huge collection of
> abstractions: not just Monad, but Functor, Applicative, Traversable,
> Foldable, etc etc etc. Really a lot. It opens up a new way to think
> about the world. But only made possible by that one feature. (Plus
> type classes of course.)
>
> Do any statically typed languages other than Haskell and Scala do this?
Not this, but this description reminded me of my own A-Ha moment when I
looked at Eiffel's data structure library.
Eiffel does multiple inheritance pretty well, so they went ahead and
structured the library using a classifier approach: bounded vs.
unbounded data structures, updatable vs. non-updatable ones, indexable
vs. merely iterable. Any concrete class is a subtype of any of these,
and of course the classifying types had subtypes that defined more
detail, e.g. set vs. multiset (bag) vs. map.
This created an extraordinarily uniform API where equal things had equal
names and consistent semantics, something that rare even for
well-designed libraries.
(The library does have its weaknesses, which are due to the designer's
aggressively update-in-place mindset, so in a discussion it's probably
best to avoid mentioning Eiffel if you wish to highlight FP.)
More information about the Haskell-Cafe
mailing list