- deprecatad
- 2941
- 0
- 0
- 0
軍師のツイート見て考えたんだけど、 IOなどの現実に効果を与えるような副作用が純粋と捉えられるような空間はないのかな。
2015-11-14 19:44:25@kuzugunshi HaskellのIOも、RealWorldを引数に受け取って新しいRealWorldを返す…と考えると純粋な関数なんだよなぁ…。 やばい。
2015-11-14 19:46:59@kuzugunshi HaskellのIOも、RealWorldを引数に受け取って新しいRealWorldを返す…と考えると純粋な関数なんだよなぁ…。 やばい。
2015-11-14 19:46:59HaskellのIOのgetLineなどがRealWorldを引数として受け取り新しいRealWorldを返すのと 世界5分前誕生説を合わせると HaskellのIOは現実において純粋であって 全ての基軸はHaskellプログラムであることになる。
2015-11-14 19:48:39言ってて気づいた!! StateやReaderを代表とするモナドって、do式の中で引数を文脈として暗黙的に処理するじゃん。 こういうの。
2015-11-14 19:56:04f :: Reader Int Int f = do a <- ask return $ a + 10 x = runReader f 10 これでxに20が入る。
2015-11-14 19:57:42このとき、関数fには引数が明示されていないのに、fは10と一緒に呼び出されている。 つまり10はfの暗黙的な文脈と言えると思うんだけど
2015-11-14 19:58:43これってIOモナドも同じだったんだ。 つまり g :: IO String g = do a <- getLine print a return a y = g >>= return この時gを呼び出す際は何も引数に指定されていない…けれど
2015-11-14 20:01:13本当はgにも引数が渡されていて、g内部で文脈として実行されている。 その引数こそがRealWorldだったんだよ!!
2015-11-14 20:01:53もっと言うと、この考えでいくとgetLineも純粋な関数であって 純粋な関数はものからものに写すだけだと思うので IOは現実から新しい現実への橋。
2015-11-14 20:04:00@kuzugunshi 僕はレイヤの問題だと考えてる。 現実世界ベースで考えるか、Haskellのプログラム内ベースで考えるか。 少なくともHaskellの中ではそうなってるんだよなあ…っていう感慨。
2015-11-14 20:10:57「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」
2015-11-15 13:42:32「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」
2015-11-15 13:42:32「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」
2015-11-15 13:42:32「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」
2015-11-15 13:42:32