[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
826: デフォルトの名無しさん [sage] 2011/12/24(土) 05:44:34.49 AAS
>>804
804(1): デフォルトの名無しさん [sage] 2011/12/23(金) 18:53:48.59 AAS
>>802
色んなものの「共通する性質」や「共通する関係」を抜き出し、
具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、
抽象化するという意味は同じ

どう抽象化するかという点で、IO型からObject型へとMonadへとで違いがでる

Haskell のモナドは (m を Monad クラスのインスタンスとして)
forall a b. m a -> (a -> m b) -> m b
forall a b. m a -> m b -> m b
a -> m a
String -> m a
という4つの「演算で抽象化」してる(うち2つだけで十分だが)

特にモナド同士の演算がまたモナドになるという性質と、
モナドの外からはモナドの具体的な実態は見えないという性質が特徴的だから、
そういう性質が活かせるところでもてはやされる

オブジェクト指向のObject型がどういう性質の抽象化なのかは忘れた
, >>807
807(1): デフォルトの名無しさん [sage] 2011/12/23(金) 19:37:49.40 AAS
>>802
その例だと、内部でやってることもだいたい同じ
実際の型に応じて実装が選ばれる
実装を選ぶタイミングがコンパイル時か実行時かは違う

型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚
OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある
例えばsubtype relationが推移律をみたすみたいな強い性質がある
subtypeがあるとどうなるかは、Scalaが壮大な社会実験中
ありがとう。
でも、その理屈でIO()をモナドに抽象できるのだとすると、

「IO()で提供されていた種々の関数は全て、
モナドで提供されている演算子に置き換え可能である」

という前提条件が存在すると思うのだけど、どうだろう?

この条件が成立しないと、結局forallはIO()型の値を必要とするよね。
IO()をMonad m=>mで置き換え可能であるためには、forallを使っている
コードも含めて、IO()型に関連する「全ての関数」のモナド版を
用意してあげなくちゃいけないと思うのだけど。
827
(1): デフォルトの名無しさん [sage] 2011/12/24(土) 08:41:32.68 AAS
>>=, returnとそれと対応するIO版の関数の範囲に限ってその前提条件は成立する。
それが型クラスとそのインスタンス宣言の意味するところで、
この前提条件の表明がMonad m =>みたいな型シグニチャのコンテキスト。
828: デフォルトの名無しさん [sage] 2011/12/24(土) 08:55:33.85 AAS
>827の翻訳

一般にその前提条件は成立しない。
829
(2): デフォルトの名無しさん [] 2011/12/24(土) 11:15:48.48 AAS
cabal updateしようとしたんだけど落ちてる?
なんかタイムアウトしてしまうんだが。

取り急ぎ対応したいんだけど、ミラーとか指定できる?
830: デフォルトの名無しさん [sage] 2011/12/24(土) 11:20:48.10 AAS
さっき俺の方でも実行してみたけど、問題なくいけた
831: デフォルトの名無しさん [sage] 2011/12/24(土) 11:24:36.08 AAS
なんか自分だけっぽいな。どうすればいいんだろう。
pingも帰ってこない。
832: デフォルトの名無しさん [] 2011/12/24(土) 13:21:02.06 AAS
>>824
824(1): デフォルトの名無しさん [sage] 2011/12/24(土) 00:21:37.64 AAS
つまらない物だということにして安心したいんだよ
そうすれば理解する努力しなくていいから
>>825
825(1): デフォルトの名無しさん [sage] 2011/12/24(土) 00:50:28.05 AAS
理解できない自分の頭を嘆く必要もなくなるし。
理解するとか理解できるとか言ってる時点でダメなんよ。
833: デフォルトの名無しさん [sage] 2011/12/24(土) 13:24:10.63 AAS
最初に言ったのはラオウ
834: デフォルトの名無しさん [sage] 2011/12/25(日) 03:51:05.99 AAS
DNS引けてないようだったら、
DNSサーバーをgoogle提供の8.8.8.8にしてみるとかどうだい。
/etc/hostsとかでipアドレス指定してもいいけど。

ほかの要因だったら、proxyかますとか。
835
(1): デフォルトの名無しさん [sage] 2011/12/25(日) 10:41:23.31 AAS
硬派なお前らなら勿論イヴもコーディングだったよな?な?
836: デフォルトの名無しさん [sage] 2011/12/25(日) 11:41:56.88 AAS
遺伝子をコーディングしてました
837: デフォルトの名無しさん [sage] 2011/12/25(日) 12:07:45.95 AAS
アレをコーティングして入れてました
838: デフォルトの名無しさん [sage] 2011/12/25(日) 18:07:33.55 AAS
>>835
IO Monadをかぶせて副作用なし。
839: デフォルトの名無しさん [] 2011/12/25(日) 18:31:48.82 AAS
いろいろ見てみたけどモナドってやっぱおれには難しいわ。
なんか純粋な関数型言語にふつうのプログラミング言語ならふつうにできることを
組み込みたいという空気かなと思うが、あまりそう強調されてもいないようだし、
まず目的がようわからんわ。
抽象化とか言うけど、それはモナドに限らん関数型の特徴だと思うし。
だれかこういうのちょっと教えてくれんかなスマンが。
840
(1): デフォルトの名無しさん [sage] 2011/12/25(日) 18:41:00.60 AAS
「こういうの」って何だ?
具体的に訊いてくれ
841
(2): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 18:48:48.79 AAS
まずモナドとIOモナドを区別してくれ
純粋さを保ったまま入出力をする仕組みがHaskellにはあって、IOという名前の型が使われる
モナドというのはある種の型を抽象的に扱う枠組み
(どういう型をどうやって扱うのかは一言では説明できない)
で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)

