Как раз собирался заняться более плотным знакомством с Хаскелем, а тут мне попадается этот учебник. Весьма удобно.
Я произвёл небольшую вычитку учебника. Надеюсь, эти замечания помогут сделать его лучше.
Теперь мы имеем целых четыре слова! Тем не менее, ушли мы не далеко, и два новых слова, в сущности, не делают язык выразительнее. Такие синонимы называют . Это значит, что одним словом мы будем обозначать некоторую комбинацию других слов. В данном случае комбинации очень простые.
Пропущено слово, наверное?
Подсветка синтаксиса для Haskell по умолчанию есть в редакторах Vim, Emacs, gedit, yi.
Ещё бы добавить geany. Не знаю, известен ли он настолько, чтобы упоминать.
Для проведения декомпозиции по нескольким переменным можно воспользоваться кортежами. Например определим знакомую функцию равенства для Nat:
instance Eq Nat where
(==) a b =
...
Это выдаёт ошибку при указанном выше определении Nat:
Overlapping instances for Eq Nat
arising from the 'deriving' clause of a data type declaration
Matching instances:
instance Eq Nat -- Defined at Nat.hs:4:21
instance Eq Nat -- Defined at Nat.hs:60:10
When deriving the instance for (Eq Nat)
Однако deriving (Show, Ord)
(без Eq в определении) позволяет скомпилировать модуль без ошибок. Возможно, это не является багом, поскольку я мог пропустить другое определение класса где-нибудь раньше.
Я продолжу вычитку, если вы не против.