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