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:
看 transformer 的话直接看 mtl 的代码吧,立刻就懂了; 其实就是一个大 hack,完全没什么技术含量 ><
刚发现 blogger.godfat.org 要穿墙才能读的 ><
一個大 hack 嗎? XDDDDD
等會就去找來看看
ghs.google.com 又被擋嗎? @@
應該不是單單擋這裡吧? XD
有什麼 sensitive 的內容嗎? XD
mtl 的程式好短 XD
查了一下又看到這個
unique static ip per app/account (域名绑定独立 IP)
如果說這是個大問題,我再來看看要怎麼做 @@"
例如回到 blogspot 之類的...
原来是域名被挡了,不过 blogspot 和 blogger 域名一直是被封杀的,换 blogspot 的服务也是一样的吧?我倒是一直穿墙。。呵呵
@@
原來 blogspot 和 blogger 也都被擋
那就真的只能照上面說的用 ip 了...
scalability 大概會下降 XD
那... 先不管好了 XD
如果穿牆很容易 XD
Post a Comment
Note: Only a member of this blog may post a comment.