johannes.waldmann at htwk-leipzig.de
Wed Apr 13 21:27:02 UTC 2016
This mentions and :: Foldable t => t Bool -> Bool
as an example of "abstract nonsense".
Well, I will run into teaching this soon myself,
though not to freshmen - my students had some Java before
but not Haskell.
With regards to the type of "and",
I will first have them write "data List a = ..."
and a concrete "and :: List Bool -> Bool" from scratch.
Later, to explain the type of "the true and" I will claim
that the corresponding Java method would have type
"static Boolean and (Iterable<Boolean> xs)"
where Iterable<> is an interface (that the students should know).
That's not too bad: xs.iterator() corresponds
to toList xs (a lazy stream). "toList" would even be
a complete definition for the Foldable instance?
(since foldr f z = foldr f z . toList )
So perhaps "Foldable \approx Iterable \approx Enumerable"
is a useful guideline. (Yes, there is a difference
between a one-argument type class and an interface.
But they have some common use cases.)
More information about the Haskell-Cafe