トップページtech
1001コメント306KB

関数型プログラミング言語Haskell Part19

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/06/27(水) 10:21:10.18
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
0075デフォルトの名無しさん2012/06/30(土) 19:58:22.73
誰が言ったか忘れた = 俺の脳内妄想
0076デフォルトの名無しさん2012/06/30(土) 23:13:18.06
>>68
セキュリティ系のハッカーがかっこいいってどんな価値観だよ。
厨二病にも程があるだろ
0077デフォルトの名無しさん2012/06/30(土) 23:15:14.06
触るなよ
大きくなっちゃうだろ
0078デフォルトの名無しさん2012/06/30(土) 23:19:26.51
fragがQuakeII相当をわずか43ファイル(空白/コメント含む)10Kstep以下で実装してしまったという事実は
行数=仕事量の考えが染み着いてるIT土方にとって脅威でしかないからパニックになるのもしかたないな
0079デフォルトの名無しさん2012/06/30(土) 23:57:33.50
>>72
DSL(Haskellコードの一部)から他言語へのトランスレート
つまり、自動プログラミングをやりたい
0080デフォルトの名無しさん2012/07/01(日) 00:09:09.37
>>74
他人のコードを読むときと1年くらい後にコードを読むときに物凄く役に立つと思います
0081デフォルトの名無しさん2012/07/01(日) 02:11:59.35
他人の目を気にしすぎ
しかも縁もゆかりもない赤の他人のために神経を使ってる感じ
0082デフォルトの名無しさん2012/07/01(日) 05:07:28.61
何言ってんだこいつ
0083デフォルトの名無しさん2012/07/01(日) 05:58:53.61
不毛だからHaskellの話しよーぜ!
0084デフォルトの名無しさん2012/07/01(日) 09:24:00.59
FRPっていつ勉強すればいいの?
リワハ済んだだけの若造にはまだ早い?
0085デフォルトの名無しさん2012/07/01(日) 09:49:33.36
FRPって y = f x を getY = do{x<-getX; return (f x)} にすればいいのか?
0086デフォルトの名無しさん2012/07/01(日) 12:33:40.07
>>85
質問の内容と意図がいまひとつ分らない。

もう少し詳しく話してくれないか。
どういった状況において FRP をどう利用しようとしていて、
どういった文脈でそのコード片が出てくるのか。

少なくともそれくらいは離してくれないと、何ともレスしようがない。
0087デフォルトの名無しさん2012/07/01(日) 13:00:07.17
>>84
RWH読んだなら十分
使うライブラリによってはApplicativeやArrowの知識が要ることがあるけど、
それは必要に応じてやればいい
0088デフォルトの名無しさん2012/07/02(月) 15:21:02.06
THとかFRPとかIterateeとかみんな使ってるの?
0089デフォルトの名無しさん2012/07/02(月) 15:38:37.38
そもそも誰もhaskellなんて使ってない
似非ハッカーが弄ってるだけの実用性0のオナニー言語
0090デフォルトの名無しさん2012/07/02(月) 15:48:07.35
まずい似非だなあ
0091デフォルトの名無しさん2012/07/02(月) 16:28:58.97
IOを使うより使わないほうがいい
THを使うより使わないほうがいい

後の禅オブHaskellである
0092デフォルトの名無しさん2012/07/02(月) 17:04:34.12
難しいもの=ハッカー
とか勘違いしてる馬鹿がいるね
0093デフォルトの名無しさん2012/07/02(月) 17:33:14.38
Iteratee系のライブラリは結構使われてるんじゃね
遅延IOはハンドル閉じるのが難しいっつー切実な問題があるからなぁ
0094デフォルトの名無しさん2012/07/02(月) 20:04:29.45
>>92
ハッカー=弱い型
と勘違いしてる京都の社長さんもいたねぇ
0095デフォルトの名無しさん2012/07/02(月) 20:40:03.33
発火!
0096デフォルトの名無しさん2012/07/02(月) 21:17:36.28
「Haskell信者」にその素晴らしさを熱く語られたときの平和で適当なかわし方
http://cielquis.net/religion/results/2cf68ea14896ef51940cdc3dbfe96ed5a1084ccd.html
0097デフォルトの名無しさん2012/07/02(月) 21:49:34.66
>>89
断言するが、ハッカーしか使えない言語は有害
0098デフォルトの名無しさん2012/07/02(月) 21:59:54.13
お前らがHaskellやっててもかっこいいと思わないよ シュシュシュ
知的優位立ちたがるためにHaskellやってんだろ???シュシュ
一般的名プログラミング言語をやってるやつに対して

