Ответ 1
Классы базового типа, такие как Show
, Eq
и Ord
, должны быть легко поняты, прочитав библиотечную документацию, найденную Hoogle и/или Haskell-Language Language Report.
Числовая башня в Haskell кажется запутанной (Int
type - это экземпляр классов типа whooping 11 в соответствии с отчетом), но он просто поддерживает все полезные типы чисел и математические представления чисел, изобретенные для нас: например Integer
- произвольный размер целого числа, Int
- обычное целое число машинного слова, а ленивое представление Пеано целых чисел (не в стандартной библиотеке) оказалось полезным при реализации алгоритмов графа. Наиболее важными классами с числовым типом являются Num
и Integral
. Вы можете конвертировать между различными целыми типами с помощью функций fromIntegral
. Обратите также внимание на то, что цифры, такие как 123, имеют тип Num a => a
и специальный механизм по умолчанию, предназначенный для уменьшения необходимости объявления типов, чтобы указать нужный точный нужный тип. В расширенных случаях использования это работает против вас, поэтому вы можете изменить настройки по умолчанию.
То же самое происходит с разными типами строк: ни одно представление не подходит для всех, поэтому многие из них находятся в дикой природе: String
, Data.ByteString
и Data.Text
являются наиболее важными.
Что касается более сложных классов типов, лучшим источником является Typeclassopedia.
Для определенных классов классов, таких как Monad
, Applicative
и Arrow
, существует множество посвященных учебников и исследовательских работ. В зависимости от ваших математических навыков вы также можете ознакомиться с оригинальными исследовательскими работами по концепциям теории категорий, относящимся к типам классов, таким как отличные "понятия вычисления и монады" Эухенио Могги.
Что касается "eta reductions", то он называется Стиль без точек. Вы можете получить информацию от ссылки, упомянутые в этой ссылке. Вы также можете посмотреть Combinatory Logic, документ 1978 года Джона Бэкуса Можно ли освободить программирование от стиля фон Неймана? и язык программирования APL, чтобы получить более богатую историческую перспективу в этом вопросе -бесплатный стиль.
Также есть общие книги по Haskell, такие как "Нежное введение в Haskell" и "Учите вас в Haskell для большого добра".
Как и для приоритета оператора - действительно есть несколько операторов, которые вы должны помнить: (.)
, ($)
и (>>=)
используются гораздо больше, чем все остальное (за исключением арифметики конечно, но арифметические операторы довольно неудивительны).
Синтаксис кортежей и списков для меня тоже кажется проблематичным. Это просто избыточно: foo : bar : []
совпадает с [foo, bar]
и (,) foo bar
совпадает с (foo, bar)
. Префиксные версии кортежей более высокой степени, такие как (,,,,)
, редко используются.
См. также http://www.haskell.org/haskellwiki/Section_of_an_infix_operator для объяснения конструкций, таких как (+ 2)
и (2 +)
, называемых разделами.
Также вы можете узнать об изменениях, которые предлагает инструмент HLint для улучшения вашего кода. Исполняемый файл HLint можно установить с помощью cabal install HLint
.
Что касается расширенных тем, я могу порекомендовать изучение чисто функциональных структур данных (позволяет создавать эффективные неизменные структуры данных и причины потребления времени), вызывать требуемое лямбда-исчисление (позволяет рассуждать о том, что оценивается и в каком порядке) System Fc (дает вам некоторое представление о том, как работает проверка типа haskell), денотационная семантика (рассуждение о неограниченности, пристрастности и рекурсии, а также некоторое понимание понятий строгости, чистоты и способности к слиянию).