Я думаю, что одна вещь, с которой вы, вероятно, сталкиваетесь, - это то, с чем я столкнулся при изучении функционального программирования: с функциональным программированием вы можете (и почти должны) думать / работать на более высоком уровне, чем с императивным программированием.
То, что вы находите менее выразительным, я думаю, на самом деле более выразительно: вам не нужно подробно описывать каждую мелочь и вы можете делать больше с меньшим количеством кода в функциональном программировании - у вас больше возможностей для написания.
Например, я мог бы написать обязательно:
for each (Person person in people)
print(person.name)
который полностью читается как английский.
Версия Haskell может быть (и это не допустимый Haskell, но только для синтаксического сравнения):
map (print . name) people
который требует меньше кода и меньше детализации - мне не нужно разбивать элементы на циклы и их переменную (и) ( for each (...)
), map
функция позаботится об этом за меня.
Работа на этом уровне может занять некоторое привыкание. Если это поможет, Haskell был, вероятно, самым сложным временем, когда я изучал новый язык с тех пор, как начал программировать, и я знаю> 10 языков (включая Lisp). Это стоило изучения, хотя.