Предварительные выводы про хаскель, сделанные по
микро-опыту, по возможности очищенные от эмоций:
- Хаскель очень напичкан семантическими конструкциями и, как следствие, очень напичкан синтаксически. Каждая точка, отступ, перенос строки важны;
- Хаскель действительно заставляет разбираться с типами функций, отказываясь запускать код. Т.е. я охотно верю в то, что рефакторить работающий код даже приятно, по сравнению с динамическими языками;
- Хаскель из коробки чудес со скоростью не даёт. Если я вижу произвольный небольшой одноядерный код на эрланге/руби/etc и переписываю его на C, то скорее всего я сходу получаю ускорение (пусть и на синтетических тестах). Тут надо вникать;
- Монады - это сложно и сходу очень непонятно. Ко всему прочему, монады - это хорошо спрятанный this. Пример:
readDeltaMd previous = do
dTime <- decodeUnsigned
dBids <- readDeltaQuotes
dAsks <- readDeltaQuotes
alignAt 8
alignAt, как и функции выше на самом деле по сути представляет из себя мутабельное изменение состояния хорошо спрятанного this, который попал в эту функцию откуда-то извне. При грамотном использовании, наверное это может быть изящно. После эрланга это очень непривычно и сложно, потому что скрытый стейт; - Хаскель очень жесток к типам. Есть вопрос: мешает это при наличии навыка прототипированию или нет.
Короче, экзерсис прошел успешно. Я рад, что у меня получилось всё таки собрать хоть как-то работающую программу на хаскеле и теперь я хотя бы примерно понимаю масштаб непонимания этой пропасти концепций и идей.
Надо будет повторить то же самое на быдлоокамле.