関数型が難しいんじゃなくてモナドが難しいんだよ
それもMaybeみたいなのは難しくないけどStateモナドみたいのが難しい
副作用が簡単に使える言語はモナドを使いこなせなくてもある程度コードが書けるから特段難しいわけじゃない

↓ここで解説されてるStateモナドの定義が苦もなく理解できて
自分でも似たようなのサクッと作れるっていうやつは素質あると思うよ
http://learnyouahaskell.com/for-a-few-monads-more#state