スタートHaskell第4回 まとめ
- kamakiri_ys
- 2936
- 0
- 1
- 0
#start_haskell ここでの return は、必ず成功するというよりもむしろ、コンテナに包む と捉えるとわかりやすいとのこと。return というより wrap という名前の方がイメージしやすい。
2011-11-13 13:48:58しかしこの章にこの神スライドがまいおりたのは、、、もはや必然。。。! @ruicc さん。。。! #start_haskell
2011-11-13 13:51:54パーサとは、 type Parser a = String -> [(a, String)] の、関数。また、(>>=)はパーサを取って無名関数を返す? #start_haskell
2011-11-13 13:54:12Haskellのreturnは一般的な命令型言語のreturnのような「元のルーチンにその値を"戻す"」のではなく「一度構造から取り出してイロイロやった結果を再度構造に"戻す"」でwrapとreconstructの中間くらいのニュアンスかと #start_haskell
2011-11-13 13:55:21p +++ q は、まずpでパースしてみて、成功したらqは使わず、失敗したらpの結果を捨ててqでパースする #start_haskell
2011-11-13 14:01:29たぶん違うと思います。。。tanakhさんの"床下配線"という用語がいちばんぴったり RT @brain_apple: (>>=)って継続? #start_haskell
2011-11-13 14:01:51(>>)のほうが継続に近いでしょうか? RT @master_q: たぶん違うと思います。。。tanakhさんの"床下配線"という用語がいちばんぴったり RT @brain_apple: (>>=)って継続? #start_haskell
2011-11-13 14:08:53>>= は単なるインターフェースです。継続は実装。 継続モナドを実装しているライブラリもあります RT @brain_apple (>>)のほうが継続に近いでしょうか? #start_haskell
2011-11-13 14:14:53床下配線
スライド27枚目。
見えないところを置き換えて抽象度を高くする。
http://www.slideshare.net/tanakh/monad-tutorial
素晴らしいと評判の @ruicc さんの資料を再掲 http://t.co/1XtcFDGS #start_haskell
2011-11-13 14:06:46無名関数開き括弧はその無名関数を作っている関数のお尻で閉じられるのか。 確かに練習問題やっててどこで閉じられてるのかわからなかった。 #start_haskell
2011-11-13 14:08:51>>=コンビネータでパーサを書くとカオス #start_haskell ))))の一番内側にreturnがあり、returnの引数の(func s num p num2)は外側のスコープから取ってきた値
2011-11-13 14:07:04-スライド36枚目より、無名関数のコード
パーサーコンビネータ
double =
sign >>= \s ->
digits >>= qnum ->
point >>= \p ->
digits >>= \num2 ->
return (func s num p num2)
do記法
double = do
s <- sign
num <- digits
p <- point
num2 <- digits
return (func s num p num2)
Parser a型に現れているaの型情報だけでパーサが書ける。parser a -> [(a,String)]のString型は裏に隠されている。抽象度が高い #start_haskell
2011-11-13 14:14:42P93下の方の p がわかりにくい(do を >>= に変換できず困る)と思うのですが、do 以降はこんな風に書けます。 #start_haskell item >>= \x -> item >>= \_ -> item >>= \y -> return (x, y)
2011-11-13 14:17:50文字列を数式として扱うパーサを書くにあたって、(*)は(+)より結合順位が高い(先に計算する)。これを型定義として書き、パーサとして書き下すとパーサ出来上がり #start_haskell
2011-11-13 14:21:04