Haskell 不斷的做抽象,有好的運用這些抽象的例子嗎?

時間 2021-05-31 12:44:10

1樓:Sqd You

例如這個SO答案裡的例子 scala - When are higher kinded types useful?

首先我們需要一顆二叉樹

data BST a = Tree (BST a) a (BST a) | Leaf

但是如果我們什麼時候需要一顆三叉樹呢? 四叉樹呢?

於是我們做出了一些改動

data Tree f a = Tree (f a) a | Leaf

data Pair a = Pair a a

data Tuple3 = Tuple3 a a a

現在我們可以用 `Tree Pair a` 來表示二叉樹, `Tree Tuple a` 來表示三叉樹, `Tree a` 來表示不定叉樹, 甚至 `Tree (Tree f) a`來表示樹套樹了

至於Functor, 你用不用Maybe/Either來做異常處理? 用到的話自然會使用到Functor (和Monad)

至於Monoid, 有沒有想過帶統計線段樹不一定非要儲存數字? 只要是Monoid例項, Set, List等都可以作為區間統計的內容. 以及為什麼區間和統計和區間最大值統計要分開實現?

它們都是R上不同的Monoid罷了.

2樓:

你去 Codewars 用 Haskell 刷題,先費好大力氣寫出來,再看別人的一行流,你就知道抽象是怎麼回事了(

入口:http://www.

3樓:

剛好在看這篇, 拾人牙慧

提及Functor跟Free, 還用到cata, ana, 都是用在遞迴資料結構

機器學習的決策樹就是種遞迴資料結構, 就可以用了cata用壓縮機函式摧毀結構, ana用種子函式生成結構, 互為對偶

Haskell 有哪些神乎其技的黑魔法?

Belleve fix 1 Lee 對我來說 Aeson Generics 就是黑魔法之一 例子來自 What I Wish I Knew When Learning Haskell 2.3 Stephen Diehl import Data.Text import Data.Aeson impor...

haskell中的callcc有什麼用?

應用 寫點個人理解 重點是理解下面這個函式的含義 gotoCont a r a Cont r x gotoCont c a Cont c a Cont c a 表示不管之後的延續如何定義,直接以引數a,執行c表示的延續。callCCf Cont c runCont f a Cont ca c 在ca...

Haskell 有哪些威力十足的庫?

活動小丑 基本上可以將任何recursive strucutre視覺化。putStr drawTree fmap show Node1 Node2 Node3 1 2 3putStr drawForest map fmap show Node1 Node2 Node3 Node10 Node20 1...