キモヲタ「関数型プログラミング言語って知ってる?(ドヤッ)」
人間君「うむむむ」

っで知的優位に立ちたがる
マジゴミだな
なあ?出せー世お前シュシュ

お前らゴミクズよりなんかセキュリティハッカーのほうがまじすげーよ
お前らはゴミ
実用性にかける
面白みもない派手さにかける
カス
0099デフォルトの名無しさん2012/07/02(月) 22:00:25.21
お前らは微生物以下の存在
0100デフォルトの名無しさん2012/07/02(月) 22:01:38.73
コミュニケーションのためにHaskellやってんだろ?
素直に答えろよ
0101デフォルトの名無しさん2012/07/02(月) 22:05:49.92
>>98
プログラミングでカッコよさや面白みを追及するヤツは有害
0102デフォルトの名無しさん2012/07/02(月) 22:09:17.93
Haskellで話のネタつくってんじゃねーよゴミクズwww
0103デフォルトの名無しさん2012/07/02(月) 22:24:38.17
Haskell における FRP の発展に興味があり、
おそらく原点であろう論文「Functional Reactive Animation」を読みましたが、
よく分らない部分があります。

data Behavior a =
  (Time -> (a, Behavior a))
  (Ivl Time -> (Ivl a, Behavior a))

このビヘイビアの定義でインターバルを導入する意図は分ります。
(論文の最後のサンプルコードでなるほどと思いました)

しかし、Behavior a 型の値をどうやって作るのでしょうか。

Time によって値の変わらない定数的なビヘイビアなら簡単に作れますが、
たとえば Time -> Bool という型の関数を Behavior Bool 型にリフトアップするには、
どうすればいいのでしょうか。

具体的には、どうやって Ivl Time -> (Ivl a, Behavior a) 型の関数を作るか、です。

論文にはこの辺りの事は何も書かれていなかったと思うのですが、
もしかして私は何かどんでもない勘違いをしているでしょうか。
0104デフォルトの名無しさん2012/07/02(月) 22:27:16.92
>>97
お前とは一生無縁な話だろw
0105デフォルトの名無しさん2012/07/02(月) 22:36:55.11
>>104
仮に私と無縁ししましょう

そこら辺の零細ソフト会社のプログラマに、ハッカーしか使えない言語のメンテナンスができると思いますか?
そして、そのハッカーしか使えない言語を使えるようにするための教育コストのことを考えたことがありますか?
さらに、そんな言語が医療機器や金融関連のインフラに混入してたときの恐怖を想像できますか?
0106デフォルトの名無しさん2012/07/02(月) 22:41:47.08
最近ハスケルの案件がきたのだが
スパゲッティすぎて負えない
0107デフォルトの名無しさん2012/07/02(月) 23:25:04.02
恐怖の正体は
システムを作る人間とシステムを所有する人間が一致しないことなんだよな
0108デフォルトの名無しさん2012/07/02(月) 23:36:24.67
>>105
C++のことですよね。たいへんよくわかります
0109デフォルトの名無しさん2012/07/02(月) 23:58:17.12
adaは教育コストが高すぎる。あんなものがもし軍事関連機器に使われてるなんて考えたら、怖くて夜も眠れないよ。
0110デフォルトの名無しさん2012/07/03(火) 00:01:56.59
金融でOCamlやHaskell使われてるけどな
どうでもいいけど
0111デフォルトの名無しさん2012/07/03(火) 01:35:58.00
>>110
2000年問題のときにATMのソースコードの一部を眺めるチャンスがあったけど、機械語の「ソースファイル」を見付けたときは吹いた
0112デフォルトの名無しさん2012/07/03(火) 06:33:56.40
医療を例に出している以上、ここでいう金融は勘定系だろうけどな。
0113デフォルトの名無しさん2012/07/03(火) 07:03:40.66
医療を例に出すなら、ここでいうハッカーはブラックジャックみたいなやつなんだろう
0114デフォルトの名無しさん2012/07/03(火) 07:17:49.92
Haskellに興味ない => ふつう

