わかめモナ化のLTのネタ作り
今、ローカルで動くサーバプログラム書いててNode.js+TypeScriptでやってるけどYesodでもよかったかもしれない。
2012-11-16 18:07:31なんで closeConnection :: SQLiteHandle -> IO () なんだろう? IO () ってなんだろう???
2012-11-16 18:30:41execStatement :: SQLiteResult a => SQLiteHandle -> String -> IO (Either String [[Row a]]) しっかり IO ついてた。やっぱり IO String から IO は取り出せないんだ!多分。
2012-11-16 18:32:21IO () の世界の中では IO String から副作用なしで String が取り出せるように見えるとかそういう感じなのだろうか…。謎だ。わかったような気がしてたけどわかってなかった感スゴイ。
2012-11-16 18:33:33@vvakame void closeConnection(SQLiteHandle h); みたいなもんだと思ってくだされ
2012-11-16 18:34:09@vvakame "IO a" (aにはStringとかIntegerとか[b]とかの型が入る)ってのは、返り値の型が a のアクションを表す型なんですけど、返り値がないアクションの場合は "()" (unitと読む)という型をaのところに入れるのです。
2012-11-16 18:38:26IO () とかの中では IO String から String が取り出せたっぽい見た目にすることができるけど、その関数呼ぶとIOが伝染るからIO使わないロジックをごぎごぎ書いて最上位の小さい空間でIOちょびっとだけ使いましょうみたいな話しに違いない。
2012-11-16 18:41:05@vvakame "IO a" ってのはコンテナみたいなもんだと思ってください。〈(世界全体の状態), a型の値〉 という仮想的なコンテナがあって、〈w0, x〉に対してλz→〈(ここは隠蔽されている), f zというλ式をbindする(>>=)と、〈w1, f x〉が返ります
2012-11-16 18:49:05ぐぬぬ処理すると結果が [IO ()] 的な何かになってしまうでござる… mapM ってこういう時に使えば IO () になるんじゃなかったっけ…??
2012-11-16 18:49:06@NaOHaq そーすると、 新しい世界全体の状態が得られると思いますが、新しい世界全体の状態のうち変わった部分、を取得する方法がないような気がします?
2012-11-16 18:51:22