関数型プログラミング言語Haskell Part29at TECH
関数型プログラミング言語Haskell Part29 - 暇つぶし2ch1:岡部メモリリーク健
15/07/14 19:27:09.01 jJ1YDtNe.net
関数型プログラミング言語 Haskell について語るスレです。
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 毛の壁(岡部健)の話は禁止な
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
haskell.org (公式サイト)
URLリンク(www.haskell.org)
前スレ
関数型プログラミング言語Haskell Part28
スレリンク(tech板)

2:岡部メモリリーク健
15/07/14 19:28:16.17 jJ1YDtNe.net
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
URLリンク(en.wikibooks.org)
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
URLリンク(learnyouahaskell.com)
Real World Haskell (同名書籍の無料オンライン版)
URLリンク(book.realworldhaskell.org)
(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
URLリンク(wiki.haskell.org)
Haskell - Wikibooks (先述Wikibooksの日本語版。未編集の項目、多)
URLリンク(ja.wikibooks.org)
Programming in Haskell
URLリンク(www.sampou.org)
Haskell のお勉強
URLリンク(www.shido.info)
Haskell Programming
URLリンク(www.geocities.jp)
本物のプログラマはHaskellを使う:ITpro
URLリンク(itpro.nikkeibp.co.jp)
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
URLリンク(gihyo.jp)

3:岡部メモリリーク健
15/07/14 19:30:31.82 jJ1YDtNe.net
過去スレ一覧
27) スレリンク(tech板)
26) スレリンク(tech板)
25) スレリンク(tech板)
24) スレリンク(tech板)
23) スレリンク(tech板)
22) スレリンク(tech板)
21) スレリンク(tech板)

4:岡部メモリリーク健
15/07/14 19:31:05.70 jJ1YDtNe.net
20) スレリンク(tech板)
19) スレリンク(tech板)
18) スレリンク(tech板)
17) スレリンク(tech板)
16) スレリンク(tech板)
15) スレリンク(tech板)
14) スレリンク(tech板)
13) スレリンク(tech板)
12) スレリンク(tech板)
11) スレリンク(tech板)
10) スレリンク(tech板)
09) スレリンク(tech板)
08) スレリンク(tech板)
07) スレリンク(tech板)
06) スレリンク(tech板)
05) スレリンク(tech板)
04) スレリンク(tech板)
03) スレリンク(tech板)
02) スレリンク(tech板)
01) URLリンク(pc.2ch.net)

5:デフォルトの名無しさん
15/07/14 20:28:01.97 0RtCvlur.net
匿名掲示板に
「児童ポルノ単純所持で捕まったら無罪だったとしても社会的に終わるぞ」
という脅し文句を連呼してる人がいる
確か日本IBM会長が痴漢で捕まった時に騒いでたの2chの一部だけで
本当に痴漢で捕まったと思ってる人がほとんどいなかった記憶あるのだが

6:デフォルトの名無しさん
15/07/14 21:11:22.75 i6nYqHOg.net
AIZU ONLINE JUDGE 競技プログラミング
URLリンク(judge.u-aizu.ac.jp)
Haskellで書けるようになった

7:デフォルトの名無しさん
15/07/14 21:59:12.35 rJOXcg+a.net
>>6
うおおお!!朗報だありがとう!!!

8:デフォルトの名無しさん
15/07/14 22:54:43.45 zZLZaIbg.net
このスレが本スレだな。例のAAが無いと盛り上がらん。

9:デフォルトの名無しさん
15/07/14 23:45:50.85 9bHYU59E.net
>>6
うおおお!やったぜ。

10:デフォルトの名無しさん
15/07/15 08:14:27.60 4Hwk0PWM.net
命令型でないとrangeもmapも書けないのは海外では常識。
そのことは海外のサイト見れば明らか。権威のある人物ならみんな知ってる

11:デフォルトの名無しさん
15/07/15 10:03:03.19 YlUThGkU.net
>>10
それはわからんのよ。
バイオコンピュータによって可能になるかもしれんしな。
ただ、今目の前にあるのはバイオコンピュータではないってことが大事なんだろうな。
バイオコンピュータが目の前に来てからHaskellを使おうと考えるのが普通の人だわな。
まあその時には、Haskellは無くなってるだろけどな。

12:デフォルトの名無しさん
15/07/15 10:12:30.07 7IHYvImg.net
URLリンク(web.archive.org)

