3 ms·
I hear you. When I started learning Haskell I was also somewhat frustrated by some error messages. But it's far from an insurmountable problem, if you're really
by nandemo 14y ago
I hear you. When I started learning Haskell I was also somewhat frustrated by some error messages. But it's far from an insurmountable problem, if you're really interested in learning the language. My suggestion is,
(i) use ghc and ghci. TryHaskell isn't actively mantained AFAIK.
(ii) if you find a cryptic error message, first google it and learn the immediate fix, without trying to understand all the details. Of course, eventually you'll have to learn the details, but there's no reason it should be a blocking issue in the beginning.
In any case this is my short-ish, inaccurate version of "the details":
1. In the interpreter, there's an implicit "print foo" when you type "foo".
2. "print foo" expects a foo of any type t as long as t is an instance of the typeclass Show, meaning there must be a show function associated with t that turns t's into Strings. Roughly, that would be as if we had a Java where the method toString (=show) is not part of Object, but rather of an interface Showable, which not all classes have to implement.
3. In Haskell, it was decided that function types shouldn't be instances of Show because they don't have a sensible show implementation. In theory you can have a show implementation that prints "this is function" for all functions, but that's of limited usefulness.
4. The compiler's error message is just an instance of a more general message: a value foo is used in a place that expects a type that's an instance of SomeTypeClass, but foo turns out to be of a type T that isn't. For instance, if you try this on ghci:
> 'a' + 'b'
you'll get a similar error message, because '+' expects 2 arguments of a type that's an instance of typeclass Num, but 'a' and 'b' are of type Char which is not a Num in Haskell. In theory, the compiler could be "hardcoded" to print a special error message when SomeTypeClass happens to be Show, such as "can't print that type". That would be easier for beginners, but would add some complexity to the compiler.
5. The "M1690418375.show_M1690418375" thing is probably an artifact of the way TryHaskell was implemented. In ghci, you simply get this instead:
arising from a use of `print'
I hope this helps.