In this episode, Matti and Wouter are joined by John Hughes. John is one of the authors of the original Haskell Report and talks about why functional programming matters, the origins of QuickCheck testing, and how higher order functions and lazy evaluation is the key that makes functional programming so productive, and so much fun!
@jaror @[email protected] Your first proposal is to sacrifice type safety. I reject that option; avoid success at all costs.
Your second actually increases complexity through semantic bifurcation . I reject that as a way to make a simpler language, even for didactic purposes.
No, discarding type classes without adopting something else worse (interface inheritance) is not easy, and may actually be impossible.
I’m not sure which options you are referring to, I had three options: a JS-style number type (with two suboptions for indexing: throwing errors or rounding), separate types, or a fixed set of classes and instances.
Your first point seems to be against the error throwing approach to array indexing with a JS-style number type. I kind of agree, but then we should also handle out of bounds indexing in a type safe way. I still don’t see the problem with rounding to an integer, I think that’s also what beginners intuitively expect if they write e.g.
xs !! (length xs / 2)
.Your second point seems to be against having separate types and separate instructions like
+
and+.
. I think I’d agree that semantically it is not much simpler, but programming is more than just semantics. For example, error messages will be much simpler if there’s noNum
type class involved (at least the error messages that GHC gives). Perhaps it is possible to develop a better error reporting mechanism for type classes, but that would require more research.Did I interpret your comment correctly?