13:デフォルトの名無しさん
15/07/15 10:14:47.29 FLOJGmtq.net
関数型言語におけるmapの定義:
URLリンク(www.haskell.org)
A Gentle Introduction to Haskell(やさしいHaskell入門)
"The well-known map function"(よく知られたmap関数)
map :: (a->b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
基本中の基本です。

14:デフォルトの名無しさん
15/07/15 12:17:03.32 xvlXRMcz.net
UCLA卒業と、岡部健(kenokabe・毛の壁)を語ろう [転載禁止]©2ch.net
スレリンク(joke板)

15:デフォルトの名無しさん
15/07/15 12:19:15.92 K1aSLVoR.net
>>14
もう許してやれよ

16:デフォルトの名無しさん
15/07/15 15:43:52.14 D9jiOfI+.net
岡部健がQiitaのコメント欄に出没してるぞ~(歓喜)
URLリンク(qiita.com)
今度の名前はqiitapostの模様

17:デフォルトの名無しさん
15/07/15 15:53:29.88 LpfZNZ91.net
とうとう荒らしに墜ちたか

18:デフォルトの名無しさん
15/07/15 19:19:40.86 UBeVoT4I.net
教育者の端くれなのに、やることが小さいね

19:デフォルトの名無しさん
15/07/15 22:55:42.93 d/UN4JRs.net
>>1にこんな品のないAAを貼り付けるのはよくない
こんなスレ、僕は認めないからな

20:デフォルトの名無しさん
15/07/16 04:10:56.66 KHTiVbh0.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
こんにちは。
私は現在、関数型プログラミングを勉強している者で、まさにこちらのスレで批評されている書籍を読んで、思考を切り替えるためのコツを分かり易く学べたと考えている者です。
様々な視点から学び、理解を深めたいと考えており、こちらのスレも目を通し、関心を持って注目しております。

21:デフォルトの名無しさん
15/07/16 18:10:05.00 GJpPkx9w.net
mapは命令型でしか書けない。

22:デフォルトの名無しさん
15/07/16 20:22:23.87 r83nWszG.net
おい、Codepadのようなものを「エミュレーター」と解釈できる、なんらかの要素があるとしたらどのあたりなんだ?

23:デフォルトの名無しさん
15/07/17 09:35:07.66 tmwhQ/Tf.net
モナドって一言で言うとなんなん?

24:デフォルトの名無しさん
15/07/17 10:24:36.36 F5MI8UaQ.net
世界線

25:デフォルトの名無しさん
15/07/17 10:36:26.09 MFPhKAxg.net
>>23
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a
っていう関数が定義されていてモナド則を満たすもの

26:デフォルトの名無しさん
15/07/17 11:26:02.98 6p5xRLuM.net
>>25
なるほど
やっぱり岡部健の間違いか。

27:デフォルトの名無しさん
15/07/17 13:59:02.04 ZQ7d1iCZ.net
foldでmapは書けるが、岡部健はその事と間違えてたんだろうな

28:デフォルトの名無しさん
15/07/17 18:24:18.12 xMYrjQca.net
>>25
一言で言うとなんなん?言うてるやん
それともほんとは分かってないから言えないとか?

29:デフォルトの名無しさん
15/07/17 20:05:48.09 OMUEmUCh.net
なんやこら調子乗んなしばくど

30:デフォルトの名無しさん
15/07/17 22:36:24.63 5l1JDgrx.net
>>28
「一言」って、どれくらいの長さまで認めてくれるの?

31:デフォルトの名無しさん
15/07/17 23:01:29.55 MFPhKAxg.net
>>28
自己関手の圏におけるモノイド対象

32:デフォルトの名無しさん
15/07/18 00:36:23.29 74tlor8C.net
>>23,28
順次、反復、分岐のうち分岐を可能にする構造[1]
という説明であれば一般的なプログラマは理解できるはず
[1] URLリンク(d.hatena.ne.jp)

33:デフォルトの名無しさん
15/07/18 03:20:25.11 uyPUGWQb.net
一言で一言でって、一言で言えたら定義がそもそもそうなってるわ!
一言でいっちゃうと必ず嘘を含むので言葉尻をとらえる重箱の隅をつつく言葉遊び勢を気にしておいそれと一言で言えないんだよ
だから一言で言って欲しいなら、『厳密でなく細かな間違いを含んだ私見でいいので、大雑把で直感的に言い直すとどんな風にとらえておけば当たらずとも遠からずですか?』って訊けよな

34:デフォルトの名無しさん
15/07/18 03:26:05.93 gfB+6PlW.net
>>32
その説明、ずっと分からなかったんだけど、反復を実現するのはApplicativeなの?
単に関数を再帰的に定義すればいいんじゃないの?

35:デフォルトの名無しさん
15/07/18 09:51:48.04 H0ZPg8aJ.net
>>31 じゃなくて
>>32
そうそうこういうのがいいんだが、
モナドって、命令型でふつうにできてることを関数型の中でもやりたいってことでOK?
そうすると、IOはいいけどMaybeやListが置いてけぼりになるんじゃないの?

36:デフォルトの名無しさん
15/07/18 11:55:58.35 wQVOOXnd.net
Maybe/Eitherならエラー時の処理、リストならリスト内包表記におけるフィルター処理が分岐にあたる
他のモナドだと直感的に「分岐」とはみなせないような例もあるかもしれないけど
そのモナドなりの意味で分岐を解釈できるはず
Functorを箱とみなすか文脈とみなすかみたいな話と同じで
一言で言おうとしたときに具体例を選べばどうしたって他で無理のある解釈が出てくるわけで
そこを突っ込みたかったら結局「定義にもどれ」ということになる

37:デフォルトの名無しさん
15/07/18 12:31:05.33 H0ZPg8aJ.net
>>36
ああそう、やっぱり>>32はあくまで初心者向けの通俗的解釈に過ぎないわけね。
また振り出しにもどったわw
> そこを突っ込みたかったら結局「定義にもどれ」ということになる
突っ込みたいわけじゃないんだが。。。
「定義にもどれ」ってのは、一見もっともに聞こえるがダメダメよw
「なんでそんな定義なの?」というのが大事なわけで。
それに定義というなら、『Monad は、単なる型クラスの一つで、それ以上でも
それ以下でもありません』でほんとおしまいなんだし

38:デフォルトの名無しさん
15/07/18 12:36:02.25 v0EKlLM2.net
皆様方
以降、スルーでよろしくおながいします

39:デフォルトの名無しさん
15/07/18 13:51:37.96 0Oe5sxAP.net
モナド変換子が絡むと一気にむずかしくなるなぁ
StateTとIOの複合は頻出っぽいから頑張って身につけたい
なにか参考になるサンプルとかないでしょうか

40:デフォルトの名無しさん
15/07/18 14:56:48.04 BTDuC5lZ.net
URLリンク(gist.github.com)

これはどちらが正しいんだ?

41: ◆Ww2pZaKGaW0T
15/07/18 15:17:02.40 UfuhnolG.net
最初に無があった
無は有を生んだ
これが全ての真理

42:デフォルトの名無しさん
15/07/18 19:49:11.57 sxZpdZw2.net
>>40
ちゃんと見て無いけど、
どっちもどっちな感じ…

43:デフォルトの名無しさん
15/07/18 20:30:55.47 8uXNBMZf.net
>・他方、worldcomponentライブラリを用いてunmount処理を書こうにも、ライブラリ自体が対応していないので、
>状態を完全にリセットしてしまうか、ライブラリの実装の内部に立ち入らない限り、書けません。
>(これはworldcomponentが、unmountされたコンポーネントに対してもforceUpdateを呼び出してしまうせいなので、
>通常のライブラリであれば、そのような問題はありません。なお、基本的再確認ですが、
>Facebook Reactの公式マニュアル URLリンク(facebook.github.io) には "Normally you should try to avoid all uses of forceUpdate()"
>すなわち「通常はforceUpdate()のいかなる使用も避けるべきである」とあります。)
どう考えてもkenokabeのコードが悪いと思うが。

44:デフォルトの名無しさん
15/07/18 21:59:10.40 +ygt6sr1.net
>>37
うんじゃぁ これも通俗的な話だけど
(>>=) :: m a -> (a -> m b) -> m b
って関数が凄い便利なんだよ scalaだとflatMapなんていったりするけど
monadの力って (>>=) って関数が定義されてる mっていうデータ構造(文脈だの箱だの言われるが)
これをhaskellは副作用を扱うのに使ってるけど
副作用を普通に扱える言語でもmaybeやfutureみたいにエラー時の処理や非同期計算に便利なんだ
もちろん上は全然正確な話ではない

45:デフォルトの名無しさん
15/07/18 22:45:41.76 obUySxxZ.net
>>43
これに関してはメモリリークの件でコード改竄を指摘されて
「お前らだってコード改竄してるじゃないか!」
って言いたいんだろうなぁと思う。
事実関係よりも心の平安を保てるかどうかで発言してるっぽいし。

46:デフォルトの名無しさん
15/07/19 00:11:41.45 g7CK7gj2.net
main = do
print "Hello"
これをghc hello.hsすると生成された実行ファイルのサイズが1MB超えるんですが
こんなものですか?
もっと大量のコードが書けるほどのレベルではないんですが、500行ぐらい書いたらサイズが1GB言っちゃうんじゃないかと心配になりました

47:デフォルトの名無しさん
15/07/19 00:36:25.80 Nq0FmX+u.net
ランタイムの分がでかいからな、なんで線形に増加すると思ったのか

48:デフォルトの名無しさん
15/07/19 01:43:02.12 csGsF3Kw.net
qtライブラリを使えば、1mbぐらい気にならなくなるじゃろ。

49:デフォルトの名無しさん
15/07/19 07:26:20.64 au0Vcvuj.net
>>46
jhcを使うとランタイムがないぶんそれだけ小さくなるというのを
岡部究(master_q)さんが一時期熱心に調べてたな。

50:デフォルトの名無しさん
15/07/19 08:05:11.94 BgJ/88od.net
>>44 はかなり良い説明だと感じた。
一面を捉えた正確な説明だと思いますよ。

51:デフォルトの名無しさん
15/07/19 10:16:27.53 ZQ+VxBJa.net
>>44
> (>>=) :: m a -> (a -> m b) -> m b
うん、これは、たしかに
(a -> b) -> (m a -> mb)
m(a -> b) -> (ma -> mb)
に比べるとやや崩れているところな。そこが人間にとっていいってことか?
だが、IOからMaybeや非決定性まであまりに無節操に広く適用されるところが、
かえって、実はナンセンスなんじゃないの?と思ってしまうな

52:デフォルトの名無しさん
15/07/19 10:57:36.17 XE+dCI5P.net
取り敢えず初心者にモナドってなんなの?って訊かれたら、オレオレDSLのフレームワークって言っときゃ良いんでしょ?

53:デフォルトの名無しさん
15/07/19 13:47:54.47 I4MCl2HA.net
モノイド大将がボス

54:デフォルトの名無しさん
15/07/19 15:46:09.62 I1Wicbx/.net
>>52 その説明いつも全然意味不明

55:デフォルトの名無しさん
15/07/19 16:48:46.04 OqblcV5w.net
>>51
まず最初に、モナドと全く関係のない言語が、副作用を無節操に広く適用した
そうして無節操に広がったIOの適用範囲の一部をIOではなくMaybe等で書き直している
Maybeが広くなった分だけIOが狭くなるのでモナド全体の広さは変わらない

56:デフォルトの名無しさん
15/07/19 17:14:36.93 kvcDaKH1.net
>>48
QtでもさすがにHello出力だけで1MB超えは無い。

57:デフォルトの名無しさん
15/07/19 18:26:20.48 ZQ+VxBJa.net
>>55
> まず最初に、・・・副作用を無節操に広く適用した
> IOの適用範囲の一部をIOではなくMaybe等で書き直している
> Maybeが広くなった分だけIOが狭くなる
上の3行の一つ一つが意味分からん。
もう少し補足してくれんか

58:デフォルトの名無しさん
15/07/19 19:00:07.54 OqblcV5w.net
>>57
分からんなら後回しにして比較的分かりやすいところを先に解決すればいいと思う
分からんところに拘るのは効率が悪い

59:デフォルトの名無しさん
15/07/19 19:13:47.34 ZQ+VxBJa.net
>>58
例えば教科書に出てくるなにかの概念が分からんというようなことじゃなて、
あなたが>>55に書いている文が、あれじゃ意味不明と言ってるんだが。
副作用を無節操に広く適用ってどういうこと?
そしてIOとMaybeしか出てこんがモナドはこの二つだけじゃないし

60:デフォルトの名無しさん
15/07/19 19:32:23.42 OqblcV5w.net
>>59
対案を出せばいいと思う

61:デフォルトの名無しさん
15/07/19 21:26:06.98 BgJ/88od.net
>>51 のような疑問は、Applicative と Monad のパワーの違いとは?ということであり、
それについてはすごいHaskell に平易な解説があったと思う。
要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れるってことだ。

62:デフォルトの名無しさん
15/07/19 23:30:44.39 ZQ+VxBJa.net
>>60
対案出せと言われましても意味分からんからできません、なんよw わからへん?
>>61
> 要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れる
それって、 (>>=) :: m a -> (a -> m b) -> m b  言うてるだけやし

63:デフォルトの名無しさん
15/07/19 23:34:09.77 bed99W+w.net
実際monadとapplicativeどっちも使える状況なら
applicative使ったほうがいいよって言われてね?

64:デフォルトの名無しさん
15/07/20 00:20:18.66 0TG+/+/W.net
和書のどれかに載ってた床下配線が一言だと一番分かりやすいと思った

65:デフォルトの名無しさん
15/07/20 00:27:41.08 wg3sT89+.net
>>61
取り出すところまでは同じだが、取り出した後でできることが違う
m a -> (a -> b) -> m b
m a -> (a -> m b) -> m b
-- 超えられない壁 --
m a -> (a -> b) -> b

66:デフォルトの名無しさん
15/07/20 02:08:57.73 u/oPh9jr.net



67:つか正直>>51が何言ってるかわからん >>63 mapでできることをfoldや再帰でやらないってのと同じ発想だね



68:デフォルトの名無しさん
15/07/20 09:29:20.00 c+ACSEXZ.net
>>64
箱やコンテナもそうだがそういう物理的比喩は所詮本物じゃない
>>65
超えられないのか?

69:デフォルトの名無しさん
15/07/20 09:57:42.74 wg3sT89+.net
>>67
IOが超えられない
モナドクラスというのはIOと同じクラスになりたいやつが集まってるから

70:デフォルトの名無しさん
15/07/20 21:32:15.43 tLpP/4eq.net
data DataType = DataI [Int] | DataF [Float] | DataD [Double]
deriving (Eq, Show)
という型があるとします。
型構成子で包まれているリストを取得するにはどうしたらよいでしょうか?
getData :: DataType -> a
getData (DataI a) =a
getData (DataF a) =a
getData (DataD a) =a
getData _ = error "no"
とやってもうまく取り出せません。。

71:デフォルトの名無しさん
15/07/20 21:52:25.58 WnNA5LDR.net
そりゃ型あわないんだから出来ないよそんなこと

72:デフォルトの名無しさん
15/07/20 22:03:47.04 l2CykBu3.net
クソアマ死ね

まさかとは思うが kenokabe先生(a.k.a qiitapost, chimetorch) は React.js を使いさえすればプログラムが FRP になると考えているのだろうか。
URLリンク(twitter.com)

73:69
15/07/20 22:10:25.52 tLpP/4eq.net
>>70
関数のオーバーロードみたいの使ってできるようにないませんかね??

74:デフォルトの名無しさん
15/07/20 22:56:29.03 XuKvM2I+.net
モナドは型クラス。ある代数データ型に、
それに対応するfmap, ap, bind が揃っているだけ。
だが、その代数データ型の値をデータコンストラクタで出来上がった
構文木と見ると、代数データ型がBNFみたいに見えてくるはずだ。
そのBNFが表現する言語に、まさにfmap, ap, bindが制御構造を
もたらすものとして理解できる。
これが「モナドがDSLフレームワーク」ということの意味。

75:デフォルトの名無しさん
15/07/20 23:06:18.94 XuKvM2I+.net
>>69
>getData :: DataType -> a
なんでこの型付けがおかしいかわかれば
getDataが作れないことの諦めがつくよ。

76:デフォルトの名無しさん
15/07/20 23:52:10.07 WnNA5LDR.net
>>72
Haskellに関数のオーバーロードはない
型クラスを変に絡めればあるにはあるけど
どういう状況を想定してその関数がほしいと思ったのかを教えてもらえれば、アドバイスできるかもしれない
基本的にHaskellではそういう関数を必要とすることはないはず

77:デフォルトの名無しさん
15/07/21 00:28:11.79 2lFdT9I+.net
>>69
class IorForD a where {getData :: DataType -> [a]}
instance IorForD Int where {getData (DataI xs) = xs; getData _ = error "no"}
instance IorForD Float where {getData (DataF xs) = xs; getData _ = error "no"}
instance IorForD Double where {getData (DataD xs) = xs; getData _ = error "no"}

78:デフォルトの名無しさん
15/07/21 00:39:13.17 xbZldfZG.net
>>76
確かに記述上できる事になるけど
意味ないなあー

79:デフォルトの名無しさん
15/07/21 01:37:31.91 XB/uoEzx.net
むしろ
Num a => DataType a
getData :: DataType a -> [a]
みたいにしたらいけない理由が見当たらない。

80:デフォルトの名無しさん
15/07/21 01:57:25.58 iDhKY9Vq.net
>>69
欲しいのは (Num a) => [a] のような型か
fromIntegralとかrealToFracのような
具体型をジェネリックな数に変換する関数だったりしないだろうか

81:デフォルトの名無しさん
15/07/21 13:15:45.21 Dco/MENI.net
モナドは一度使えば最後までついて回るしがらみ

82:デフォルトの名無しさん
15/07/21 13:21:44.03 /2Z49al6.net
なんだかんだ言っても、モナドって、結局、低級言語のデザインパターンなんだな
一言で言えばそういうことだった

83:デフォルトの名無しさん
15/07/21 13:22:20.40 B0LBt+ac.net
岡部健がQiitaで発狂続けてて大草原

84:デフォルトの名無しさん
15/07/21 13:32:51.80 aaCdXzrq.net
スレリンク(net板)
GitHub/Qiita/StackOverflowの臭い奴を観察1

85:デフォルトの名無しさん
15/07/21 19:49:21.60 LwXUVlfX.net
URLリンク(gist.github.com)

86:デフォルトの名無しさん
15/07/21 22:58:37.09 eRnXfzMM.net
毛の壁の記事を探索するbotコンテストでも開催しろ

87:デフォルトの名無しさん
15/07/23 08:07:45.47 Hd8z6Qav.net
>>82
Qiita荒らしにしか見えない。

88:デフォルトの名無しさん
15/07/23 09:38:20.27 UOPnVIxG.net
Monadでは
>>= :: ma -> (a -> mb) -> mb
となっているですが、これは、どうして
>>= :: ma -> (ma -> mb) -> mb(つまり普通のapply)
ではだめなのでしょうか?

89:デフォルトの名無しさん
15/07/23 10:23:45.67 9NQb4Eqn.net
>>87
X -> m Y というタイプの関数をたくさん繋げたいという気持ちがあるわけ。mがモナドだとするとき
m でラップされた型、たとえば m Int だとか m () だとかを「mという文脈を付与された型」だと思う
ことにします。m としては IO や Maybe を考えれば考えやすい。
f :: X -> m Y
g :: Y -> m Z
みたいなのがあったとき、fの結果の文脈を引き継いでgを計算したいわけ。たとえば m が
Maybeならば、fの結果は Nothing かもしれないわけ。IOだったら、実行時環境からIOで
ラップされた値を受け取ってるかもしれない。そういうのを受けて g を計算したいわけ。
このとき、>>= があるおかげで
(f x) >>= g
というのが計算できるわけ。「fのあとにg」というのを素朴に、思いついたままにやろうとすると
g ( f x) -- 型が合ってないので illegal
だけど、これは m 一個分型がずれてるからダメ。>>= は、一個分の m を吸収して
適用してくれる。だから、「モナドでラップされた値を取り出して適用してくれる」
みたいな言われ方をするけど、まあ、結果としてそう見えるようなうまい定義が
されてる。(例えばモナド則なんかがそんなうまい定義の背景にあって、そういうのを
どうやって思いついたか説明しようとすると圏論の話しになる。しらんでいい。)

90:デフォルトの名無しさん
15/07/23 10:30:27.22 9NQb4Eqn.net
>>87
ついで。 IO () みたいに、「中身がない」というか、文脈を持ってるという以外に
意味がないモナド値ってのもある。もっと広く言うと状態系のモナドね。
そういう場合、
f :: X -> m ()
g :: Y -> m ()
h :: Z -> m ()
みたいなのを「つなげたい」場合がある。これは入り口が違うので (>>=) は使えない。
だもんで、(>>) なんてのがある。

91:デフォルトの名無しさん
15/07/23 10:46:01.13 UOPnVIxG.net
>>88
>>= :: ma -> (a -> mb) -> mb
を用意する代わりに、
extract :: ma -> a
みたいなのがあれば、普通の関数適用だけでも同じことができるのではないのですか?

92:デフォルトの名無しさん
15/07/23 11:47:48.09 9NQb4Eqn.net
>>90
「そういうのが作れるならば」あなたのおっしゃるとおり。
具体的に考えてみましょう。 m が Maybe の場合、 extract Nothing は何になりますか

93:デフォルトの名無しさん
15/07/23 11:59:35.34 9NQb4Eqn.net
>>90
よくいろいろなところで、(>>=) は「モナドから値を取り出して関数に適用する」
と言われたりするけど、unit と join を基礎にしてモナドを作ると、このトリックは
理解しやすい。
参考: URLリンク(ja.wikibooks.org)
要するにMがモナドだとして
unit :: a -> M a
join :: M (M a) -> M a
があったとき
(>>=) :: M a -> (a -> M b) -> M b
x' >>= f = join ( (fmap f) x' )
となって、実際には fmap f を適用して、ダブった M を一枚剥がして M b の値を返してる。
(つまりモナドの中から値を引っ張りだす、というような事は実際にはやってないわけ)。
実際にはモナドのなかから値を引っ張りだしてないにも関わらず、引っ張りだして
適用したと「プログラマの心の中で」みなしていても整合してるように書けてしまう。
そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
正直、圏論だとかいってもこのレベルの話ならグラフ理論と難しさは変わらん。
(表示的意味論でも圏論を使うけど、そっちは数学がよほど好きでないと厳しい)。