Haskellを使ってる => 変わり者

Haskellが難しくて習得出来なかったのが悔しくて煽りにくる => 低能
01151132012/07/03(火) 08:55:36.05
>>114
変わり者って書くなよ
それが凄いことだと思ってはじめるやついるぞ

たとえば

xxxx=>HENTAI

とか書いちゃうと
世界で変態って言葉通じるだろ?
それもコミュニケーションで使えるし
変態は凄いことって定着してるから
そのxxxxを真似したくなるやつがでる
そういうのやめたほうがいい

それなら"ふつう”って書いとけ
人と違うことをやって ”「それまでの普通」ではない事に挑戦するのが面白い。”
つまりこいつらは ”奇特”、”超人的”にあこがれてるから

変態とか変わり者って書くと 普通から脱却したくて人間の個性の差別化を図りだすから
Haskellを使ってる=>”ふつう”ってかいとけ
わかったか?

でも”ふつう”って書くと、大衆に影響受けるやつは ”ふつう”なんだってなるだろ?
”ふつう”だから皆使ってるだろう 自分も使ってないと乗り遅れてるってなるだろ?
君の書き込みのせいでHaskellユーザーが増えたりする場合あるからやめろ
そういうのは書かなくていい
0116デフォルトの名無しさん2012/07/03(火) 08:57:06.62
良かったな。
0117デフォルトの名無しさん2012/07/03(火) 09:09:00.57
おまえら頼むから業務でつかわんでくれ
毎度スパゲッティしんどいんだわ
0118デフォルトの名無しさん2012/07/03(火) 09:11:00.96
>>117
使っちゃったー。ショボイスクリプトだけどね
0119デフォルトの名無しさん2012/07/03(火) 09:19:40.97
ガンガン使っていけば、>>117みたいなのを皆殺しにできそうだな!
0120デフォルトの名無しさん2012/07/03(火) 09:48:46.07
副作用と型への万全の対策からスパゲッティが生まれるのが面白い
0121デフォルトの名無しさん2012/07/03(火) 11:44:10.86
確かlift0とlift2が定義されてたんじゃない?
01221032012/07/03(火) 12:53:21.95
>>121
私へのレスでしょうか。

インターバルを導入する前のただの Behavior a には、
表示的意味論として確かに liftn が示されています。
(ここからただちに Haskell の関数も書けるので、定義されたも同然ですね)

しかし、インターバルを導入した後の Behavior a には、
liftn がどういった意味論になるのか示されていません。

正確に言えば、意味論自体は先ほどとほぼ同じで言わずもがなだと思いますが、
実際に Haskell の関数を定義しようとすると、
インターバルの扱いをどうすればいいのかよく分らないのです。

これ、引数で渡した Ivl Time 型の値をもとに、
つまりどの区間の時間かをもとに戻り値を計算するわけですよね。

どうやって計算するのでしょうか。
0123デフォルトの名無しさん2012/07/03(火) 15:47:30.82
data Spaghetti a = Spaghetti (Int -> ([a], Spaghetti a))

newSpaghetti xs = Spaghetti (\i->(take i xs, newSpaghetti (drop i xs)))
0124デフォルトの名無しさん2012/07/03(火) 23:16:00.60
>>122
区間解析そのものの詳細は資料参考にしろってことじゃないの?
0125デフォルトの名無しさん2012/07/04(水) 04:49:32.26
ここにはどうやらHaskellにコンプレックスを持った荒らししかいない様だ。
0126デフォルトの名無しさん2012/07/04(水) 06:13:30.38
有能なプログラマはHaskellみたいな糞言語使わないからな
もっと生産性の高いメジャー言語でバリバリコードを書く
ここにいるやつらは漏れなく自分が頭いいと勘違いして人と違う言語を使いたいだけのアホ
0127デフォルトの名無しさん2012/07/04(水) 06:30:22.26
パラドックスにコンプレックスを持つオーソドックス
0128デフォルトの名無しさん2012/07/04(水) 06:52:00.07
オッスオッスオッスみたいに韻を踏むのはやめろ
0129デフォルトの名無しさん2012/07/04(水) 07:45:19.59
>>126
Haskellでまともにコード書けない低能のお前には
他言語と比較してHaskellの生産性が低いかどうかすら
判断できないじゃん
0130デフォルトの名無しさん2012/07/04(水) 12:06:39.18
>>129
低能にはhaskellは使えないっていう姿勢がまず間違いなんだよ
プログラミング言語は可能な限り平易であるべき
理論が先走っちゃってただ出入力するだけでもモナドとか訳のわからないものを使わなきゃいけないhaskellはただのオナニー言語でしかない

