[Haskell-cafe] Haskell is a declarative language? Let's see how easy it is to declare types of things.
Johannes Waldmann
waldmann at imn.htwk-leipzig.de
Wed Apr 3 17:28:29 CEST 2013
I absolutely love to use Haskell when teaching
(and I have several years of experience doing it).
And I absolutely dislike it when I have to jump through hoops
to declare types in the most correct way, and in the most natural places.
This is hard to sell to the students. - Examples:
1. for explicit declaration of type variables, as in
reverse :: forall (a :: *) . [a] -> [a]
I have to switch on RankNTypes and/or KindSignatures (ghc suggests).
C'mon, this has nothing to do with ranks per se.
It's a type of a very simple function!
IMHO even Java/C# do this better (with slightly strange syntax,
but at least you get to declare the type variable).
2. for declaring types of local variables, as in
\ (xs :: [Bool]) -> ...
I have to enable PatternSignatures (actually ghc suggests
ScopedTypeVariables but again there is no type variable in sight)
I need to do this often, to disambiguate properties for Smallcheck.
All of this just because it seemed, at some time,
a clever idea to allow the programmer to omit quantifiers?
(I know, mathematicians do this all over the place,
but it is never helpful, and especially not when teaching.)
I think that (1) implies (2): there could be no ambiguity about scopes
(of typevars in patterns) if each typevar had to be introduced
by explicit quantification. Then (in a pattern signature)
a use could be distinguished from a declaration.
Yes, the above is a rant. I can achieve what I want with some ghc options,
and perhaps my point is that these should be on by default -
or have better names, because presently, they are unintelligible to the
(beginner) student.
More information about the Haskell-Cafe
mailing list