94:デフォルトの名無しさん
15/07/23 13:06:35.41 UOPnVIxG.net
>>91
> extract Nothing は何になりますか
なるひどこれは困った。。。
>>92
たしかに、fmap と join を基礎にすれば、 >>= はその一手ですね
>>= :: ma -> (a -> mb) -> mb の中では、特に、
a -> mb の部分がモナドにとって本質的なんだなと思えてきました

95:デフォルトの名無しさん
15/07/23 13:35:05.00 UOPnVIxG.net
>>92
> そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
「そういううまいルール」とは、どこの事でしょうか?

96:デフォルトの名無しさん
15/07/23 13:41:38.62 UOPnVIxG.net
>>92
extract :: ma -> a
は存在しない場合があるようですが、
いつも存在しないのですか?
また、join :: m(ma) -> ma
は必ず存在するのですか?

97:デフォルトの名無しさん
15/07/23 14:03:17.98 9NQb4Eqn.net
>>94
そういう上手いルール、はモナド則です。(Functor則と合わせて機能する)。
>>95
たとえば identity モナドなら extract は存在します。大事なのは「一般には、モナド M
に対して extract :: M a -> a が定義できない」ということ。 extract の存在を仮定してると
モナドの一般論にはならないわけです。
join :: M(M a) -> M a
の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
Mがモナドであるかぎり必ず存在する。
参考:URLリンク(hackage.haskell.org)
(さっき挙げたWikibooksのページには、unit + join でやる流儀と unit + bind
でやる流儀の両方が解説されてます。論理的にはどっちで考えても良い。)

98:デフォルトの名無しさん
15/07/23 18:38:39.92 KEVSaEFA.net
日本語でおすすめの入門サイトってありますか?

99:デフォルトの名無しさん
15/07/23 21:02:13.38 hAeb0KoI.net
Haskellの型システムは入門用ではない
静的型と動的型の高度な煽り合いの成果物だ

100:デフォルトの名無しさん
15/07/23 21:31:05.23 UOPnVIxG.net
>>96 :デフォルトの名無しさん:2015/07/23(木) 14:03:17.98 ID:9NQb4Eqn
> そういう上手いルール、はモナド則です。
うまいというより、ふつうに定義すればモナド則は満たされるのではないですか?
> join :: M(M a) -> M a
> の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
joinがそうであるのにextractがそうでないのはなぜでしょうか?
まあ、oinは不可欠だが、extractはなくても代わりがあるからだということなのでしょうが

101:デフォルトの名無しさん
15/07/23 21:46:55.16 9NQb4Eqn.net
>>99
たとえば URLリンク(d.hatena.ne.jp) に、モナド則の一部が満たされない例があります。
「普通に定義すれば」モナド則は満たされるというのは、経験的には確かにそういう場面が多いかもしれませんが、
状況が込み入ってくれば、いつか「普通にモナドっぽいものを作ったつもり」なのにモナド則を満たさないものに
遭遇するかもしれません。
>joinがそうであるのにextractがそうでないのはなぜでしょうか?
モナドというものがそういうものだからとしか言いようがないですね。
>>93 であなたは
>a -> mb の部分がモナドにとって本質的なんだなと思えてきました
と書いていましたが、この X -> m Y 型の射をつなげてどうにかするための仕組みが
備わっているものをモナドと呼ぶわけです。うまくこのタイプの射をつなげるためには、
ダブったmをうまく剥がしてくれるものが必要で、それが join なわけです。
さっき挙げたWikibooksのページに、join を使って bind を作ったり、bind を使って join を作る
話が載ってますので、参考になさってください。
一方、あなたが書いてる extract :: M a -> a に相当する仕組みを考える場面は
一応あります。それは、 m X -> Y 型の射をうまくつなげてどうにかしたい場合です。
それは「コモナド」と呼ばれてます。(これを積極的に考える場面もあるらしいのですが
私の勉強が追いついていないのでコモナドについてこれ以上語れることはありません。)

102:デフォルトの名無しさん
15/07/23 21:58:48.06 GSXYPmA+.net
>>100
空でないデータ構造に対して、その中のある(現在注目している)要素を特に指し示す
ある種のポインターを持った構造として使う、というのがよく知られた例ではないかと。
ストリームをチューリングマシンのテープに見立てた時のヘッドの現在位置とか。

103:デフォルトの名無しさん
15/07/23 22:28:56.93 ul3W6A8M.net
extract を要求しなくてもいろんなことができる、という程度におれは考えてるなぁ

104:デフォルトの名無しさん
15/07/23 23:19:05.16 UOPnVIxG.net
> たとえば URLリンク(d.hatena.ne.jp) に、モナド則の一部が満たされない例があります。
ページ紹介ありがとうござます。
そこの return x = [x x] は、(私の思うw)「ふつうの」定義ではないので、
それがモナド則を満たさないのも尤もかなと思いました

105:デフォルトの名無しさん
15/07/23 23:32:47.82 GSXYPmA+.net
>>103
逆に言えば、あなたが直観的に思う「ふつう」を保証してくれるのがモナド則なのですわ。

106:デフォルトの名無しさん
15/07/23 23:45:33.49 UOPnVIxG.net
>>104
モナド則というのがそういうものだという説明ははじめて聞きました。本当ですか?

107:デフォルトの名無しさん
15/07/24 00:04:12.32 E+4NqHJH.net
まあ要はそれらは「自然」な振る舞いをするようにできているのです。

108:デフォルトの名無しさん
15/07/24 06:20:03.70 SOLi30hJ.net
そんな希望的観測は法則を知らなくてもできるから法則の意味がない
法則はもっと不吉な意味を持つべきなんだよ
「不自然にならないよう自然を保証してくれるので復旧シナリオは考えていない」
まさかこのパターンの意味がわからない難聴系主人公はいないよね

109:デフォルトの名無しさん
15/07/24 08:17:51.80 ZflfUkEE.net
>>107
> 「不自然にならないよう自然を保証してくれるので復旧シナリオは考えていない」
> まさかこのパターンの意味がわからない難聴系主人公はいないよね
ここよくわからない。少し説明を加えてくれませんか

110:デフォルトの名無しさん
15/07/24 08:31:24.73 sUR4TL+C.net
モナド則を満たさないモナドインスタンスは使用者が大いに困るだろう
上の return x = [x x]
とか

111:デフォルトの名無しさん
15/07/24 09:47:25.11 +b/Jkmb9.net
明らかにモナド則を満たさないモナドインスタンスの例はよく出てくるけど、
「ふつうの」FunctorやApplicative Functorであって
Monadでないものの具体例ってあるのかな

112:デフォルトの名無しさん
15/07/24 10:31:52.55 qo8KZeeD.net
>>110
ZipList
理由はこれ URLリンク(www.mail-archive.com)

113:デフォルトの名無しさん
15/07/24 12:24:32.99 mRGyPSzK.net
>>109
確かにロボットが困った顔してるように見える

114:デフォルトの名無しさん
15/07/24 16:30:09.13 sUR4TL+C.net
>>110
間違ってるかもしらんけど
関数はFunctorやApplicative Functorだけどmonadではなかったような

115:デフォルトの名無しさん
15/07/24 18:21:56.53 ZflfUkEE.net
>>113
関数は恒等モナドなのでしょう?

116:デフォルトの名無しさん
15/07/24 20:30:46.83 ZflfUkEE.net
とにかくモナド則ってモナドの本質とは全然関係ないですよね。
そのネーミングがよくないなw

117:デフォルトの名無しさん
15/07/24 22:02:00.45 UUB1Rdtf.net
>>115
モナドの本質とは、Kleisli射が「合成できる」ことであって、モナド則は
そのような合成が well-defi


118:ned であることを保証しているという意味では本質と 関係している。



119:デフォルトの名無しさん
15/07/24 22:15:15.51 E+4NqHJH.net
>>113
(->)型はモナド。
Readerモナドの正体は関数モナドそのもの。

120:デフォルトの名無しさん
15/07/24 22:26:30.02 XFwmWe1A.net
モナド則は情報量保存則のようなものだと思ってもよい
(>>=)やreturnでwrapするだけで元の情報が失われるような実装は禁止
後に続く関数に元の情報を全て渡す
つまりわざと情報を捨てればモナド則を満たさない例を作れる
return x = ("", x)
(_, x) >>= f = f x
("warning", x) >>= return = ("", x)

121:デフォルトの名無しさん
15/07/24 22:29:22.04 +b/Jkmb9.net
>>111
なるほどZipListか
まだちゃんと読めてないんだけど、
> (可算無限も含めて)長さが固定のベクトルだったらその定義で上手く行くんだけどね、
> でも一般のリストに対する上手い定義ももしかしたらあるかもね
って感じの結論か
return (= pure) が無限リストを返すから
確かにモナド則を満たすのは容易ではなさそう
>>115
Haskellでは型さえ合っていればコンパイルできてしまうだけで
モナドがモナド則を満たすのはむしろ定義だと思う

122:デフォルトの名無しさん
15/07/24 22:52:20.29 jOlzxqLq.net
まあMonadLikeクラスでも作ってモナド則無しでやってみろよ
辛くなったら帰って来い