だいたいhaskellの売りである堅牢な型システムはチームでの開発でこそ威力を発揮するのに、低能は引っ込んでろじゃ意味ないだろバカ
0131デフォルトの名無しさん2012/07/04(水) 12:08:13.67
>>126
じゃ、おまえは何がネイティブランゲージなの?
PHPとか?
0132デフォルトの名無しさん2012/07/04(水) 12:10:16.15
低能に使わせなければいいだけ。
土方には必要ない。
土方は頭数仕事しりゃいい。
0133デフォルトの名無しさん2012/07/04(水) 12:38:54.80
>>131
目的に応じて適切な言語を選ぶだけ
ネイティブランゲージ(笑)
0134デフォルトの名無しさん2012/07/04(水) 12:49:42.86
くだらん事でスレ消費するのはこの辺にしておこうよ
0135デフォルトの名無しさん2012/07/04(水) 15:31:56.31
http://www.sanspo.com/geino/news/20120704/mar12070412490000-n1.html
haskell界の髭男爵はどうなの?
0136デフォルトの名無しさん2012/07/04(水) 19:18:58.43
>>130
Haskellが分からないなら分かるまで待とう
堅牢なシステムには余裕が必要なのに、可能な限り短時間で分かろうとするのは間違いだ
0137デフォルトの名無しさん2012/07/04(水) 19:37:29.40
>>130
Haskell自体はさして難解でもないのに、大した努力もせずにすぐに投げ出したり意味がないと決めつけたりすることが低脳なわけ そんな人間はどこにいっても役に立たないから、引っ込んでてほしいの
0138デフォルトの名無しさん2012/07/04(水) 21:18:08.98
なんか煽りさんが増えてるね
0139デフォルトの名無しさん2012/07/04(水) 22:01:27.94
すごHディス作戦が不発に終わって(外に準備板まであった)奴らイライラしてるんだな
0140デフォルトの名無しさん2012/07/04(水) 22:29:43.98
煽りにマジレスしちゃってる人たちもいい加減気づいて欲しい。
0141デフォルトの名無しさん2012/07/04(水) 22:33:00.76
ラムダとポイントフリーは
くだらない相手を名指ししないことで生産性を高める
01421032012/07/04(水) 22:36:21.22
>>124
論文の参考資料をいくつか辿ってみました。

区間解析そのものがどういうモノかはそれで分りますが、
連続値を引数とする関数 f を、区間を引数として区間を返す関数 g に変換する
効率の良い方法は結局のところ分りませんでした。

非効率で不正確な方法ならすぐに思いつきます。
入力された区間を適当にサンプリングして関数 f を適用し、
戻り値の最小値と最大値を区間として戻すような関数 g を定義すればいいです。
(Bool 型なら最小値 = False、最大値 = True として計算)

しかし、Behavior a 型の値に関数 during を適用する度にこんな計算をしていては、
アニメーション処理が間に合わず、使い物になりません。

Functional Reactive Animation の Predicate Event Detection のコードでは、
Behavior Bool 型の値への関数 during の適用が効率よく行えることを前提としていますが、
どなたか何かアイデアはないでしょうか。

Functional Reactive Animation では入力となる時間が単調増加なので、
その辺りを上手く利用するのではないかと思うのですが、今の私には思いつきません。


