What have you found for these years?

2010-01-01

ReaderT Env Maybe Val (1)

先寫到這... 把 Cls (Val -> Val) 改寫成 Cls Name Expr Env 後,
確實很順利把那個問題解決掉了。有趣的是,稍微調整一下,可以發現普通的:

eval :: Expr -> Reader Env Val

和 transformer 版的:

eval :: Expr -> ReaderT Env Maybe Val

實作幾乎是 identical 的。唯一的差別在 (Var name) 的實作,前者:

eval (Var name) = asks (lookup name) >>= return . fromJust

後者:

eval (Var name) = ReaderT (asks (lookup name))

我試半天搞不懂為什麼會有這樣的差異 @@" 應該是我哪裡沒寫好?
照理說應該全部都能寫成 return 的形式吧?除此之外,
真的完全一模一樣,只有 type 不同而已。感覺好神奇啊... XD

因為不想重開一個 git repo 打擾 follower,
所以我把程式放在 godfat.org 裡面。
bad_ 開頭的是一開始 Cls (Val -> Val) 那個版本,
其餘的則是改成 Cls Name Expr Env 的版本。

下一步是想加上 error handling, 不過不知道怎麼加..?
而且為什麼沒有 MaybeT 和 ListT 啊?不懂?
最後大概就是亂加一堆 monad 進去看看。All About Monads
裡有非常瘋狂的範例,我懷疑死前有沒有辦法看懂...

* * *

讀 monad 好漫長啊。google 第一筆幾乎都是 All About Monads.
這篇寫得非常非常清楚簡潔,但有些地方真的太太太複雜了...
實在比較適合熟練之後,拿來複習或是參考的手冊。
我東看西看了一堆東西,這裡整理出幾個比較常看的:

jinjing 提供的 Of monads and spacesuits
其實這篇我只看了一次,大概就稍微印證一下之前的理解這樣 @@

穆老師的,有一些有趣的細節可以相印證。
單子 (monad) 入門(一)
單子 (monad) 入門(二)讀取單子

我對於 transformer 大多的理解,大多出自 Haskell/Monad transformers
很詳細地說明了一些細節,而不是像 All About Monads 那樣... orz

接著就是之前提過Monad Transformers Step by Step
雖然沒講細節,但這篇有蠻詳細的範例...

除此之外就是 doc 查 lib 的定義用:
base-4.2.0.0: Basic libraries
Haskell Hierarchical Libraries

之前好像還有個 monad don't panic 之類的,不過還沒看。
但我猜以上全部看完,可能也不需要看了吧...?

==
該休息了 orz

5 retries:

jinjing said...

看 transformer 的话直接看 mtl 的代码吧,立刻就懂了; 其实就是一个大 hack,完全没什么技术含量 ><

刚发现 blogger.godfat.org 要穿墙才能读的 ><

Lin Jen-Shin (aka godfat 真常) said...

一個大 hack 嗎? XDDDDD
等會就去找來看看

ghs.google.com 又被擋嗎? @@
應該不是單單擋這裡吧? XD
有什麼 sensitive 的內容嗎? XD

Lin Jen-Shin (aka godfat 真常) said...

mtl 的程式好短 XD

查了一下又看到這個
unique static ip per app/account (域名绑定独立 IP)

如果說這是個大問題,我再來看看要怎麼做 @@"
例如回到 blogspot 之類的...

jinjing said...

原来是域名被挡了,不过 blogspot 和 blogger 域名一直是被封杀的,换 blogspot 的服务也是一样的吧?我倒是一直穿墙。。呵呵

Lin Jen-Shin (aka godfat 真常) said...

@@
原來 blogspot 和 blogger 也都被擋
那就真的只能照上面說的用 ip 了...
scalability 大概會下降 XD

那... 先不管好了 XD
如果穿牆很容易 XD

Post a Comment

All texts are licensed under CC Attribution 3.0