世界はHaskellプログラムが数秒前に写した説

世界5分前誕生説 presented by Haskell IO
3
屑軍師 @kuzugunshi

Haskellがすべて じゃなく すべてがHaskell

2015-11-14 19:44:21
Deprecatad @deprecatad

軍師のツイート見て考えたんだけど、 IOなどの現実に効果を与えるような副作用が純粋と捉えられるような空間はないのかな。

2015-11-14 19:44:25
Deprecatad @deprecatad

何を言っているのかわからないと思うけど僕もわからない。

2015-11-14 19:44:40
Deprecatad @deprecatad

この世界はHaskellで出来ている???

2015-11-14 19:45:08
Deprecatad @deprecatad

@kuzugunshi HaskellのIOも、RealWorldを引数に受け取って新しいRealWorldを返す…と考えると純粋な関数なんだよなぁ…。 やばい。

2015-11-14 19:46:59
Deprecatad @deprecatad

@kuzugunshi HaskellのIOも、RealWorldを引数に受け取って新しいRealWorldを返す…と考えると純粋な関数なんだよなぁ…。 やばい。

2015-11-14 19:46:59
Deprecatad @deprecatad

HaskellのIOのgetLineなどがRealWorldを引数として受け取り新しいRealWorldを返すのと 世界5分前誕生説を合わせると HaskellのIOは現実において純粋であって 全ての基軸はHaskellプログラムであることになる。

2015-11-14 19:48:39
Deprecatad @deprecatad

世界を跨ぐHaskellだ、すごい。

2015-11-14 19:48:58
Deprecatad @deprecatad

世界Haskellが5分前に作った説。

2015-11-14 19:49:33
屑軍師 @kuzugunshi

@aiya_000 捉え方を広くするか狭くするかという話ではないかと思う

2015-11-14 19:51:34
Deprecatad @deprecatad

言ってて気づいた!! StateやReaderを代表とするモナドって、do式の中で引数を文脈として暗黙的に処理するじゃん。 こういうの。

2015-11-14 19:56:04
Deprecatad @deprecatad

f :: Reader Int Int f = do a <- ask return $ a + 10 x = runReader f 10 これでxに20が入る。

2015-11-14 19:57:42
Deprecatad @deprecatad

このとき、関数fには引数が明示されていないのに、fは10と一緒に呼び出されている。 つまり10はfの暗黙的な文脈と言えると思うんだけど

2015-11-14 19:58:43
Deprecatad @deprecatad

これってIOモナドも同じだったんだ。 つまり g :: IO String g = do a <- getLine print a return a y = g >>= return この時gを呼び出す際は何も引数に指定されていない…けれど

2015-11-14 20:01:13
Deprecatad @deprecatad

本当はgにも引数が渡されていて、g内部で文脈として実行されている。 その引数こそがRealWorldだったんだよ!!

2015-11-14 20:01:53
Deprecatad @deprecatad

GHCのIO型の定義を見た時に、気付けなかった。 1年越しくらいの気づきだ。

2015-11-14 20:02:25
Deprecatad @deprecatad

(つまり、getLineは現実を引数として改変した現実を返す関数)

2015-11-14 20:02:56
Deprecatad @deprecatad

もっと言うと、この考えでいくとgetLineも純粋な関数であって 純粋な関数はものからものに写すだけだと思うので IOは現実から新しい現実への橋。

2015-11-14 20:04:00
Deprecatad @deprecatad

僕らはgetLineを実行する度に、新しい世界へと移動しているんだよ!!

2015-11-14 20:04:19
Deprecatad @deprecatad

@kuzugunshi 僕はレイヤの問題だと考えてる。 現実世界ベースで考えるか、Haskellのプログラム内ベースで考えるか。 少なくともHaskellの中ではそうなってるんだよなあ…っていう感慨。

2015-11-14 20:10:57
Deprecatad @deprecatad

「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」

2015-11-15 13:42:32
Deprecatad @deprecatad

「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」

2015-11-15 13:42:32
Deprecatad @deprecatad

「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」

2015-11-15 13:42:32
Deprecatad @deprecatad

「モナド則を理解したおかげで彼氏ができました!」 「モナド則を理解したおかげでダイエットに成功しました!」 「モナド則を理解したおかげでお金持ちになれました!」

2015-11-15 13:42:32