あと、>>122 で区間バージョンの Behavior a には liftn が定義されていないと言いましたが、
実際には同論文内で lift2 の意味論はちゃんと定義されていました。
ただ、肝心の関数 during は定義されていないので、実装的には情報不足です。
0143デフォルトの名無しさん2012/07/05(木) 01:57:38.60
>>138
分からん人にとっては、宣伝の割につまらんという意味で韓流と同じだからな…
0144デフォルトの名無しさん2012/07/05(木) 06:39:49.13
>>136
ホトトギス
0145デフォルトの名無しさん2012/07/05(木) 06:42:11.17
signatureっの訳語ってシグネチャ使わずに何が適切ですか?
0146デフォルトの名無しさん2012/07/05(木) 07:10:11.43
>>145
Haskell の関数定義や式などで型を明示する時に使うのなら、
「型宣言」と訳すこともできると思います。
0147デフォルトの名無しさん2012/07/05(木) 07:26:56.49
>>145
代数モデルなんかの文脈なら「指標」って訳語が一般的っぽいけど。(すげぇミスマッチな気がするけど)

ていうかどの文脈のsignature?
0148デフォルトの名無しさん2012/07/05(木) 07:36:41.20
Could not deduce 〜 arising from a use of 〜 from the context 〜 bound by the signature for 〜 at 〜.

の文脈です
0149デフォルトの名無しさん2012/07/05(木) 08:18:26.76
>>148
その意味の「文脈」じゃねえよwwwwwwwww

そのsignatureは何に関する話題で出てきた用語なの?ってこと。

メールとか認証に使う「署名」だってsignatureじゃん?
名前と型のセットもsignature。
代数モデルなんかの文脈だと、「指標」って訳語が一般的みたいだけど、
普通のプログラマや、言語リファレンスで使われてるのは見たことない。
カタカナでシグネチャが普通じゃん?
0150デフォルトの名無しさん2012/07/05(木) 08:53:55.50
もう型指標って訳します><
0151デフォルトの名無しさん2012/07/05(木) 09:26:08.02
GHCiではコンパイル通るのにrunghc setup buildで通らないなんてあるんですね
0152デフォルトの名無しさん2012/07/05(木) 09:45:20.51
型クラスが、自身を実装する関数を公開しないなら
そのモジュールをインポートしたとき
インスタンス宣言をする事は不可能なのですか?


インポート → 再エキスポートする際に
どうも隠す人がいるようです
0153デフォルトの名無しさん2012/07/05(木) 12:44:09.15
>>152
型クラスが自身を実装する関数を公開しない

この文の意味がまず分らない。

自身を実装するというのは、その型クラスのインスタンスを定義する事だよね。
その関数を公開しないというのは、インスタンス内で定義されている関数の事?
それを公開するかどうかは型クラス側は全く関与しない事だと思うけど。

簡単なサンプルコードを出してくれないか。
0154デフォルトの名無しさん2012/07/06(金) 01:18:43.75
>>153
Eq は not が実装されてる
0155デフォルトの名無しさん2012/07/06(金) 09:36:47.76
>>154
答えになってない
0156デフォルトの名無しさん2012/07/06(金) 11:23:57.16
継続渡しで遊ぼうと思って少し実験してたら、Haskellがいつの間にか手続き型っぽくなってしまった


infixr 1 >::>
(>::>) = flip ($) -- x >::> f = f x
shift = id -- shift f = \x -> f x

calc =
 shift $ \x ->
 x + 2 >::> \x ->
 shift $ \y ->
 y + x >::> \y ->
 x * y

意訳
calc{
 x = shift;
 x = x+2;
 y = shift;
 y = y + x;
 return x * y;
}
shiftはperlのshiftみたいに、引数をとってくる


Monadやらで
do
 x <- hoge1
 x <- hoge2
と書けるのと同じことだけどね
0157デフォルトの名無しさん2012/07/06(金) 15:22:43.93
なぜモナドを使わないのか
0158Perl忍者 ◆M5ZWRnXOj6 2012/07/06(金) 16:06:46.86
モナドしか言えないか・・・
芸が無いな
0159デフォルトの名無しさん2012/07/06(金) 16:31:50.12
Haskellは実行時には型情報をなくしていると聞いたんだけれど、実行時にこのデータがこの型クラスを実装してるんだったらほにゃららっていうようなことは必要になる時ないの?
0160デフォルトの名無しさん2012/07/06(金) 16:43:11.25
ない。