123:デフォルトの名無しさん
15/07/24 23:04:31.56 ZflfUkEE.net
>>116
> モナド則は...合成が well-defined であることを保証している
>>118
> モナド則は情報量保存則のようなものだと思ってもよい
>>119
> モナドがモナド則を満たすのはむしろ定義だと思う
えっ? モナド則って単位元の存在と結合則ですから、モナドに限らないおよそ代数演算に
課される最低限の規則に過ぎないでしょう?

124:デフォルトの名無しさん
15/07/24 23:18:40.52 UUB1Rdtf.net
>>121
その最低限の規則だって明示的に指定して置かなければ混乱するでしょ。
あなたにとって最低限のことは隣の誰かにとっては最低限の常識ではない。

125:デフォルトの名無しさん
15/07/24 23:40:04.07 XFwmWe1A.net
結合法則 (x + y) + z = x + (y + z)
交換法則 (+ z) . (x +) = (x +) . (+ z)
これらは数学的に同じ意味だから
結合法則は最低限だとか、交換法則は最低限じゃないとかいうのは
数学じゃなくて言葉遊びだよね

126:デフォルトの名無しさん
15/07/25 07:47:47.08 6zkZTkly.net
結合法則を満たせば半群
群は交換法則を満たさなくてもよい,満たすものを特に可換群とよぶ
十分に数学的だ

127:デフォルトの名無しさん
15/07/25 07:57:27.29 Jr3WK49j.net
非可換群なんかいくらでもあるのにね。

128:デフォルトの名無しさん
15/07/25 08:09:08.78 Jr3WK49j.net
Z上でのある演算(+)の結合法則から構成される構造を
別の台集合(+z)(x+)と合成(.)で構成される構造に等価だといったところで
もとの演算(+)の可換性について何も言ったことにはならないというだけのことよね

129:121
15/07/25 08:44:38.00 Bvjhkxqq.net
>>122 >>123
強調点は「最低限」のところではなく「およそ(ふつうの)代数演算に共通」
というところにありました

130:121
15/07/25 08:46:08.24 Bvjhkxqq.net
だから、モナドの特質を表すものじゃないと

131:デフォルトの名無しさん
15/07/25 08:55:06.98 gZG0Y+YD.net
>>126
嘘を言ったのではなく何も言ってないのか
チャレンジよりゼロリスクを選んだ人間がどのような評価を受けるかという意味で面白い

132:デフォルトの名無しさん
15/07/25 09:14:59.38 bPfkCbEC.net
数学の話はいいからHaskellの話を

133:デフォルトの名無しさん
15/07/25 09:34:33.91 Bvjhkxqq.net
trace :: ((B, D) -> (C, D)) -> B -> C
trace f b = let (c, d) = f(b, d) in c
としたとき、このtraceってwell-defined?

134:デフォルトの名無しさん
15/07/26 10:00:37.02 dkr9+eHq.net
型に特質があるから値


135:の特質(モナド則?)はなくても良くね? 「選択と集中」とかいう言葉を信じるなら値に特質を持つことは寧ろ禁止した方が良い



136:デフォルトの名無しさん
15/07/26 11:46:33.95 rsm1cXgs.net
HackageDBである特定のパッケージに依存しているパッケージの一覧を得る
検索方法はないでしょうか。
たとえば、yesod が必要なパッケージの一覧など。

137:デフォルトの名無しさん
15/07/26 14:06:20.87 ihM0rggd.net
>>132
その「選択と集中」というカルト宗教流行ってるの? 根拠もなんもないくせに
耳あたりだけいい言葉に騙されてない?
選択と集中でおもいっきり原子炉にぶっこんだ東芝はどうなった? 

138:デフォルトの名無しさん
15/07/26 20:37:01.68 vJ1KGCO5.net
さすがにそこで原発でてくんのは謎

139:デフォルトの名無しさん
15/07/26 20:44:23.44 vJ1KGCO5.net
マジレスするとモナド則を満たしてないモナドインスタンスはバグだ
利用者が困る

140:デフォルトの名無しさん
15/07/26 20:52:18.39 dkr9+eHq.net
色々な機能を全部まとめて売りつけようとする奴がいるから
欲しくないものまで買わされて損する場合がある
それよりは欲しいものだけを集中的に買って損する方がマシ

141:デフォルトの名無しさん
15/07/26 21:02:49.59 vJ1KGCO5.net
モナド則満たしてないモナドインスタンスなんて欲しくないもの買わされたって状態だよ

142:デフォルトの名無しさん
15/07/26 21:02:55.04 PdaEJy2y.net
モナド則を満たしていることをコンパイル時に証明する機構がHaskellに望まれる

143:デフォルトの名無しさん
15/07/26 23:01:02.42 ooP+OwHf.net
完全な保証は無理でもQuickCheckあたりでなんとかならんかな

144:デフォルトの名無しさん
15/07/27 03:43:19.54 +mQx9Q9E.net
選択と集中というのは、経済学の用語で比較優位の話だ。
なんでこんな所で選択と集中の話が出てくるの?

145:デフォルトの名無しさん
15/07/27 06:11:57.70 3edBlaSG.net
よくわからないけどモジュールは疎結合が正義って話しかな?

146:デフォルトの名無しさん
15/07/27 11:31:50.70 pQHi2myk.net
exportは天国、importは地獄
特に、間接的なimportを強制されたら最悪

147:デフォルトの名無しさん
15/07/27 22:21:38.16 +pmDbRz6.net
>>137
ジャック・ウェルチが言ってる「選択と集中」とは何の関係もないな

148:デフォルトの名無しさん
15/07/28 05:08:55.87 XoUEQPXj.net
なるほど
ジョブズのようなものがいるんだ

149:デフォルトの名無しさん
15/07/28 11:57:02.42 RBpFIWq5.net
プログラマも経営センスを求められるというお話?

150:デフォルトの名無しさん
15/07/28 13:39:01.53 d4M8qnVV.net
>>132
ジャック・ウェルチの「選択と集中」でもってあなたが何を言わんとしてるか
さっぱりわからないし、「型に特質がある」という言い方も意味不明。
モナド則は値の特質ではなくモナドでラップされた型がどのように振る舞うか
を決めてるのであって、このルールがあるからこそ do 記法を
安心して使える。とにかく地道に勉強しよう。

151:coolio
15/07/28 16:34:52.05 n3cGSoaV.net
Haskellってオワコンなんでは?
なんでJavaScript使わないのみなさん?
普及率も需要もこっちの方が上だし、国際的潮流かとおもうけど

152:デフォルトの名無しさん
15/07/28 17:47:57.77 d4M8qnVV.net
>>148
じゃあまずお前が国際的潮流に合わせて英語か中国語で書き込めよ

153:デフォルトの名無しさん
15/07/28 17:50:36.54 Ni9zj/4A.net
Javascriptやってればいいじゃん
人のことはどーだってよくね?

154:デフォルトの名無しさん
15/07/28 21:05:55.89 ROVV0dd8.net
まるで何でスタバ行かないのって聞かれたような気分

155:デフォルトの名無しさん
15/07/28 21:40:55.38 UXOcgM9+.net
>>149
哦,可以用國語嗎?你看得到呢?

156:デフォルトの名無しさん
15/07/28 21:54:20.49 d4M8qnVV.net
>>152
日本語でOK

157:デフォルトの名無しさん
15/07/28 22:15:38.33 uKnSRdVu.net
我想喝啤酒!

158:デフォルトの名無しさん
15/07/28 22:49:30.17 MQ4Zq0Y1.net
Haskellは無料で遊べちまうけど需要のあるJSは徹底的に課金するべき

159:デフォルトの名無しさん
15/07/28 23:02:16.25 2DleteTo.net
ビールといえば、資源ごみ捨てないと…

160:デフォルトの名無しさん
15/07/30 13:15:34.02 XKVzkpKt.net
ghcの新型出るんですか?

161:デフォルトの名無しさん
15/07/31 14:52:35.97 gTceL3gJ.net
毛の壁また来てるの?
さっさと2chから消えろ

162:デフォルトの名無しさん
15/07/31 21:02:27.62 SPFFmEBo.net
無理だよ、毛は10年前からナンパ書き込みしたりしてるから

163:デフォルトの名無しさん
15/07/31 22:59:33.38 Tuqyf3gY.net
いつどこに誰が来たのかさっぱりわからないし意味不明。

164:デフォルトの名無しさん
15/08/01 01:31:31.22 CYsajC4S.net
ヤングアニマル No.15
アンダーメンバー全員集合 16ページ お祭り騒ぎ
ベルセルク連載開始 + 別冊付録 直近4話分

皆、短パン・ランニングシャツ姿
堀・らりんのお股
ひめたんの胸

165:デフォルトの名無しさん
15/08/01 05:22:40.82 494SgxRt.net
そういや原発の長文書き込む荒らしがなりを潜めたと思ったら、入れ替わるように毛の壁ブームが起こったな

166:デフォルトの名無しさん
15/08/01 10:47:10.94 jD/MwJWz.net
1人しか敵視しない1bit脳が基本だから
客観的に1人いようが2人いようが主観的には1人しか視えない

167:デフォルトの名無しさん
15/08/02 20:21:12.98 htkPKsn5.net
モナドの合成って難しいことなの?

168:デフォルトの名無しさん
15/08/02 20:36:45.90 SLv/zRdd.net
>>162
原発長文君は効率的な情報収集という意味では有用であった復活を拒絶しない

169:デフォルトの名無しさん
15/08/02 20:39:24.29 Iy0keT5I.net
きーたぽすととかいうけのかべが抹消されたようだ

170:デフォルトの名無しさん
15/08/02 21:10:57.21 jhqklPYl.net
cabal-installでドキュメントも一緒にインストールする際のhtmlのリンクの質問です。
パッケージをインストールするとドキュメントも一緒にインストールされるように設定しましたが、
ドキュメントのルートのindex.html(.cabal/config ファイルの dic-index-file の項)が更新されるとき、
インストールしたパッケージが公開しているモジュールへのリンクが間違った場所を指しています。
.cabal/config ファイルのインストールディレクトリ関係の項はデフォルトで下記のようになっています(一部だけ抜粋)。
doc-index-file: $datadir/doc/$arch-$os-$compiler/index.html
install-dirs user
 prefix: /home/ユーザー名/.cabal
 datadir: $prefix/share
 docdir: $datadir/doc/$abi/$pkgid
 htmldir: $dicdir/html
 haddockdir: $htmldir
例えば今 hacolour-1.23 パッケージをインストールすると、ドキュメントは
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/hscolour-1.23/html/
以下にインストールされます。
しかし、doc-index-file の index.html ページの例えば Language.Haskell.HsColour のリンクは
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/Language-Haskell-HsColour.html
を指すように更新されてしまいます。
当然、そんな所に Language-Haskell-HsColour.html ファイルはありません。
この間違ったリンクを正しく
/home/ユーザー名/.cabal/share/doc/x86_64-linux-ghc-7.10.1/hscolour-1.23/html/Language-Haskell-HsColour.html
を指すように設定するには
.cabal/config ファイルのどこを直せば良いのでしょうか。

171:デフォルトの名無しさん
15/08/02 21:22:35.46 PjsL8G7T.net
>>167
>doc-index-file: $datadir/doc/$arch-$os-$compiler/index.html
普通に
doc-index-file: $datadir/doc/$arch-$os-$compiler/$pkgid/index.html
じゃいかんの?

172:デフォルトの名無しさん
15/08/02 21:23:45.67 PjsL8G7T.net
あ、 ....../$pkgid/html/index.html かな。パスの途中に "html" 入れ忘れた。

173:デフォルトの名無しさん
15/08/02 21:27:13.13 PjsL8G7T.net
ごめん見当違いだったわ。
総インデックスファイルは確かにそこになきゃダメだ。

174:デフォルトの名無しさん
15/08/02 22:14:50.22 5gB+ySz/.net
>>164
モナドは自己関手なんで、関手を合成することができるが、
そうしてできた合成関手は一般にはモナドにならない。

175:デフォルトの名無しさん
15/08/02 23:43:12.86 htkPKsn5.net
>>171
合成関手はモナドになり得ると思うが。。。
モナドの合成は一般にはモナドにならないということね?
なぜそうなのか、まだよく分かってないのだが、
そもそも合成できないっていうのはモナドが圏的でないということね?
それって結構困ったことなのでは?

