起きた
type State s r = s -> (r, s)
bind :: State s a -> (a -> State s b) -> State s b
とすれば
bind sa func = \s -> func (fst (sa s))
加えて
return :: a -> State r a
return a = \s -> (a, s)
を付ければめでたくモナド
概念的にモナドが非常にしっくりくる場面として非同期操作を繋いでいく(JSでいうPromiseやJavaでいうFuture)があります
色々ぐぐって読んでるけど、オレンジがなんか作る場合、ぐちゃぐちゃに試作してる時は状態は外に持っていて清書する時は状態を中に持つようになるみたいな感じになるけど、その逆をするみたいでなんか・・・なんだろう><;
完全に主観で感覚でしかないけど、電子回路で言う所の「ブレッドボードで試作してから本番の機械の回路を作る」みたいなのを逆に、「完成品の機械(オブジェクト指向的?><;)は正しくないのでブレッドボードで作りましょう」みたいに感じる><;
OOとFPの対立みたいに見えるけどポピュラーなOO言語の機能セットとポピュラーなFP言語の機能セットとのギャップだと思いますね
Haskellは一見すると継承と隠蔽がなくてかつイミュータブル強制なのでそのギャップがあるんだけど、よくよく考えるとイミュータブルなオブジェクトはJavaでも普通に書けるんですね。
SMLやOCamlなどは参照が使えるしF#やScalaはその上private指定までできるので実際にはHaskellのような極端な言語は少ないかと。
@osapon いきなりすいません。おさぽんさん作の「フォローリンク」のソースを見てて気づいたんですが、これは自鯖にキャッシュ持ってやってるんでしょうか。自分も同じような事しようとして鯖への負担が気になっていて……
アイヌには「訳に立つ優れた道具にもカムイが宿っている」というカムイ観があったと記憶してるんですが、これって最近のおたくがよく使う「はさみ、ものが切れるので神」みたいな宗教観なんだろうか?