終於寫到最後一天了,今天就輕鬆一點吧xD。 首先感謝所有讀者,在開賽前就有心理準備這個題材本來就是屬於比較冷門領域所以應該沒什麼人關注,本來以為可能完全沒有回饋...
State Monad 可能有讀者看到 state monad 這個名字時可能會想,Haskell 這樣的語言允許我們擁有 state 這種感覺應該是 muta...
Writer Monad 不知道讀者有沒有想過,如果今天我想要把每一步 monadic 操作的過程都有 log 紀錄方便我們 debug 的話要怎麼做?(用 p...
newtype 大概在之前的 monoid 的時候有提到過這個語法。 getProduct $ Product 1 `mappend` Product 2 `...
Monad Law 畢竟 monad 是來自於數學上的概念,所以就算某個type 實作了 Monad 的 instance ,嚴格定義上我們也不能說它是 m...
List Monad 在講 list monad 前我們先回憶一下 applicatives,我們知道 <*> 是可以把一個在 context 裡的...
I/O Monad 雖然 Haskell 是一個純粹的 FP 語言,這意味著它的函數更接近數學意義上的「函數」,也就是我們所說的 pure function 。...
在看 monad 相關的文章時不時想到一個剛開始學 FP 時聽過的笑話 「a monad is just a monoid in the category of...
Maybe 在 Haskell 中 Maybe a 也是能具有 Monoid 特性的。 instance Monoid a => Monoid (Mayb...
Monoid 我們先來看一下幾個 expression (4 * 2) * 1 4 * (2 * 1) ([1] ++ [2,3]) ++ [] [] ++...
再談 Applicative 先看一下昨天最後的範例 import Control.Applicative let foo = fmap (*) [1..5...
繼續談 Functor fmap (*2) (+100) 1 看到這樣的程式碼你能想的到結果是什麼嗎?好像跟我們平常在 map 時的操作不太一樣,感覺好像少了...
Functor 用最簡單的一句話來解釋 functor 就是指可以被 map 的東西像是 List ,而在 Haskell functor 就只是 typecl...
Typeclass 讓我們重新回顧一下 typeclass 是什麼,它類似於其他語言中的介面(interface)。Typeclass 提供了一種定義一組類別所...
Recursive Data Type 我們除了裡用 product 或者 sum 來組成的我們 type 以外,還可以使用 recursive 的概念來定義...
Sum Type 我們先來看一下 Bool 在 Haskell 是如何被定義的 data Bool = False | True deriving (Read...
昨天我們說到可以使用 tuple (Double, Double, Double) 用三個double來表示三角形的三邊長。 但我們使用 tuple 來描述的話...
Tuple 簡單介紹 跟大部分語言的 Tuple 一樣就是可以把多種資料型態塞進一個容器來表示資料的型別,像是 ("Todd",100,Tr...
今天要來介紹一個在 FP 中相當常見的特性 lazy evaluation (惰性求值) ,簡單來說就是當需要值的時候才會真正把值計算出來。 lazy eval...
Fold 所謂 Fold 就是來簡化我們在遞迴中很常遇到的模式,匹配 (x:xs) 將 x 取出來後繼續將 xs 放入 function 運算 直到 [] 。通...
Filter filter 是傳入一個會回傳 Bool 的 function 及 List,然後將 List 中每個元素丟進去 function 最後回傳所有執...
終於來到一個跟 FP 的核心概念有關的特性了,首先我們需要知道 Haskell 是具有 First-class function 這個特性,意思是指 func...
今天我們將繼續了解 pattern matching 的語法。 Guard 昨天只講到 pattern 如果是「特定值」那我們做什麼行為,但如果我們是有多個參數...
pattern matching 這個許多語言都有的概念,它的常見形式會很像一個switch cass,然後根據不一樣的 case/pattern 決定執行不一...
Haskell 的型別系統 之前有稍微提到 Haskell 的是一個靜態語言,意思每個 expression 在編譯期間就已經被確定型別了,又因為 Haskel...
今天我們來更加深入 Haskell 中的 List,昨天我們講到了運用無限 List 加上一些 function 可以幫我們快速產生一個 List,但如果我們今...
Day 04 | 簡簡單單的List 今天要來介紹不管在哪個語言都是非常常用的資料結構 List ,在 Haskell 中 List 中每個元素只能是同樣型別...
今天來介紹 Haskell 的基礎語法,我們可以先用 ghci 來試著運行 Haskell 語法看看。 只要在 terminal 輸入 ghci 然後我們就可...
今天先來輕鬆的開發環境設定 因為 Haskell 是一個靜態語言所以我們勢必需要安裝所需要的編譯器,接下來我們都會使用最主流的 GHC (Glasgow Has...
Haskell 是什麼? Haskell 是一個非常純粹的函數式程式語言(functional progrmming language),它所擁有的一些特性像是...