176:デフォルトの名無しさん
15/08/03 01:17:03.15 kH5++B+D.net
>> 167
見当違いかもしれないけど、俺の手元の~/.cabal/configは
htmldir: $docdir/html
になってた。貴方のは
htmldir: $dicdir/html

177:デフォルトの名無しさん
15/08/03 07:24:39.84 UJ5SIf4H.net
>>173
すいません、ただの書き間違えです。
私の方でも正しくは
htmldir: $docdir/html
です。

178:デフォルトの名無しさん
15/08/03 11:59:33.09 C3iL4RK8.net
>>172
モナドFとGについて、合成関手FGに対して適切なηとμを、
「一般には」構成できない。FとGがよほど相性が良い場合は別だけど。

179:デフォルトの名無しさん
15/08/03 17:24:38.72 u3Kfbgnb.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 排便ダン きんもちい~
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\
      /⌒\〆',  `  ̄ ´  ゝ/⌒\
    /  ノつ\ ・    ・  /⊂  ヽ!
o0○ノ  /  3  \ (::::⌒ヽ / とノ\ ヽ○0o
(    /、_ノ\   Y `(_、_)   /  \´  )゚
 \_)    `ヽ   : :;;*:;   : : : |    (_ノ
         人__;;:;;、___ノ          ヽヽ        ヽヽ
             ;:;;:;;:;,,           ─┐ |  |   ─┐ |  |
          ∬ ;;:;::.;::.::;::..:;:..: ∬          /  |  |      /.  |  |
      ・~   ;::;.:;:;:;:;:.:;:.:::.;:;:;.:.:.:          ノ    ノ  ┐ ノ    ノ  ┐
          ∬;;;:::;;;:;:.:;:.::.:;;.:.;.:;.:; ∬                 ┴    ヽヽ     ┴
              :"

180:デフォルトの名無しさん
15/08/04 07:05:53.89 fTn2TRnu.net
もし敵の武器をコピーする能力があったら
意味不明すぎてコピーできない武器を使えばいい

181:デフォルトの名無しさん
15/08/04 09:50:58.91 Jii/ZMO+.net
>>175
了解。
モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
プログラミングとしては、致命的なのではないの?

182:デフォルトの名無しさん
15/08/04 18:16:37.45 Qc8p5PG4.net
>>178
代数的な議論とか言ったって簡単に情報系の議論に移せるよ。
Fという文脈に、さらにGという文脈をつけたものは、先にG、それをFでかぶせたものとは
同一視できない。
もう少し具体的に言えば、Maybeと状態モナドStateを考えたとき、Maybe State s a と State s Maybe a
を何も制約つけずに同一視できるほうがプログラミングとしては致命的だよ。

183:デフォルトの名無しさん
15/08/04 20:22:00.28 T0ZfeL7S.net
すいませんハスケル初級者で質問なのですが
ハスケルでは「=」は代入ではなく束縛だという事で
関数定義
func :: Int -> Int
func x = func (x - 1) 
それを使った式
func 100
と書いた場合無限に減算を繰り返す理由は
「=」は代入ではなく束縛だから
ハスケルがfunc xに該当する唯一の値を求めて処理を繰り返すという
仕組みになっているという理解でよろしいでしょうか。

184:デフォルトの名無しさん
15/08/04 20:46:26.59 8q1xh6ui.net
代入とか束縛とか関係ない
int func(int x) {
. return func(x-1);
}
int x = func(100);
Cでこう書いたって無限再帰

185:デフォルトの名無しさん
15/08/04 21:03:02.69 Jii/ZMO+.net
>>179
可換でないといけないとは言っていない。
合成ができないのが致命的と言ったのだが

186:デフォルトの名無しさん
15/08/05 08:30:57.49 XaoKQAnn.net
素数と素数の積が素数でないのは致命的じゃないが
モナドとモナドの合成がモナドでないのは致命的か?

187:デフォルトの名無しさん
15/08/05 08:31:02.84 8IuY4/EZ.net
>>180 それは
x = x - 1
とかの場合の話じゃない?

188:デフォルトの名無しさん
15/08/05 09:20:55.44 PKbBdrRV.net
>>182
なぜ致命的なのかさっぱりわからない

189:デフォルトの名無しさん
15/08/05 11:55:37.34 6JvEd9Ae.net
>>183 >>185
> 素数と素数の積が素数でないのは致命的じゃないが
それは素数の本質からの帰結だが、モナドの場合はそうではない。
もし整数と整数の積が整数にならないとすると、それは整数概念にとってかなり致命的。
群とまでいわなくても圏すらなさない概念はふつう使い物にならない

190:デフォルトの名無しさん
15/08/05 12:21:47.56 /t+jhWZx.net
>>178
>モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
>プログラミングとしては、致命的なのではないの?
そりゃモナドでプログラミングしたことなきゃわかんないよな

191:デフォルトの名無しさん
15/08/05 13:35:33.66 WyZxE69I.net
>>186
よくわからんが仮に「モナド」が使い物にならないなら
「素関手」みたいな、素数に似た名前の新しい概念を提案すればいいんだろ?

192:デフォルトの名無しさん
15/08/05 14:44:47.74 6JvEd9Ae.net
>>188
今は、素でないといけないと言ってるわけじゃないし(むしろ素しかないのは変だなと言ってる)
名前を問題にしてるわけでもないんだが

193:デフォルトの名無しさん
15/08/05 15:47:37.18 WyZxE69I.net
ただ名前を提案するだけでも、何も提案しない奴よりマシになれるからね
コストは最小化した方が良いし

194:デフォルトの名無しさん
15/08/05 19:06:59.33 nSk5CAms.net
ハスケルで実用的なプログラム組みたい
具体的にはエロ画像サイトのスクレイピングやりたい

195:デフォルトの名無しさん
15/08/05 20:35:22.09 3EIw/aJp.net
>>191
やったらいいじゃん

196:180
15/08/05 20:35:53.33 ++LOioZG.net
>>181 >>184
すいません代入束縛関係なく無限再帰の構文でした。
無限再帰途中で停止するため基底部を
パターンマイッチングの設定で止めてみました。
func' :: Int -> Int
func' 0 = 0
func' x = func' (x - 1)
x = x - 1でもやってみます。

197:デフォルトの名無しさん
15/08/05 23:13:16.26 /t+jhWZx.net
x = x-1
はHaskellだと止まらないよ。
x = x-1 = (x-1)-1 = ((x-1)-1)-1) = ...
といつまでたっても書き換えが終わらないから。
ただこの例ではループの検出が容易なのでghciで
ghci> let x = x-1
ghci> x
を試すと *** Exception: <<loop>> となって中断される。
基底部のない再帰はそうならない。

198:デフォルトの名無しさん
15/08/06 15:22:18.11 gwZmdoaP.net
>>187
ほんとこれ。 モナドの積がモナドにならないことがなぜ致命的なのか、全然言えないんだよねこの人。

199:デフォルトの名無しさん
15/08/06 16:19:38.61 hE+0lNLB.net
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ

200:デフォルトの名無しさん
15/08/06 20:09:37.57 QVat9e3X.net
でもまあ何をやってもダメな奴は
自分は何もやらず安く買って高く売るだけの能力に全振りしてるんじゃないか

201:180
15/08/06 20:35:31.96 9HWheWsA.net
>>194
ありがとうございます。
試してみて止まらないのを確認しました。
xが無限ループに束縛される様な感じです。

202:デフォルトの名無しさん
15/08/07 09:35:35.60 qqVIQMo+.net
>>188
素関手ってのは、あらゆる関手がそれらから合成できるときに使う言葉だ。
モナドは全然そんなものじゃないだろ?
>>195 >>196 >>197
モナドっていうのは、ごく限られた単純局面でのみ使えるプログラミング技法だっていう自覚はないの?
その意味で、関手はもちろんメジャーだが、モナドはニッチなんだよ。
もっと実用の「コード書いて」いくとそれがわかってくると思うが

203:デフォルトの名無しさん
15/08/07 10:39:25.62 aKStrfm+.net
>>199
御託はいいんだよ。モナドってのは自己関手が作り出す「文脈」を引き継いで
どんどん計算してく、そういう発想をカタチにしたものなわけ。そういう具体的な
思想と具体的な実装を持っていて、Wadlerが示したように do 記法を通じて
参照透明性を壊さずに命令型のプログラミングができることは示された。
んで君は、「モナドは合成できないじゃないか」と言ってるわけ。んなこたあ誰だって
知ってるんで、たとえばモナドをパラメトリックにして、モナドトランスフォーマなんかを
考えたらいいんじゃね?いや、それ一見いいように思えてモナドがタワー状に積み重なって
保守しづらいんだけどとかいろんな人がまだあれこれやってる最中。
なんか便利なものができたら、その「便利なもの」が切り開いた地平の先に新しい岩があるの。
それは「問題の解決がもたらした新しい問題」なので頭が痛いところだけど、そうやって新しい問題の
解決のために挑むのが「知性ある人間」のしごとなの。
「馬車は不便」を内燃機関による自動車が解決したけど、今度はその馬力と速度を人間が
制御しそこねて「走る棺桶」だと言われたり、自動車による死者が多すぎて「交通戦争」と
言われたりすることに対して、シートベルトが知性ある人間によって発明されたの。
シートベルトは中途半端な解決策だね、ということでエアバッグを発明したの。
なんかのアイデアが副次的にもたらす頭の痛い問題をとりあげる、それは大事。
でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。
「自動車事故で人がたくさん死ぬから自動車禁止な」←知性の放棄です。
経済的工学的制約があるから、自動車事故の問題だってまだ解決してない。でもそれを
解決しようと続けることが知性なの。
モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。でも
それで喚き散らして「欠陥品」と罵ってるのはバカでもできる。知性がある人間は君が喚き散らしてる
間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。

204:デフォルトの名無しさん
15/08/07 13:17:15.92 SvrTmQUlp
出るって

URLリンク(www.amazon.co.jp)圏論の歩き方-圏論の歩き方委員会/dp/4535787204

日本評論社 (2015/9/10)

205:デフォルトの名無しさん
15/08/07 13:10:20.13 qqVIQMo+.net
>>200
力のこもったコメントありがとう
> 御託はいいんだよ。
もっと冷静にw
> 参照透明性を壊さずに命令型のプログラミングができることは示された。
それは関数型にとって宿命的課題。だが、モナドはそのためのものでもないし、モナドだから解決できるわけでもない
> んなこたあ誰だって知ってるんで
もっと冷静に。合成できないことは知っててもその意味が分かっていない
>「馬車は不便」を内燃機関による自動車が解決した
その場合の自動車は、限界はあっても、本質的技術進歩なんだよ。
その他あまたのそもそも成立しない技術とは区別しないとな。
合成できないというのは成立し得ない兆候なのよ。
> でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。
いやいや、致命的な欠陥があればそれはもうそれでだめなのよw
> モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。
それが分かっているなら、少し救いだが
> 君が喚き散らしてる間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
圏論の本を読みながらw
そもそもモナドが圏論から形式的にひねり出したアイデアだから、プログラミングでは使えないんじゃないのかい?

206:デフォルトの名無しさん
15/08/07 20:18:30.98 /Xr5U2Jc.net
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ

207:デフォルトの名無しさん
15/08/07 22:14:14.99 CgCkvu6a.net
合成するならモナドじゃなくて、モナドに供する関数でやってくれってことかねぇ。
モナドでパイ生地宜しく抽象レイヤ重ね出したら、結局手続き型と同じ業を背負い込むんじゃねーの?
という素朴な疑問がある。

208:デフォルトの名無しさん
15/08/08 07:32:51.12 OWyBYzJT.net
手続き型言語がーってのは的外れだな
この流れなら普通は自然言語に疑問をもつ
自然言語なんて空論記述言語にすぎないんじゃねーかと

209:デフォルトの名無しさん
15/08/08 09:16:43.49 SyZUU7PY.net
>>205
意味不明w
自然言語だからか?w

210:デフォルトの名無しさん
15/08/08 10:03:20.67 OWyBYzJT.net
都合が悪いようだな
自然言語を理想とする理想主義が否定されれば高級言語や人工知能の大部分が崩れるから

211:デフォルトの名無しさん
15/08/08 10:56:41.88 fC37rrhT.net
>>207
逆だよ。ラッセルのような論理主義は自然言語が曖昧性を持ち、真理を記述するのに不適格だと
考えて記号論理を推進した。そのラッセルが生み出した型理論を(大幅に)修正したものが
強い型を持つ言語の基盤になっている。
自然言語による真理記述に興味を持ち続けた学者もいるけど、少数派(間違いだといいたいわけじゃない)
で、今日のプログラミング言語には全く影響を与えていない。

212:デフォルトの名無しさん
15/08/08 14:05:14.68 OWyBYzJT.net
低級言語に曖昧性はない
高級言語は曖昧性がないことに加えて更に別の理想を追求している
おそらく一度あきらめた理想を取り戻そうとしている

213:デフォルトの名無しさん
15/08/08 15:28:39.84 TgCfkrij.net
毛の壁みたいなこと言ってないでコード書けよ

214:デフォルトの名無しさん
15/08/08 15:52:47.27 mk1m6mga.net
Haskellでまともなコードが書ける日本人なんていないでしょ

215:デフォルトの名無しさん
15/08/08 16:16:44.90 TgCfkrij.net
あっそう(ハナホジー

216:デフォルトの名無しさん
15/08/08 17:24:31.84 CVdJzgpn.net
都合のいいサンプルを出してるだけだ

217:デフォルトの名無しさん
15/08/08 17:25:05.09 CVdJzgpn.net
>>200みたいな評論のことね

218:デフォルトの名無しさん
15/08/08 17:31:44.38 9n35IarN.net
ガラパゴスなおまえらには無理

219:デフォルトの名無しさん
15/08/08 18:46:17.01 i6VMh23W.net
haskell なんて簡単だよ
ひたすら型を複雑にすれば勝手に精密なプログラムになってくれるんだぜ?
あんな楽な言語、他に無いよ

220:デフォルトの名無しさん
15/08/09 09:57:54.75 Goie4Pfe.net
仕事でも趣味でも普通に世界でバリバリHaskell書いてる日本人たくさんいるけどな

221:デフォルトの名無しさん
15/08/09 10:15:53.22 z+nEtG9u.net
理想の言語を選べ
1 自然言語 ←コード書かない
2 型を書くだけ ←コード書かない
3 短い (一行とか) ←コード書く

222:デフォルトの名無しさん
15/08/09 10:19:57.32 yc5ubK7v.net
>>217
日本人が普通に世界でバリバリHaskellで書いたアプリケーションをたくさん紹介してくれ

223:デフォルトの名無しさん
15/08/09 11:07:30.63 uWrNjf8R.net
>>218
この3つの中では
1しかないかな?
2と3は論理的にありえない

224:デフォルトの名無しさん
15/08/09 12:47:58.32 fLWMExWl.net
>>219 外資金融系とか。

225:デフォルトの名無しさん
15/08/09 15:46:05.53 IcT2pazV.net
>>221
金融屋だけどHaskellは実務ではあんまり使わないよ
金融業界で使われている有名なライブラリがOcamlで書かれてるから、Ocamlが多い
あとは、F#だっけ?なんか、Ocaml互換のプログラミング言語

226:デフォルトの名無しさん
15/08/09 16:06:00.55 q2cZe2Ik.net
>>222 知らないんだったら黙っててね

227:デフォルトの名無しさん
15/08/09 16:07:28.11 t8Adpj37.net
言語名間違えてる時点で完全にモグリ。

228:デフォルトの名無しさん
15/08/09 17:14:22.35 IcT2pazV.net
>>223
普通に現職の俺より詳しいというなら、なにかそれらしい反論してみろって
>>224
OCamlだったか、すまん
特定のドメイン領域でしか使わないし、俺は普段使わないから間違えたの

229:デフォルトの名無しさん
15/08/09 17:56:53.34 jZAMYmB+.net
エアコーダーさんは黙ってね

230:デフォルトの名無しさん
15/08/09 20:15:02.83 yc5ubK7v.net
どうせ紹介してくれるのならオープンソースの方がいいな。
まともに動く Haskell アプリのソース全体が見れる機会ってなかなかないんだ。
日本人が書いたなんて意地悪なことはもう言わんから、紹介してくれないか。
github 漁っても、実験的なものやサンプル、ライブラリくらいしか見あたらん。
なんか小粒な Web アプリはやたら出てくるが、なんだろ。
流行ってるのか?

231:デフォルトの名無しさん
15/08/09 21:01:04.74 0a1Qk31r.net
Hskellは金融で使われているよ
まぁ下請けだったけどね
元受の会社は誰でも知ってる大会社
ヒントだけ書くと、ソー○ネク○ト

232:デフォルトの名無しさん
15/08/09 21:19:45.38 0nk6UHsv.net
金融ってMATLABで数値計算ガリガリというイメージだがな。

233:デフォルトの名無しさん
15/08/09 21:22:35.31 bxjvjJcB.net
cabal replのCtrl-Pがshellと違って連続で同じコマンド使ってても1つ前のコマンド出すから
間違える→Ctrl-Pの連打数が増える→間違えるの繰り返し辛い

234:デフォルトの名無しさん
15/08/09 22:57:12.53 PuCXERZp.net
>>229
数値計算につかうわけじゃない
ADTで金融商品の記述のDSL作って使う

235:デフォルトの名無しさん
15/08/10 08:18:32.34 5dby/keT.net
おまえらは「机上の空論」の世界でしか生きられない、ガラパゴスエアコーダー。言語の一つも作ってみろ、卑怯者

236:デフォルトの名無しさん
15/08/10 10:22:50.55 6CToalvR.net
この場がいいのかどうか分かりませんが、もし分かれば教えてください。
Wadlerの"Theorems for free"に、
r: ∀X. List(X) -> List(X) ならば a* o r-A = r-B o a*
  ここで、a: A -> B, a*: List(A) -> List(B),
 r-A: List(A) -> List(A), r-B: List(B) -> List(B)
という定理が出てきます。
しかし、ここのrやaをたとえば
 r = { ["a", "b"] |-> ["a", "b", "b"],
[1, 2] |-> [2, 1],
........... }
a = { "a" |-> 1, "
"b" |-> 2,
............}
のようにとった場合、
 a* (r-Char(["a", "b"]) = a* (["a", "b", "b"])
= [1, 2, 2]
r-Int (a* (["a", "b"]) = r-Int ([1, 2])
= [2, 1]
となってしまい、明らかに
この定理は成り立たないと思うのですが、どこか誤解があるでしょうか?

237:デフォルトの名無しさん
15/08/10 10:23:33.03 h0Losqum.net
ヘア告訴しか出来ない卑怯者がブンブンうるさいね

238:デフォルトの名無しさん
15/08/10 10:32:54.55 mZ18nlaN.net
>>233 rの型が違う

239:デフォルトの名無しさん
15/08/10 10:45:40.66 6CToalvR.net
>>235
> rの型が違う
どう違うのでしょうか? 気が付きません

240:デフォルトの名無しさん
15/08/10 11:02:23.74 dDBl8Ksv.net
>>236 HaskellかMLのプログラム書いたことある?

241:デフォルトの名無しさん
15/08/10 11:20:23.87 6CToalvR.net
どこが違うかを直接指摘してくれるとありがたいです

242:デフォルトの名無しさん
15/08/10 13:39:27.85 Mr6uGRV9.net
232の謎の言語のコンパイラはどこにあるんだろう
もしかしてコンパイラがなくても型が見える人なのかな
Haskellも自分が使うためじゃなくて型が見えない人のために作っただけ
そう考えるとHaskellでアプリを作っている気配がないのも辻褄が合う

243:デフォルトの名無しさん
15/08/10 14:07:42.71 3agS2rXW.net
>>233
Wadlerの論文のどこの話をしてるの?

244:デフォルトの名無しさん
15/08/10 14:33:14.35 qNcURq9A.net
岡部健さんこんにちは

245:デフォルトの名無しさん
15/08/10 14:40:16.50 08na6m/L.net
>>240
URLリンク(ttic.uchicago.edu)
Introductionの話だと思う
>>233が何を言いたいのかは分からないけど

246:デフォルトの名無しさん
15/08/10 15:19:32.65 3agS2rXW.net
>>242
ありがとう。そんな最初のところだったのか。
こりゃ単に r はパラメトリック多相な関数じゃなきゃいかんて話だな。
>>233みたいに型ごと値ごとにアド・ホックな対応を付けて
r を構成することはできない(任意の型のリストの任意の値を
取らなきゃいけないんで計算可能にならない)。

247:デフォルトの名無しさん
15/08/10 15:23:45.69 6CToalvR.net
>>240 >>242
そこです。
そこにある例では、odds関数の説明がよく分かりません。
「これは(定理の)反例にはならない。なぜなら、oddsの型が∀X. List(X) -> List(X)
ではなく、より特定的な List(Int) -> List(Int)であるので」と言うのですが、
oddsの型が∀X. List(X) -> List(X) になっていないとなぜ言えるのでしょうか?
φ(A)であってさらに∀X.φ(X) でもあることはあり得ることではないのですか?

248:デフォルトの名無しさん
15/08/10 15:29:36.39 3agS2rXW.net


249:"../test/read.cgi/tech/1436869629/242" target="_blank">>>242 "odds"はIntについてしか定義できないだろ。 他の型についてどうやって定義すんだ? というわけで、どんな型のリストにも適用できる関数は 特定の型の値を具体的に見て処理できないので リストの構造を弄ることしかできない、ということよ



250:デフォルトの名無しさん
15/08/10 15:29:57.17 3agS2rXW.net
あ、アンカー間違えた。
>>242じゃなくて>>244

251:デフォルトの名無しさん
15/08/10 15:31:01.54 6CToalvR.net
>>243
> 型ごと値ごとにアド・ホックな対応を付けて
> r を構成することはできない(任意の型のリストの任意の値を
> 取らなきゃいけないんで計算可能にならない)。
その条件が明記されているのはあまり見たことがないのですが、
暗黙の常識なのですか?

252:デフォルトの名無しさん
15/08/10 15:32:35.38 3agS2rXW.net
>>247
この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。

253:デフォルトの名無しさん
15/08/10 15:39:35.42 6CToalvR.net
>>245 >>248
すれ違いすみません。
> "odds"はIntについてしか定義できないだろ。
> 他の型についてどうやって定義すんだ?
Int以外についてはidにする、とかすればいいのではないですか?
そうしたときには
> この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
計算可能でもあると思うのですが?
それに「この文脈」というのは今のような場面では少しいい加減な感じがしますが

254:デフォルトの名無しさん
15/08/10 15:42:48.51 3agS2rXW.net
まあ、こりゃアド・ホック多相の話をしてない、ってだけだな。

255:デフォルトの名無しさん
15/08/10 15:46:02.23 6CToalvR.net
>>250
「アド・ホック多相」という概念があって、
ここでは「ただしアド・ホック多相でないこと」という条件が暗黙に付いている
ということですか?

256:デフォルトの名無しさん
15/08/10 16:08:40.11 C7dCXIlE.net
原文読んでみたけども、最初からパラメトリック多相の文脈で話してるし
問題の部分のちょっと前で暗黙どころか明確に否定している気が…
> The intuitive expIanation of this result is that r must work on lists of X
> for any type X. Since r is provided with no operations on values of type X,
> all it can do is rearrange such lists, independent of the values containedin them.
> Thus applying a to each element of a list and then rearranging yields
> the same result as rearranging and then applying a to each element.

257:デフォルトの名無しさん
15/08/10 18:26:41.48 6CToalvR.net
>>252
> 問題の部分のちょっと前で暗黙どころか明確に否定している気が…
特に以下の部分のことでしょうか?
>> Since r is provided with no operations on values of type X,
>> all it can do is rearrange such lists, independent of the values containedin them.
そういう意図なのだろうと思うのですが、
「r: ∀X. List(X) -> List(X)」だけではその意図を正確に形式化できていないのではないか?
と疑問なのですが。。。

258:デフォルトの名無しさん
15/08/10 19:25:00.79 aurF6Aj8.net
ML多相はad hoc多相ではないし、プログラミング言語理論でpolymorphismと言ったらデフォルトでparametric polymorphism。Cardelliのチュートリアルから読み直せ。

259:デフォルトの名無しさん
15/08/10 19:25:52.09 aurF6Aj8.net
ついでに、∀でad hoc多相表すほうが稀だから。

260:デフォルトの名無しさん
15/08/10 19:27:08.10 xfbTbnyl.net
形式化はイントロ以外の本論か、普通の型理論の入門書を読み直そう。

261:デフォルトの名無しさん
15/08/10 19:32:28.40 G+nIt1Sd.net
associated data type は日本語では何と言うのが通例でしょうか。

262:デフォルトの名無しさん
15/08/10 19:44:04.49 yZ3j9jzU.net
どっかの大学のレポート課題?

263:デフォルトの名無しさん
15/08/10 20:02:43.98 G+nIt1Sd.net
>>258
私(>>257)への質問でしょうか。
勘違いでしたらすいません。
普通の社会人です。
type family を調べていたら出てきましたが、type family は型族という訳があるのに
associated data type は訳がネット上に見当たらないので質問しました。
単純に「関連データ型」でググっても associated data type に関連する記事は見当たりませんでした。

264:デフォルトの名無しさん
15/08/10 20:31:37.97 P/rKXiwW.net
VBAでもやってろよ

265:デフォルトの名無しさん
15/08/10 20:54:08.85 yZ3j9jzU.net
ある程度以上のプログラミングを日本語で勉強しようというのが無理なので英語のままで検索することをおすすめする

266:デフォルトの名無しさん
15/08/10 21:23:30.78 G+nIt1Sd.net
>>261
誤解させてしまったようです。
勉強のために日本語訳を訊いたのではなく、
単に日本語ならなんて言うのだろうかと思っただけです。

267:デフォルトの名無しさん
15/08/10 22:11:23.36 6CToalvR.net
結局、「r: ∀X. List(X) -> List(X)」という定式化ではパラメトリック多相性の意図を
正確に形式化できていないのではないか?という疑いは解けていないまま。。。

268:デフォルトの名無しさん
15/08/10 23:19:26.21 08na6m/L.net
どのように書かれていたら ID:6CToalvRは「正確に形式化できている」と判断するのだろうか

269:デフォルトの名無しさん
15/08/11 00:48:36.91 35SQIDRW.net
俺が悪いんじゃない、Wadlerの書き方が悪いんだ、と言いたいのかもな

270:デフォルトの名無しさん
15/08/11 06:26:59.37 hdf2tNQK.net
∀型の意味はSystem Fとして厳密に形式化されている。「型システム入門」にも書いてある初歩。

271:デフォルトの名無しさん
15/08/11 06:30:12.53 hdf2tNQK.net
Wadlerの論文でも4節のFigure 2でちゃんと定式化の復習してるじゃねーか。読まずに書くなよ

272:デフォルトの名無しさん
15/08/11 06:36:13.99 l/j/VTng.net
>>263
論文や入門書どころか2chのレスすら読めないのか?
0255 デフォルトの名無しさん 2015/08/10 19:27:08
形式化はイントロ以外の本論か、普通の型理論の入門書を読み直そう。
ID:xfbTbnyl(1)

273:デフォルトの名無しさん
15/08/11 08:39:19.79 cH2UxrcD.net
パラメータ多相はtemplateのようなものに型名を渡すだけで実体化する
アドホック多相は実体化する前に
["a", "b"] |-> ["a", "b", "b"],
[1, 2] |-> [2, 1]
のような単相のコードを仕込んでおかないと実体化できない
つまり型名だけでなくコードとか色々な情報を注入している

274:デフォルトの名無しさん
15/08/11 21:39:29.31 csNtDDNc.net
パラメータ多相とかアドホック多相とかいろいろ出てるが
それらに共通の「多相」って何か言ってみろよ

275:デフォルトの名無しさん
15/08/12 10:32:15.38 E9Tw94sD.net
>>270
君はなぜ自分より知識や教養が上の相手にタメ口なんだ

276:デフォルトの名無しさん
15/08/13 12:02:19.75 mwGqyG64.net
>>271
答えられないのか?
ところで君はこのスレをご主人と崇める番犬なんだな?w

277:デフォルトの名無しさん
15/08/13 15:16:34.02 M3nW2qvP.net
基本的用語の検索もできない自称プログラマって生きてて恥ずかしくないの?
URLリンク(en.wikipedia.org)(computer_science)

278:デフォルトの名無しさん
15/08/13 15:18:03.14 d32APRUA.net
大学1年生か2年生の課題とかじゃない?

279:デフォルトの名無しさん
15/08/13 15:24:02.22 Po5dRgtj.net
多相を分かりやすく言うと「単相ではない」という意味です
単相は昔からみんな知ってたやつなので分かりやすい

280:デフォルトの名無しさん
15/08/13 15:52:21.18 Gt0qYtbN.net
>>272
おまえみたいなダメ学生のレポート代筆を誰が手伝うかってことです。

281:デフォルトの名無しさん
15/08/13 16:02:02.25 Gt0qYtbN.net
田舎の秀才というか、狭い世界で褒められてるうちに
自我が肥大してしまっていつしか
「わからなくてもコツコツ勉強するのは大事」
「世の中わからんこともある」
「わからんのは、教え方が悪いからとは限らず、自分の知力の限界かもしれない」
というようなことを認めようとしないまま中途半端な歳まで来ちゃうと限りなくアウトに
近い。
妙に肥大した自我と釣り合いを取るために、「わたしには
知性も教養も欠けてるのでどうか憐れむと思って教えてください」
の一言が出せずに煽ることしかできない、そういう喧嘩腰が
いつまでも通じると思ってる時点で社会知性が低すぎてダメ。
コンビニのバイトですら務まらないレベル。

狭いサークルで褒められまくっていたせいか、妙な自信と
プライドだけは高いんだが中身はスッカスカ。

たまに親切な誰かが丁寧に教えてやっても礼の一言も述べず
「ふーん、なんか結局モナドって合成できないからプログラミングにとって致命的じゃん」
とか、言ってる本人にも意味不明なワードサラダめいたポエムを投げることしかできない。

282:デフォルトの名無しさん
15/08/13 19:19:34.10 mwGqyG64.net
>>277
君どうしちゃったんだ?w
本題についてだけ静かに語ればいいんだよ

283:デフォルトの名無しさん
15/08/13 19:56:35.31 Gt0qYtbN.net
>>278
まあそんなに落ち込むな。

284:デフォルトの名無しさん
15/08/13 20:09:47.48 kVSCQFgg.net
自演して一人盛り上がってるアホを見た

285:デフォルトの名無しさん
15/08/13 20:16:46.88 cFZHcgXb.net
長文自己紹介とか草

286:デフォルトの名無しさん
15/08/13 23:59:10.02 /TT2ZElL.net
>>277
毛の壁宛なんだろうが、なんとなく流れ弾に中った感がある

287:デフォルトの名無しさん
15/08/14 06:57:25.05 UKR1Ens3.net
体育会系がルールにこだわるのは
ルールがなければ勝ち目のない相手にもルールを守らせれば勝てるからなんだよな

288:デフォルトの名無しさん
15/08/15 12:23:13.66 fL/PzS3/.net
そんなことってあるか?

289:デフォルトの名無しさん
15/08/15 14:50:11.24 U2H5mvyM.net
常識でしょ
「勝ちたいのならルールを作る側になれ」てよく言うじゃん
そういう意味で体育会系を束ねるのは楽だけどな

290:デフォルトの名無しさん
15/08/15 16:27:38.46 fL/PzS3/.net
「常識でしょ」

291:デフォルトの名無しさん
15/08/15 19:01:57.66 ijksDLQO.net
「選択と集中」だとか「勝ちたいのならルールを作る側になれ」とか
カモリーマン相手の自称ベテランコンサルタントが言いそうな言葉っすね。
そういうゴミみたいな言葉を頭に突っ込むとゴミみたいな考えしか出てこないゴミ頭になります。

292:デフォルトの名無しさん
15/08/15 19:48:49.12 LE4LycT3.net
別に俺俺型クラス作ってもいいんやで

293:デフォルトの名無しさん
15/08/15 20:18:09.10 R9hEcy+E.net
うおおお いつの間にかhackageにあるソースコードがリッチになってる!
URLリンク(hackage.haskell.org)
どうやって作るんだこれ…

294:デフォルトの名無しさん
15/08/15 21:16:49.43 2DqmJ2ZC.net
仕様を作る側って素人でもなれるんだろ
プロは他人が作る仕様 (変更) を予知するべき

295:デフォルトの名無しさん
15/08/16 03:11:32.19 uK7XPl3A.net
ちょっと何言ってるか判らない

296:デフォルトの名無しさん
15/08/16 06:31:17.72 aYrENx1a.net
ワロタ
すげぇなw
URLリンク(dl.dropboxusercontent.com)

297:デフォルトの名無しさん
15/08/16 18:29:05.94 Vkg3e5dl.net
>>292
若干長いけど良い記事だよね。

298:デフォルトの名無しさん
15/08/17 23:42:32.36 E8Zlkk8d.net
>>292 >>293
とても素直な気持ちのいい記事だね

299:デフォルトの名無しさん
15/08/18 17:03:51.11 j5KExTo2.net
いろいろHaskellが変わったらしいけど
今だとHaskellの入門書としてお勧めってどれになるんです?

300:デフォルトの名無しさん
15/08/18 22:53:30.76 1H/7a1LX.net
>>295
いろいろとか言っても Monad が Applicative になったとかそんな程度じゃないの?

301:デフォルトの名無しさん
15/08/19 03:34:39.76 fY37jawe.net
ねえ
Monad m => m (m a, m b) -> (m a, m b)
ってできるっけ?

302:デフォルトの名無しさん
15/08/19 03:58:30.08 fY37jawe.net
失礼。自己解決しました。
join . liftA (uncurry (liftA2 (,)))

303:デフォルトの名無しさん
15/08/20 02:59:44.72 UVdNs5g4.net
writer関数ってタプルの順番間違ってないか?
> (++) <$> (Sum (42::Int), "apple"::String) <*> (Sum 13,"banana")
(Sum {getSum = 55},"applebanana")
> let flipP (a,b) = (b,a)
> (++) <$> (writer $ flipP (Sum (42::Int), "apple"::String)) <*> (writer $ flipP (Sum 13,"banana")) :: Writer (Sum Int) String
WriterT (Identity ("applebanana",Sum {getSum = 55}))
--
現状、
writer :: Monad m => (a, w) -> WriterT w m a
になってるが、
writer :: Monad m => (w, a) -> WriterT w m a
だったら上記の例のflipPが要らない。

304:デフォルトの名無しさん
15/08/20 07:37:43.38 hMgOl3Ol.net
人には右利きと左利きがあって、左利きは「間違ってないか?」とよく言われるが
その問いに正解はない

305:デフォルトの名無しさん
15/08/21 01:40:51.70 fXEaGRk/.net
リトルエンディアン: しばしばビッグエンディアンより優れているとされる
ビッグエンディアン: しばしばリトルエンディアンより優れているとされる

306:デフォルトの名無しさん
15/08/21 07:35:22.72 QHPC0vl0U
なんか、すごいの来たー!!!
URLリンク(www.amazon.co.jp)圏論-原著第2版-Steve-Awodey/dp/432011115X/

あとこれも、
URLリンク(www.amazon.co.jp)圏論の歩き方-圏論の歩き方委員会/dp/4535787204/
以前の数学セミナー(だっけ?)の連載のまとめだと思うけど。

307:デフォルトの名無しさん
15/08/21 22:08:23.86 oak8Xfw5.net
Wikipediaのエンディアンの項目を見ていて一番ばからしいと思ったのは、
エンディアンを切り替えられるバイエンディアンプロセッサ。

308:デフォルトの名無しさん
15/08/22 00:31:10.13 EXDcUcnU.net
なんか、すごいの来たー!!!
URLリンク(www.amazon.co.jp)圏論-原著第2版-Steve-Awodey/dp/432011115X/
あとこれも、
URLリンク(www.amazon.co.jp)圏論の歩き方-圏論の歩き方委員会/dp/4535787204/
以前の数学セミナー(だっけ?)の連載のまとめだと思うけど。
{- 間違えて sc の方に書き込んだら、まるっきり反応がなかった。 -}
{- で、.net で再投稿 -}

309:デフォルトの名無しさん
15/08/22 01:20:33.93 OQor0U0W.net
Wikipedia
>圏論を初期の学部生に教授することは強い反対にあっている。
にわかに圏論の勉強を始めない方が良い?

310:デフォルトの名無しさん
15/08/22 01:53:23.77 PkWehqCK.net
買うわ

311:デフォルトの名無しさん
15/08/22 03:47:42.60 N1uhek7+.net
>>305
一言で言うと、Haskellのモナドや多相型の関数の概念を理解し使いこなす、つまり関数プログラミングの実務に圏論は全く必要ないし
知っていても何の役にも立たない、つまりは圏論はそのキーワードをひけらかしていい恰好したいだけの単なるファッションの飾りに過ぎない
他方、本当に計算の理論(例えば表示的意味論を展開する数学的構造な枠組みとしてのScottらの領域理論など)を
勉強して理解し将来的にはその分野で学術誌か国際会議に論文の1つでも通したいのならば、圏論の勉強は不可欠
(Scott理論の古典的で基礎的な部分の学習だけならば別に圏論を知らなくとも一応はできるけれどね)

312:デフォルトの名無しさん
15/08/22 07:42:28.65 pHk1lnIK.net
>>307
その説明もなんか変なんだよな
いい恰好したいなら金持ちか政治家になればいいのに
なんで批判する側もされる側も学者を標的にするのかさっぱりわからない

313:デフォルトの名無しさん
15/08/22 10:28:17.35 bUf5bCJ1.net
一言で言うと、自動車を運転するために熱力学や内燃機関について知る必要は全くないし
知っていても何の訳にもたたない。つまり熱力学だとかカルノーサイクルを勉強してるやつは
カッコつけたいだけのファッションバカにすぎない。
ブレーキは踏めば止まる、エンジンはなんかガソリン入れときゃ動く、ラジエーターだとか
よくわからんものはガソリンスタンドでチェックしてもらえばいいし、タイヤの空気圧が下がってる
事の意味もガソリンスタンドの人が注意してくれるし、物事が動く原理というのは
全く知る必要がない。
原理厨はなにかとあれこれ勉強しないとわからん言って脅してくるけど、俺達は反知性主義の
旗を掲げて徹底抗戦だ。

314:デフォルトの名無しさん
15/08/22 10:33:20.58 XZXv5ALV.net
例えがまるで的外れだ

315:デフォルトの名無しさん
15/08/22 10:39:12.14 Hb7eGyOr.net
「一言で言うと」で始まる長文を書いてる時点で

316:デフォルトの名無しさん
15/08/22 11:04:44.83 bUf5bCJ1.net
反知性主義自体には共鳴してくれるでしょ。圏論要らない。

317:デフォルトの名無しさん
15/08/22 11:07:41.75 Hb7eGyOr.net
「全く~ない」
とか
「~だけ」
とか
「~にすぎない」
が多用されてる文章は確かに反知性主義的な感じがする。

318:デフォルトの名無しさん
15/08/22 12:08:13.94 pHk1lnIK.net
要らないというのはミニマリストの言葉なんです
ミニマリストが反知性の手口を学べばそっくりそのまま応用できる可能性が高い

319:デフォルトの名無しさん
15/08/23 09:18:45.96 bL4DWVex.net
>>304
宣伝乙(良い意味で)

320:デフォルトの名無しさん
15/08/23 09:57:28.55 LhCUqlmj.net
Haskell分かっても圏論が分かったことにはならないの?
どこで違いが出てくるの?

321:デフォルトの名無しさん
15/08/23 11:44:34.87 28kORioT.net
>>316
Haskは圏のなかでもやや特殊。型付のラムダ計算なんかを抽象化して得られる
圏と近い。例えば、Hask圏では A, B という対象に対して A->B という対象を作れるが、
このような性質は「一般の圏」にはない。

322:デフォルトの名無しさん
15/08/24 02:49:24.38 UcMD+ccy.net
まぁhaskellの学習に圏論必要ないってのはほんま

323:デフォルトの名無しさん
15/08/24 08:58:11.78 kCQmOeKa.net
圏論ワードに外来語的なニーズがあるというコンセンサス

324:デフォルトの名無しさん
15/08/24 11:27:43.78 /WF09MBN.net
Haskellの学習に圏論は必要ないし、そもそもプログラミングを学ぶ必要すらない。
俺達先進国の人間はベトナムの優秀なIT技術者を時給50円で死ぬまで使えば良いからだ。
そもそも何かを学ぶということは人間の自然に反する。言語を捨て、文明を捨て、原始に回帰すること
こそ人類の究極の目標である。

325:デフォルトの名無しさん
15/08/24 11:43:02.32 OjRQ25eS.net
知識がどうとかは、個人ベースの話なので、まったくどうでもいいし、着眼点がずれている
個人の人生のテーマなんぞは、本人にしか関係ないし、他人からしたらどうでもいいこと
お前が知識が要らないと考えるなら、そうすればいいし、俺らには関係ない、お好きにどうぞ
機能性を追及することが、人類の永遠のテーマなのです
分かりやすく言えば、100人の人間が集まって、その100人で、どういう機能を果たすか、ということ
昨今コミュニケーション能力が高らかに叫ばれるのは、そういうこと
ここで、知識は手段に過ぎず、目的になりえない

326:デフォルトの名無しさん
15/08/24 12:00:06.78 kCQmOeKa.net
100人がコミュニケーションすると80人が嘘をつき合計マイナス60人になる場合もある
マイナス60人は1人よりも小さい

327:デフォルトの名無しさん
15/08/24 12:08:55.77 OjRQ25eS.net
そうならないようにするのが、人類のテーマなんです

328:デフォルトの名無しさん
15/08/24 13:50:02.35 1q9FvsVI.net
ワクテカ
URLリンク(haskellformac.com)

329:デフォルトの名無しさん
15/08/24 13:50:44.81 twgtagYC.net
mac 用IDE がもうすぐリリース

330:デフォルトの名無しさん
15/08/24 13:51:24.77 twgtagYC.net
すまん、かぶった

331:デフォルトの名無しさん
15/08/24 19:00:25.78 pjiRa/zc.net
>>320 建設会社でも行ってこい、

332:デフォルトの名無しさん
15/08/24 19:03:26.28 /WF09MBN.net
>>327
圏論厨を滅ぼすまではダメです

333:デフォルトの名無しさん
15/08/25 02:06:08.16 YISO+qUP.net
>>328 ワロタ、あれは生き残るパターンや。プログラミングの機


334:械化がすすむ以上、おまいらが将来つかうことになるからな



335:デフォルトの名無しさん
15/08/25 02:10:41.85 YISO+qUP.net
そもそも真の圏論厨はlispで独自実装しそうなもんだが

336:デフォルトの名無しさん
15/08/25 07:15:28.00 oMRqhMXw.net
Lispと圏論は全然関係ないからやめろよ
C++使えよ
マクロじゃなくてテンプレートを使うんだぞ

337:デフォルトの名無しさん
15/08/25 10:27:27.34 Vmm9Vscj.net
>>317
それはむしろHaskellをやればCCCがすぐ分かるということだ
Haskellをやっても圏論は分からないという例はないの?
>>318
いやその逆で、圏論の学習の替わりにhaskellが使えるか?ということなんだが

338:デフォルトの名無しさん
15/08/25 11:52:16.03 oMRqhMXw.net
例というか、PerlのOOPが異端視されるのと同じ
Perlをいくら完璧に学習しても「OOPを正しく理解していない」と見做される

339:デフォルトの名無しさん
15/08/25 12:14:07.00 Vmm9Vscj.net
OOPと圏論を同列に並べるのはいかがなものか
OOPは茫漠とした思想みたいなもんだが圏論は違うだろ?

340:デフォルトの名無しさん
15/08/25 13:33:39.80 oMRqhMXw.net
違うだろ?ってみんなで答え合わせしないと確信を持てない時点でかなり怪しい
みんなで共有する知識はそういう怪しいものばかり
なので個人で頑張る

341:デフォルトの名無しさん
15/08/25 14:11:55.34 nys8WXaq.net
>>335
Haskellの話に圏論絡めてくる奴は皆殺しにしろとか言い出す
僕みたいな反知性主義者が「答え合わせ」に参加すると結論が歪む。

342:デフォルトの名無しさん
15/08/25 15:35:47.03 YISO+qUP.net
>>336 とりあえず通報しときました。

343:デフォルトの名無しさん
15/08/25 21:13:15.88 nys8WXaq.net
>>337
つうほうせんといてや~

344:デフォルトの名無しさん
15/08/26 01:43:51.18 fE8RXalP.net
圏論やるより型クラス勉強してモナド使うほうがhaskellの勉強になるから

345:デフォルトの名無しさん
15/08/26 08:31:04.41 NnDRip21.net
>>339
そうやな!圏論いらんわ。
だいたいあいつらちょっと数学が得意だからって調子こいてるよな。

346:デフォルトの名無しさん
15/08/26 12:27:26.78 W/3BVY4r.net
いらんってことはないけどな。
圏論だと思って使わなくても圏論の概念は使うことになるし。
逆に言えばわざわざ圏論を学ばんでもどうせ触れるっつー話でもある。
俺ら日本語の文法をわざわざ学んでから喋っとるわけちゃうみたいに、
実用から入っていけばなんとなく自然な使い方もわかるようになるで。
まあ、どっちから入門してもかまへん。
ただ、圏論から入っていくやつをあえてディスるんはやめよで。

347:デフォルトの名無しさん
15/08/26 13:44:56.04 31UMARGP.net
私は関西人ではないのですが、『やめよで』は『やめような』という意味の関西弁として正統なのでしょうか?

348:デフォルトの名無しさん
15/08/26 14:45:58.21 gQwT5cTu.net
圏論は頭の体操にもなるし論文書いたり新しい技法を開発するレベルまでやりたいなら止めはしないが、
haskellのモナドを人に教えるときに圏論の話を絡める奴は全く信用できん、という程度の話。

349:デフォルトの名無しさん
15/08/26 14:54:08.52 H1SEqDeZ.net
>>339
>>340
>>341
君たち、
「Haskellやモナドを使うのに圏論を知っておく必要は全然ない」てのはよく聞くけど
それって、「そんなの知らなくてもできる仕事は一杯あるからね、下流底辺に。
上流の仕事は圏論が分かる層がやるから気にしなくていいよ。」ってニュアンス?

350:デフォルトの名無しさん
15/08/26 15:30:11.46 W/3BVY4r.net
>>344
「最初からハードル上げるな」という話。
Haskell でプログラミングするだけなら圏論を意識することはない。
圏論で言ってることというのは意識せずとも使える程度のものでしかないんだよ


351:。 ただ、そこに明確な定義を与えて名前を付けたのが圏論という学問領域になってるだけ。 言うなれば数学界のデザインパターンが圏論。 先に Haskell を実用している人が圏論みても、 あ~このパターンってこういう名前がついてんのね~、ってくらいの感想だろうよ。



352:デフォルトの名無しさん
15/08/26 15:57:11.19 W/3BVY4r.net
デザインパターンの中には知らなかった (しかし知っていると有用な) パターンだってあるだろうし、
それを学ぶことを無意味と切り捨てることはできない。
圏論として学ばなくても誰かのコードを読んでいるときに知るということもあるだろうから、
圏論という形で学ぶ必要は必ずしも無いけど、
まあほどほどに Haskell を使えるようになった頃に一度くらい斜め読みしてもいいんじゃないのかねとも思う。
上手く使えるようになったつもりでもさー、全然知らなかった概念が頭の中に湧いて出てくるってことはないんだよ。
たとえ話で言えば、字を早く書きたくてペンの性能を目いっぱい追求して満足な結果が出るとするじゃん?
そしたら世の中には実はタイプライターがありました、ワードプロセッサがありました、っていう感じ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch