Re: [Haskell-cafe] What is your favourite Haskell "aha" moment?

- Large-scale refactoring with types: this is a huge selling point for Haskell in general
I fully agree with the general idea, but the specific example
data Shape = Circle Double | Square Double | Rectangle Double Double -- ^ added
is not convincing (well, to programmers that know about static typing) Think of a Java program interface Shape { .. } class Circle implement Shape { ... } When you add class Rectangle { } , then Shape foo = new Rectangle () would be an error, until you put class Rectangle implements Shape { } then the compiler tells you what methods are missing. I think the extra value of types in Haskell (for everything, including refactoring) is that they tend to express more of the program's properties (w.r.t. statically typed imperative programs). Examples: the distinction between a and IO a, between IO a and STM a. In Data.Set, function "fromList" has an Ord constraint, but "toList" does not. Does "singleton" need the constraint? I used this as an exam question just last week. - J.W.

I'm late to this discussion, but one aspect of Haskell that really impressed me was the idea of *typed holes*, which I think revolutionise the act of programming. I tried to communicate my love for them to people who mostly don't know Haskell here: https://www.youtube.com/watch?v=0oo8wIi2qBE On 17/07/18 03:28, Johannes Waldmann wrote:
- Large-scale refactoring with types: this is a huge selling point for Haskell in general I fully agree with the general idea, but the specific example
data Shape = Circle Double | Square Double | Rectangle Double Double -- ^ added is not convincing (well, to programmers that know about static typing) Think of a Java program
interface Shape { .. } class Circle implement Shape { ... }
When you add class Rectangle { } , then Shape foo = new Rectangle () would be an error,
until you put class Rectangle implements Shape { } then the compiler tells you what methods are missing.
I think the extra value of types in Haskell (for everything, including refactoring) is that they tend to express more of the program's properties (w.r.t. statically typed imperative programs).
Examples:
the distinction between a and IO a, between IO a and STM a.
In Data.Set, function "fromList" has an Ord constraint, but "toList" does not. Does "singleton" need the constraint? I used this as an exam question just last week.
- J.W. _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
participants (2)
-
Johannes Waldmann
-
Vaibhav Sagar