Haskell 是一個非常純粹的函數式程式語言(functional progrmming language),它所擁有的一些特性像是:「first-class function」、「immutable」、「lazy evaluation」、「type class」、「currying」等等。
因為這些特點使它相較於我們開發上常用的語言來說它更加的學術且學習曲線較為陡峭,但當我們熟悉這些概念後會發現這些特性會讓我們的開發體驗提升許多。
如果有關注這幾年的社群風向會發現「FP」這個詞愈來愈常被提到,而且通常會跟「好維護」、「可讀性高」、「難學」等等標籤扯上關係。
我知道有一派人是對於 point-free 或一直用
.
來 chaing 感到很礙眼,所以可讀性高不高我覺得是見仁見智,但我覺得整份程式碼的確會有一種精緻的感覺。
但如果要我給一個形容詞來說明 FP 我可能會選擇「優雅」吧, 「我自己感覺」 是在閱讀使用 FP 風格的程式碼較於 OOP 更好閱讀,雖然我可能看不太懂每個 function 的實作但我大概能從 pipe 的順序去推敲出大概是要做什麼事情。
特別說明一下,我認為比起 OOP 更好閱讀的原因是因為我覺得 OOP 每一個 class 該負責多少事情這個範圍很難界定,當然我知道有各種方法論可以幫助我們去釐清依賴的程度及方向,但也許是我剛好沒有跟精通 OOP 的人一起共事過導致我無法理解 OOP 的精妙
大概在三年前幸運地下加入到一個非常非常非常非常喜愛 FP 的團隊,熱愛到甚至有用過 PureScript 來開發產品過。但大部分情況下我們還是使用 ts/js 上開發雖然我們一樣可以盡可能符合地 FP 的風格總感覺還是離真正的 FP 有種隔層紗的感覺。
但也因此讓我萌生了想要好好學習的 FP 的想法,因為種種原因我直到最近才又開始這項學習計畫。這次既然想要好好學習 FP 了不如就直接從最純粹的 Haskell 開始吧,所以與其說這個系列文是要學習 Haskell 不如說我真正的目的是要學習 FP 。
我預計會參考以下書籍/YT資源
從基本的 Function 、List、TypeClass 到Algebraic data type (ADT)、functor、monad,盡可能涵蓋到 Haskell/FP 中的重要概念。
接下來就請大家跟我一起學習從零學習 Haskell 及 FP,也希望這個系列文能夠讓大家更加認識 FP。
這幾天打算玩nixOS,想了解一下純函數式語言,找著找著還是回到Haskell了,看了一下日期還是最近的文章,倒是意外之喜,先追到最新進度~~
非常感謝你的支持~