そもそも、アップキャストが無いんだから
> この型クラスを実装してるんだったら
はすべて静的に解決できる。
0161デフォルトの名無しさん2012/07/06(金) 16:48:06.98
>>160
C#の話で悪いが、あるViewがINavigationAwareインスタンスを実装しているならNavigation=画面の遷移時にメソッドを呼ぶとか言うような場合、Haskellだとどうするの?
0162デフォルトの名無しさん2012/07/06(金) 18:03:52.22
Haskellの場合は、複数の値構築子を持つ型を
値構築子でパターンマッチして処理を分岐するコードが、
実行時には何を見て分岐してるかってことになるのかな?
0163デフォルトの名無しさん2012/07/06(金) 18:14:53.17
要はC言語と同じことをすればいいんだろ
.NETじゃない方のWindowsプログラミングをするとか
0164デフォルトの名無しさん2012/07/06(金) 23:25:53.71
C++のテンプレートの特殊化の方が近いんじゃないか?
0165デフォルトの名無しさん2012/07/07(土) 00:46:02.25
100歩譲ってsubtype polymorphismは
時々使いたくなるとしても
アップキャストは不要だろ
0166デフォルトの名無しさん2012/07/07(土) 02:20:45.94
アップキャストとダウンキャストを間違えた...
0167デフォルトの名無しさん2012/07/07(土) 07:03:08.82
値構築子

ねかまきずこ?
0168デフォルトの名無しさん2012/07/07(土) 09:29:05.42
>>165
すまん、なんでダウンキャストいらないのか教えてくれ
0169デフォルトの名無しさん2012/07/07(土) 10:01:27.90
オブジェクト指向でダウンキャストが必要なのは、メソッドを後から元のコードに手を入れないで(再コンパイル無しで)は増やせないからだ。

データの種類(クラス)に応じて振舞いを切り替えるには、
・クラスの実装側でメソッドをオーバーライドする
・オブジェクトの使用側でダウンキャストする
のどちらかになる。
ライブラリ側に親クラスがある場合、親クラスのメソッドは増やせないので、ダウンキャストが必要になる。

Haskellでは、代数的データ型を使って複数のデータの種類を表現するので、ダウンキャストが必要ない。
他の静的型付け関数型言語でも同じ。

ちなみに代数的データ型はScalaのオブジェクト指向の case classに対応する。
0170デフォルトの名無しさん2012/07/07(土) 10:03:07.24
・ダウンキャストは型安全じゃない
・ダウンキャストは代替手段が存在する
・ダウンキャストを必要とするレガシーコードがあるわけでもない
0171デフォルトの名無しさん2012/07/07(土) 10:04:44.97
多態なオブジェクトっぽいものは多くの場合 第一級の関数(というかHaskellならIO ()でも)で実現できる。
環境をクロージャに入れてしまえば、どんなデータでも関数の中で操作できてしまうからだ。

どうしても型に応じたディスパッチがしたいならば、型クラスと存在型が必要になる。ググれ。
それも流儀のひとつと言えなくもないけども、個人的にはあんまり要らない気がする。
0172デフォルトの名無しさん2012/07/07(土) 10:21:33.63
Data.Typeable なんかはダウンキャストっぽい例だから調べてみるよろし
でもそんなの使わないで済むほうが良い設計であることに疑いはない

expression problemを Haskell の型クラスがどう解決するのかをググって見てみるとよい
0173デフォルトの名無しさん2012/07/07(土) 10:24:15.30
>>169-171

ああHaskellではあとからある型クラスの実装をデータ型に追加できるんでしたっけ。
であれば、Viewクラスを管理するものであとからINavigatable的なものの実装を追加できるのでダウンキャストとかしないでできますか。
けどINavigatable的なものがもしも複数あった場合でViewの派生的なものが無数にある場合、インタフェースをあとから追加するならば必要な人だけ実装すればいいけれど、
代数的データ型や型クラスでのディスパッチの場合は全てに場合分けとか実装を書かなければいけなくて新たな機能追加時やViewの種類の追加時にコーディングする量が増えませんかね?
0174デフォルトの名無しさん2012/07/07(土) 10:24:26.78
>>168
そもそも「引数がaで戻り値がbの関数」と「aをbに変換するキャスト」を
区別する必要がない
関数は必要だがアップ関数とかダウン関数などというものは不要
■ このスレッドは過去ログ倉庫に格納されています