で、モナドが知りたいの?IOが知りたいの?
842
(1): デフォルトの名無しさん [sage] 2011/12/25(日) 18:51:02.48 AAS
関数に副作用があるかどうかが型を見るだけで解るのは利点
843: デフォルトの名無しさん [sage] 2011/12/25(日) 19:00:41.02 AAS
チューしようか
844
(1): デフォルトの名無しさん [] 2011/12/25(日) 19:03:59.38 AAS
すぐ反応してくれてうれしいな
>>840
モナドでやりたいことは何なの?ってことなんだが。
関数型にどうのこうのって書いたんだが、そういう「目的」っていうの?
そういうのが知りたいんだが。
いろんなモナドがあるようなんで、それがわかいにくいんだが。
>>841
IOモナドはモナドのひとつじゃないん?
その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
知りたいのはモナド。IOがその代表ならそれも知りたい。
>>842
それは型指定を工夫したらできるんじゃないん?
こんな質問じゃったんじゃが、みなスマンのう
845
(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:04:09.30 AAS
IO がモナドで表現されるようになった経緯は、
「A History of Haskell」の Section 7 に詳しく書かれている

外部リンク:research.microsoft.com
846
(3): デフォルトの名無しさん [sage] 2011/12/25(日) 19:05:37.16 AAS
>>841
> で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)

なるほど。
いつまでもIOモナドは難しいと言われ続ける理由がわかったよ。

本当にIOモナドは「たまたま」モナドの枠組みに適合してるの?
わざわざモナドとしての宣言をしているのを「たまたま」というの?

わざわざ色々なIOをモナド則にあわせて整理して宣言しているのを
「たまたま」とか言って誤魔化しているわけでしょ。
学ぶ人達の能力を信用していないから、そうやって誤魔化すわけだ。

そうやって学ぶ人達を信用せずに、ありのままを伝えず、
取って着けたようなすぐバレるデッチアゲばかり言うから、
学ぶ人達はどの言葉を信用すればいいかわからなくなって、
「Haskellは難しい」という結論になっているんじゃないの?
847
(2): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/12/25(日) 19:10:26.88 AAS
>>844
>IOモナドはモナドのひとつじゃないん?
そうだよ
>その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
IOモナドがその仕組み。それ以外のモナドは全然別のことをする(構文解析とか)
>純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
副作用のある関数を一切使わずに入出力のあるプログラムが書ける
848: デフォルトの名無しさん [sage] 2011/12/25(日) 19:10:45.98 AAS
モナド則が
{
nop
foo
bar
baz
nop
}
みたいなのを正しく扱うのに都合がいいということはわかる
849
(3): デフォルトの名無しさん [sage] 2011/12/25(日) 19:12:41.64 AAS
>>847
> 副作用のある関数を一切使わずに

ダウト。Haskell上の値としては副作用はないが、
裏でランタイムがちゃんと副作用を起こしている。
850
(1): デフォルトの名無しさん [sage] 2011/12/25(日) 19:16:51.65 AAS
>>846
モナドは副作用を保証してくれないから、
モナドだけではI/Oは不可能。
副作用をうまく取り扱うための枠組みを、
モナドは提供できているというだけの関係。
1-
あと 128 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s