What have you found for these years?

2011-05-07

denotational programming

updated: 2011-05-08 13:14 後來自己實驗發現 data/newtype
其實沒有 strictness 上的差別,Learn You a Haskell for Great Good!
這邊有點誤導...



IO monad 是黑魔法,pattern matching 有一半在詐欺...

這是最近在讀 Learn You a Haskell for Great Good!
Haskell: Not pure enough? 還有
Unraveling the mystery of the IO monad 等等,
加上過去的一些經驗後得到的暫時結論.....

簡單地說的話,就是 IO monad 跟其他 monad 根本完全不同?
很多地方嘗試教人 Haskell 會想從 IO monad 開始,畢竟連
Hello, World! 都不能跑,算什麼寫程式?可我真的認真覺得,
無論如何都不要先接觸 IO monad, 因為這真的是很詭異的東西...
用來用去得到的結論,都只覺得跟其他 monad 不太一樣。

至於 pattern matching, Learn You a Haskell for Great Good!
很明白地指出了,用在 data 上的 pattern matching 是 strict 的,
而用在 newtype 上的 pattern matching 則是 non-strict 的。
忽然間就讓解決了許多讓我困惑許久的疑問 --

updated: 2011-05-08 13:14 後來自己實驗發現 data/newtype
其實沒有 strictness 上的差別,Learn You a Haskell for Great Good!
這邊有點誤導...


為什麼明明應該要是 non-strict 的,卻變成是 strict 的?
為什麼可以「強迫」haskell 去計算某些東西?為什麼這些手法有效?
看來看去,好像都是歷史或是實作、現實考量,其實沒什麼特別的
道理在內?

為什麼 monad 是 applicative functor, 在 haskell 上卻沒有
特別這樣限制?該書說因為 monad 早在 applicative functor
之前就加入了 haskell, 因此沒有明確這樣的限制。

然後很多原本一直搞不懂到底要怎麼連起來的東西,終於有一點連起來的跡象。

不過嘛,就像 library 也統治著 programming language,
有一點跟現實接軌的地方,總永遠是第一步吧?只是覺得,
好像很少地方有在解釋這些一直讓我搞不懂的例外,以為
有另外一個更高層的東西,可以一口氣解釋這些東西....

* * *

標題的 denotational programming 來自:
Is Haskell a purely functional language?

或許這真的是個比較好的詞吧 XDD


p.s. 看什麼時候可以翻翻看這篇
The Haskell Programmer's Guide to the IO Monad --- Don't Panic
上次看 Abstract and Concrete Categories - The Joy of Cats
看到完全看不下去了,他的 concrete 對我來說還是太 abstract... XD
沒有實際的程式舉例,看不懂 :o

related post: 1938. 05-05 bottom, bottom, ⊥, ⊥, ⊥...

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0