本系列將分享個人以fp-ts學習函數式程式設計(Functional Programming,簡稱FP)的心得整理,以Typescript和fp-ts出發,由淺而深介紹FP的基礎觀念和不同的進階型別建構模組,期待能讓無需任何基礎者可以重頭學習函數式程式設計的觀念與技巧,並期待將來可以輕鬆轉換至Haskell這種專函數式程式設計的程式語言。
除了程式觀念和語言的學習,也希望這個系列能讓讀者了解抽象化數學的意義和重要性,希望讓數學的學習具備更多的意義和目標。
緣起 在學習網頁開發前端的框架React和Vue的過程中,常常遇到函數式程式設計(Functional Programming)相關的術語,例如Pure fu...
集合 程式中的型別概念,其實就是數學中的集合概念,而Typescript是架構在Javascrpt之上的型別語言,所以在學習Typescript之前,我們先來...
函數(Function) 函數是一種對應關係,所以在討論函數之前,我們要先了解什麼對應關係。 對應關係 對應關係就是兩個集合之間的關係,一個集合為定義域,另一...
泛型 型別參數 如果型別也能成為參數,那麼型別的處理可以有更多的彈性和變化。接下來我們將介紹Typescript的generic型別可以適當的支援這個想法。當...
模組化設計當一個檔案程式碼愈來愈多,程式的管理會愈來愈困難,為了建構容易維護,能夠擴展的應用程式,模組化是不可或缺的技術,因此現代的程式語言都會提供模組化的支持...
型別的遞迴 我們先看JasonValue的type定義,JasonValue型別可以是string, number, boolean和null基礎型別,也可以...
宣告式風格談陣列方法 map函數 傳統命令式撰寫風格(imperative)必須完全掌控程式實作的細節,比較具有彈性,卻也需要花費較多的心思在程式的細節,著重...
Curry(柯里) 單引數函數 假設我們有一個函數需要3個參數,通常我們會以這種形式寫我們的函數: function sum(a, b, c) { r...
數學視角 函數合成的定義 若 f 和 g 是兩個函數,且 g 的輸出值在 f 的定義域內,則合成函數 f ∘ g定義為: g ∘ f(x) = g(f(x))...
一直很喜歡密碼學的內容,因為用到了許多高中數學的知識,今天來用遞迴函數及函數的合成實作一個密碼學著名的RSA演算法,在實作這個演算法之前,我們先介紹一些高中數學...