板検索:
関数型プログラミング言語Haskell Part29 (1001)
まとめビュー
1
岡部メモリリーク健[]   投稿日:2015/07/14 19:27:09  ID:jJ1YDtNe.net(4)
関数型プログラミング言語 Haskell について語るスレです。

         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    < 毛の壁(岡部健)の話は禁止な
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28
コメント1件


2
岡部メモリリーク健[]   投稿日:2015/07/14 19:28:16  ID:jJ1YDtNe.net(4)
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
http://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86...

Haskell - Wikibooks (先述Wikibooksの日本語版。未編集の項目、多)
http://ja.wikibooks.org/wiki/Haskell

Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi

Haskell のお勉強
http://www.shido.info/hs/

Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html

本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog

3
岡部メモリリーク健[]   投稿日:2015/07/14 19:30:31  ID:jJ1YDtNe.net(4)

4
岡部メモリリーク健[]   投稿日:2015/07/14 19:31:05  ID:jJ1YDtNe.net(4)

5
デフォルトの名無しさん[sage]   投稿日:2015/07/14 20:28:01  ID:0RtCvlur.net
健全でない言葉が含まれているため表示しません 内容を確認する

6
デフォルトの名無しさん[sage]   投稿日:2015/07/14 21:11:22  ID:i6nYqHOg.net
AIZU ONLINE JUDGE 競技プログラミング
http://judge.u-aizu.ac.jp/onlinejudge/index.jsp

Haskellで書けるようになった
コメント2件

7
デフォルトの名無しさん[sage]   投稿日:2015/07/14 21:59:12  ID:rJOXcg+a.net
>6
うおおお!!朗報だありがとう!!!

8
デフォルトの名無しさん[]   投稿日:2015/07/14 22:54:43  ID:zZLZaIbg.net
このスレが本スレだな。例のAAが無いと盛り上がらん。

9
デフォルトの名無しさん[]   投稿日:2015/07/14 23:45:50  ID:9bHYU59E.net
>6
うおおお!やったぜ。


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

11
デフォルトの名無しさん[]   投稿日:2015/07/15 10:03:03  ID:YlUThGkU.net
>10
それはわからんのよ。
バイオコンピュータによって可能になるかもしれんしな。

ただ、今目の前にあるのはバイオコンピュータではないってことが大事なんだろうな。

バイオコンピュータが目の前に来てからHaskellを使おうと考えるのが普通の人だわな。
まあその時には、Haskellは無くなってるだろけどな。

12
デフォルトの名無しさん[]   投稿日:2015/07/15 10:12:30  ID:7IHYvImg.net

13
デフォルトの名無しさん[sage]   投稿日:2015/07/15 10:14:47  ID:FLOJGmtq.net
関数型言語におけるmapの定義:

https://www.haskell.org/tutorial/functions.html
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
デフォルトの名無しさん[]   投稿日:2015/07/15 12:17:03  ID:xvlXRMcz.net
UCLA卒業と、岡部健(kenokabe・毛の壁)を語ろう [転載禁止]©2ch.net
UCLA卒業と、岡部健(kenokabe・毛の壁)を語ろう /学歴板
コメント1件

15
デフォルトの名無しさん[sage]   投稿日:2015/07/15 12:19:15  ID:K1aSLVoR.net
>14
もう許してやれよ

16
デフォルトの名無しさん[]   投稿日:2015/07/15 15:43:52  ID:D9jiOfI+.net
岡部健がQiitaのコメント欄に出没してるぞ〜(歓喜)

http://qiita.com/nonstarter/items/2763f5d85f2b8df3b18b#comment-7d7a978d53ad17b911c5

今度の名前はqiitapostの模様

17
デフォルトの名無しさん[]   投稿日:2015/07/15 15:53:29  ID:LpfZNZ91.net
とうとう荒らしに墜ちたか

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

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

20
デフォルトの名無しさん[sage]   投稿日:2015/07/16 04:10:56  ID:KHTiVbh0.net
         ,.-―: ̄`ー::::::::::、
       /::::::::::::.::::::::::::::::::::::::::::`::、、
      /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、
      l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l
      l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l
     l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l
     l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l
     ヽ:::: ´、ひ> ;:  l .<ひ>'  、::::::::/
    ヽ:::::    ̄ .)::;  l  ̄   l::::/    
     、:::::..   /:::; .,-、     l:::/、
    ,―::::::::  ゝヽ- ー' 、    l::/,、ヽ
     l,、,、,,:、:: / ,--、,-.、_ l    /::::::,、,、l
   l,、,、,、,、,、::、 `ー ̄-'   /:::::::::::,、,、l
   l,、,、,、,、,、,、::ヽ      /::::::::、,、,、,、,ノ:\

こんにちは。
私は現在、関数型プログラミングを勉強している者で、まさにこちらのスレで批評されている書籍を読んで、思考を切り替えるためのコツを分かり易く学べたと考えている者です。
様々な視点から学び、理解を深めたいと考えており、こちらのスレも目を通し、関心を持って注目しております。

21
デフォルトの名無しさん[]   投稿日:2015/07/16 18:10:05  ID:GJpPkx9w.net
mapは命令型でしか書けない。

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

23
デフォルトの名無しさん[]   投稿日:2015/07/17 09:35:07  ID:tmwhQ/Tf.net
モナドって一言で言うとなんなん?
コメント2件

24
デフォルトの名無しさん[sage]   投稿日:2015/07/17 10:24:36  ID:F5MI8UaQ.net
世界線

25
デフォルトの名無しさん[sage]   投稿日:2015/07/17 10:36:26  ID:MFPhKAxg.net(2)
>23
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a

っていう関数が定義されていてモナド則を満たすもの
コメント2件

26
デフォルトの名無しさん[]   投稿日:2015/07/17 11:26:02  ID:6p5xRLuM.net
>25
なるほど
やっぱり岡部健の間違いか。

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

28
デフォルトの名無しさん[]   投稿日:2015/07/17 18:24:18  ID:xMYrjQca.net
>25
一言で言うとなんなん?言うてるやん
それともほんとは分かってないから言えないとか?
コメント2件

29
デフォルトの名無しさん[sage]   投稿日:2015/07/17 20:05:48  ID:OMUEmUCh.net
なんやこら調子乗んなしばくど

30
デフォルトの名無しさん[sage]   投稿日:2015/07/17 22:36:24  ID:5l1JDgrx.net
>28
「一言」って、どれくらいの長さまで認めてくれるの?

31
デフォルトの名無しさん[sage]   投稿日:2015/07/17 23:01:29  ID:MFPhKAxg.net(2)
>28
自己関手の圏におけるモノイド対象
コメント1件

32
デフォルトの名無しさん[sage]   投稿日:2015/07/18 00:36:23  ID:74tlor8C.net
>23,28
順次、反復、分岐のうち分岐を可能にする構造[1]
という説明であれば一般的なプログラマは理解できるはず

[1] http://d.hatena.ne.jp/kazu-yamamoto/20150128/1422413182
コメント3件

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

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

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

36
デフォルトの名無しさん[sage]   投稿日:2015/07/18 11:55:58  ID:wQVOOXnd.net
Maybe/Eitherならエラー時の処理、リストならリスト内包表記におけるフィルター処理が分岐にあたる
他のモナドだと直感的に「分岐」とはみなせないような例もあるかもしれないけど
そのモナドなりの意味で分岐を解釈できるはず

Functorを箱とみなすか文脈とみなすかみたいな話と同じで
一言で言おうとしたときに具体例を選べばどうしたって他で無理のある解釈が出てくるわけで
そこを突っ込みたかったら結局「定義にもどれ」ということになる
コメント1件

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

38
デフォルトの名無しさん[sage]   投稿日:2015/07/18 12:36:02  ID:v0EKlLM2.net
皆様方
以降、スルーでよろしくおながいします

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

40
デフォルトの名無しさん[]   投稿日:2015/07/18 14:56:48  ID:BTDuC5lZ.net

41
◆Ww2pZaKGaW0T [sage]   投稿日:2015/07/18 15:17:02  ID:UfuhnolG.net
最初に無があった
無は有を生んだ
これが全ての真理

42
デフォルトの名無しさん[]   投稿日:2015/07/18 19:49:11  ID:sxZpdZw2.net
>40
ちゃんと見て無いけど、
どっちもどっちな感じ…

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

どう考えてもkenokabeのコードが悪いと思うが。
コメント1件

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

45
デフォルトの名無しさん[sage]   投稿日:2015/07/18 22:45:41  ID:obUySxxZ.net
>43
これに関してはメモリリークの件でコード改竄を指摘されて
「お前らだってコード改竄してるじゃないか!」
って言いたいんだろうなぁと思う。

事実関係よりも心の平安を保てるかどうかで発言してるっぽいし。

46
デフォルトの名無しさん[sage]   投稿日:2015/07/19 00:11:41  ID:g7CK7gj2.net
main = do
print "Hello"

これをghc hello.hsすると生成された実行ファイルのサイズが1MB超えるんですが
こんなものですか?
もっと大量のコードが書けるほどのレベルではないんですが、500行ぐらい書いたらサイズが1GB言っちゃうんじゃないかと心配になりました
コメント1件

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

48
デフォルトの名無しさん[]   投稿日:2015/07/19 01:43:02  ID:csGsF3Kw.net
qtライブラリを使えば、1mbぐらい気にならなくなるじゃろ。
コメント1件

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

50
デフォルトの名無しさん[sage]   投稿日:2015/07/19 08:05:11  ID:BgJ/88od.net(2)
>44 はかなり良い説明だと感じた。
一面を捉えた正確な説明だと思いますよ。

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

52
デフォルトの名無しさん[sage]   投稿日:2015/07/19 10:57:36  ID:XE+dCI5P.net
取り敢えず初心者にモナドってなんなの?って訊かれたら、オレオレDSLのフレームワークって言っときゃ良いんでしょ?
コメント1件

53
デフォルトの名無しさん[sage]   投稿日:2015/07/19 13:47:54  ID:I4MCl2HA.net
モノイド大将がボス

54
デフォルトの名無しさん[sage]   投稿日:2015/07/19 15:46:09  ID:I1Wicbx/.net
>52 その説明いつも全然意味不明

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

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

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

58
デフォルトの名無しさん[sage]   投稿日:2015/07/19 19:00:07  ID:OqblcV5w.net(3)
>57
分からんなら後回しにして比較的分かりやすいところを先に解決すればいいと思う
分からんところに拘るのは効率が悪い
コメント1件

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

60
デフォルトの名無しさん[sage]   投稿日:2015/07/19 19:32:23  ID:OqblcV5w.net(3)
>59
対案を出せばいいと思う
コメント1件

61
デフォルトの名無しさん[sage]   投稿日:2015/07/19 21:26:06  ID:BgJ/88od.net(2)
>51 のような疑問は、Applicative と Monad のパワーの違いとは?ということであり、
それについてはすごいHaskell に平易な解説があったと思う。

要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れるってことだ。
コメント2件

62
デフォルトの名無しさん[]   投稿日:2015/07/19 23:30:44  ID:ZQ+VxBJa.net(4)
>60
対案出せと言われましても意味分からんからできません、なんよw わからへん?

>61
> 要するに>>= があるおかげで、 モナドから取り出した値を見て、次に行う副作用を作れる
それって、 (>>=) :: m a -> (a -> m b) -> m b  言うてるだけやし

63
デフォルトの名無しさん[sage]   投稿日:2015/07/19 23:34:09  ID:bed99W+w.net
実際monadとapplicativeどっちも使える状況なら
applicative使ったほうがいいよって言われてね?
コメント1件

64
デフォルトの名無しさん[]   投稿日:2015/07/20 00:20:18  ID:0TG+/+/W.net
和書のどれかに載ってた床下配線が一言だと一番分かりやすいと思った
コメント1件

65
デフォルトの名無しさん[sage]   投稿日:2015/07/20 00:27:41  ID:wg3sT89+.net(2)
>61
取り出すところまでは同じだが、取り出した後でできることが違う
m a -> (a -> b) -> m b
m a -> (a -> m b) -> m b
-- 超えられない壁 --
m a -> (a -> b) -> b
コメント1件

66
デフォルトの名無しさん[sage]   投稿日:2015/07/20 02:08:57  ID:u/oPh9jr.net
つか正直>51が何言ってるかわからん

>63
mapでできることをfoldや再帰でやらないってのと同じ発想だね

67
デフォルトの名無しさん[]   投稿日:2015/07/20 09:29:20  ID:c+ACSEXZ.net
>64
箱やコンテナもそうだがそういう物理的比喩は所詮本物じゃない

>65
超えられないのか?
コメント1件

68
デフォルトの名無しさん[sage]   投稿日:2015/07/20 09:57:42  ID:wg3sT89+.net(2)
>67
IOが超えられない
モナドクラスというのはIOと同じクラスになりたいやつが集まってるから

69
デフォルトの名無しさん[]   投稿日:2015/07/20 21:32:15  ID:tLpP/4eq.net(2)
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"
とやってもうまく取り出せません。。
コメント3件

70
デフォルトの名無しさん[sage]   投稿日:2015/07/20 21:52:25  ID:WnNA5LDR.net(2)
そりゃ型あわないんだから出来ないよそんなこと
コメント1件

71
デフォルトの名無しさん[]   投稿日:2015/07/20 22:03:47  ID:l2CykBu3.net
健全でない言葉が含まれているため表示しません 内容を確認する

72
69[]   投稿日:2015/07/20 22:10:25  ID:tLpP/4eq.net(2)
>70
関数のオーバーロードみたいの使ってできるようにないませんかね??
コメント1件

73
デフォルトの名無しさん[]   投稿日:2015/07/20 22:56:29  ID:XuKvM2I+.net(2)
モナドは型クラス。ある代数データ型に、
それに対応するfmap, ap, bind が揃っているだけ。

だが、その代数データ型の値をデータコンストラクタで出来上がった
構文木と見ると、代数データ型がBNFみたいに見えてくるはずだ。
そのBNFが表現する言語に、まさにfmap, ap, bindが制御構造を
もたらすものとして理解できる。

これが「モナドがDSLフレームワーク」ということの意味。

74
デフォルトの名無しさん[]   投稿日:2015/07/20 23:06:18  ID:XuKvM2I+.net(2)
>69
>getData :: DataType -> a

なんでこの型付けがおかしいかわかれば
getDataが作れないことの諦めがつくよ。

75
デフォルトの名無しさん[sage]   投稿日:2015/07/20 23:52:10  ID:WnNA5LDR.net(2)
>72
Haskellに関数のオーバーロードはない
型クラスを変に絡めればあるにはあるけど

どういう状況を想定してその関数がほしいと思ったのかを教えてもらえれば、アドバイスできるかもしれない
基本的にHaskellではそういう関数を必要とすることはないはず

76
デフォルトの名無しさん[sage]   投稿日:2015/07/21 00:28:11  ID: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"}
コメント1件

77
デフォルトの名無しさん[sage]   投稿日:2015/07/21 00:39:13  ID:xbZldfZG.net
>76
確かに記述上できる事になるけど
意味ないなあー

78
デフォルトの名無しさん[]   投稿日:2015/07/21 01:37:31  ID:XB/uoEzx.net
むしろ

Num a => DataType a
getData :: DataType a -> [a]

みたいにしたらいけない理由が見当たらない。

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

80
デフォルトの名無しさん[sage]   投稿日:2015/07/21 13:15:45  ID:Dco/MENI.net
モナドは一度使えば最後までついて回るしがらみ

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

82
デフォルトの名無しさん[]   投稿日:2015/07/21 13:22:20  ID:B0LBt+ac.net
岡部健がQiitaで発狂続けてて大草原
コメント1件

83
デフォルトの名無しさん[]   投稿日:2015/07/21 13:32:51  ID:aaCdXzrq.net
GitHub/Qiita/StackOverflowの臭い奴を観察1 /ネットwatch板
GitHub/Qiita/StackOverflowの臭い奴を観察1

84
デフォルトの名無しさん[]   投稿日:2015/07/21 19:49:21  ID:LwXUVlfX.net

85
デフォルトの名無しさん[sage]   投稿日:2015/07/21 22:58:37  ID:eRnXfzMM.net
毛の壁の記事を探索するbotコンテストでも開催しろ

86
デフォルトの名無しさん[]   投稿日:2015/07/23 08:07:45  ID:Hd8z6Qav.net
>82
Qiita荒らしにしか見えない。

87
デフォルトの名無しさん[]   投稿日:2015/07/23 09:38:20  ID:UOPnVIxG.net(8)
Monadでは
>>= :: ma -> (a -> mb) -> mb
となっているですが、これは、どうして
>>= :: ma -> (ma -> mb) -> mb(つまり普通のapply)
ではだめなのでしょうか?
コメント2件

88
デフォルトの名無しさん[sage]   投稿日:2015/07/23 10:23:45  ID:9NQb4Eqn.net(6)
>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 を吸収して
適用してくれる。だから、「モナドでラップされた値を取り出して適用してくれる」
みたいな言われ方をするけど、まあ、結果としてそう見えるようなうまい定義が
されてる。(例えばモナド則なんかがそんなうまい定義の背景にあって、そういうのを
どうやって思いついたか説明しようとすると圏論の話しになる。しらんでいい。)
コメント1件

89
デフォルトの名無しさん[sage]   投稿日:2015/07/23 10:30:27  ID:9NQb4Eqn.net(6)
>87

ついで。 IO () みたいに、「中身がない」というか、文脈を持ってるという以外に
意味がないモナド値ってのもある。もっと広く言うと状態系のモナドね。

そういう場合、

f :: X -> m ()
g :: Y -> m ()
h :: Z -> m ()

みたいなのを「つなげたい」場合がある。これは入り口が違うので (>>=) は使えない。
だもんで、(>>) なんてのがある。

90
デフォルトの名無しさん[]   投稿日:2015/07/23 10:46:01  ID:UOPnVIxG.net(8)
>88
>>= :: ma -> (a -> mb) -> mb
を用意する代わりに、
extract :: ma -> a
みたいなのがあれば、普通の関数適用だけでも同じことができるのではないのですか?
コメント2件

91
デフォルトの名無しさん[sage]   投稿日:2015/07/23 11:47:48  ID:9NQb4Eqn.net(6)
>90
「そういうのが作れるならば」あなたのおっしゃるとおり。

具体的に考えてみましょう。 m が Maybe の場合、 extract Nothing は何になりますか
コメント1件

92
デフォルトの名無しさん[sage]   投稿日:2015/07/23 11:59:35  ID:9NQb4Eqn.net(6)
>90
よくいろいろなところで、(>>=) は「モナドから値を取り出して関数に適用する」
と言われたりするけど、unit と join を基礎にしてモナドを作ると、このトリックは
理解しやすい。

参考: https://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96

要するに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 の値を返してる。
(つまりモナドの中から値を引っ張りだす、というような事は実際にはやってないわけ)。

実際にはモナドのなかから値を引っ張りだしてないにも関わらず、引っ張りだして
適用したと「プログラマの心の中で」みなしていても整合してるように書けてしまう。

そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
正直、圏論だとかいってもこのレベルの話ならグラフ理論と難しさは変わらん。
(表示的意味論でも圏論を使うけど、そっちは数学がよほど好きでないと厳しい)。
コメント3件

93
デフォルトの名無しさん[]   投稿日:2015/07/23 13:06:35  ID:UOPnVIxG.net(8)
>91
> extract Nothing は何になりますか
なるひどこれは困った。。。

>92
たしかに、fmap と join を基礎にすれば、 >>= はその一手ですね

>>= :: ma -> (a -> mb) -> mb の中では、特に、
a -> mb の部分がモナドにとって本質的なんだなと思えてきました
コメント1件

94
デフォルトの名無しさん[]   投稿日:2015/07/23 13:35:05  ID:UOPnVIxG.net(8)
>92
> そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。
「そういううまいルール」とは、どこの事でしょうか?
コメント1件

95
デフォルトの名無しさん[sage]   投稿日:2015/07/23 13:41:38  ID:UOPnVIxG.net(8)
>92
extract :: ma -> a
は存在しない場合があるようですが、
いつも存在しないのですか?
また、join :: m(ma) -> ma
は必ず存在するのですか?
コメント1件

96
デフォルトの名無しさん[sage]   投稿日:2015/07/23 14:03:17  ID:9NQb4Eqn.net(6)
>94
そういう上手いルール、はモナド則です。(Functor則と合わせて機能する)。

>95
たとえば identity モナドなら extract は存在します。大事なのは「一般には、モナド M
に対して extract :: M a -> a が定義できない」ということ。 extract の存在を仮定してると
モナドの一般論にはならないわけです。

join :: M(M a) -> M a

の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
Mがモナドであるかぎり必ず存在する。

参考:http://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Monad.html#v:join

(さっき挙げたWikibooksのページには、unit + join でやる流儀と unit + bind
でやる流儀の両方が解説されてます。論理的にはどっちで考えても良い。)
コメント1件

97
デフォルトの名無しさん[sage]   投稿日:2015/07/23 18:38:39  ID:KEVSaEFA.net
日本語でおすすめの入門サイトってありますか?

98
デフォルトの名無しさん[sage]   投稿日:2015/07/23 21:02:13  ID:hAeb0KoI.net
Haskellの型システムは入門用ではない
静的型と動的型の高度な煽り合いの成果物だ

99
デフォルトの名無しさん[sage]   投稿日:2015/07/23 21:31:05  ID:UOPnVIxG.net(8)
>96 :デフォルトの名無しさん:2015/07/23(木) 14:03:17.98 ID:9NQb4Eqn
> そういう上手いルール、はモナド則です。
うまいというより、ふつうに定義すればモナド則は満たされるのではないですか?

> join :: M(M a) -> M a
> の存在は、モナドの構成要件の一つだと言って差し支えないと思います。
joinがそうであるのにextractがそうでないのはなぜでしょうか?
まあ、oinは不可欠だが、extractはなくても代わりがあるからだということなのでしょうが
コメント1件

100
デフォルトの名無しさん[sage]   投稿日:2015/07/23 21:46:55  ID:9NQb4Eqn.net(6)
>99
たとえば http://d.hatena.ne.jp/itto100pen/20090710 に、モナド則の一部が満たされない例があります。
「普通に定義すれば」モナド則は満たされるというのは、経験的には確かにそういう場面が多いかもしれませんが、
状況が込み入ってくれば、いつか「普通にモナドっぽいものを作ったつもり」なのにモナド則を満たさないものに
遭遇するかもしれません。

>joinがそうであるのにextractがそうでないのはなぜでしょうか?
モナドというものがそういうものだからとしか言いようがないですね。

>93 であなたは
>a -> mb の部分がモナドにとって本質的なんだなと思えてきました

と書いていましたが、この X -> m Y 型の射をつなげてどうにかするための仕組みが
備わっているものをモナドと呼ぶわけです。うまくこのタイプの射をつなげるためには、
ダブったmをうまく剥がしてくれるものが必要で、それが join なわけです。

さっき挙げたWikibooksのページに、join を使って bind を作ったり、bind を使って join を作る
話が載ってますので、参考になさってください。

一方、あなたが書いてる extract :: M a -> a に相当する仕組みを考える場面は
一応あります。それは、 m X -> Y 型の射をうまくつなげてどうにかしたい場合です。
それは「コモナド」と呼ばれてます。(これを積極的に考える場面もあるらしいのですが
私の勉強が追いついていないのでコモナドについてこれ以上語れることはありません。)
コメント1件

101
デフォルトの名無しさん[sage]   投稿日:2015/07/23 21:58:48  ID:GSXYPmA+.net(2)
>100
空でないデータ構造に対して、その中のある(現在注目している)要素を特に指し示す
ある種のポインターを持った構造として使う、というのがよく知られた例ではないかと。

ストリームをチューリングマシンのテープに見立てた時のヘッドの現在位置とか。

102
デフォルトの名無しさん[sage]   投稿日:2015/07/23 22:28:56  ID:ul3W6A8M.net
extract を要求しなくてもいろんなことができる、という程度におれは考えてるなぁ

103
デフォルトの名無しさん[sage]   投稿日:2015/07/23 23:19:05  ID:UOPnVIxG.net(8)
> たとえば http://d.hatena.ne.jp/itto100pen/20090710 に、モナド則の一部が満たされない例があります。
ページ紹介ありがとうござます。
そこの return x = [x x] は、(私の思うw)「ふつうの」定義ではないので、
それがモナド則を満たさないのも尤もかなと思いました
コメント1件

104
デフォルトの名無しさん[sage]   投稿日:2015/07/23 23:32:47  ID:GSXYPmA+.net(2)
>103
逆に言えば、あなたが直観的に思う「ふつう」を保証してくれるのがモナド則なのですわ。
コメント1件

105
デフォルトの名無しさん[sage]   投稿日:2015/07/23 23:45:33  ID:UOPnVIxG.net(8)
>104
モナド則というのがそういうものだという説明ははじめて聞きました。本当ですか?

106
デフォルトの名無しさん[sage]   投稿日:2015/07/24 00:04:12  ID:E+4NqHJH.net(2)
まあ要はそれらは「自然」な振る舞いをするようにできているのです。

107
デフォルトの名無しさん[sage]   投稿日:2015/07/24 06:20:03  ID:SOLi30hJ.net
そんな希望的観測は法則を知らなくてもできるから法則の意味がない
法則はもっと不吉な意味を持つべきなんだよ

「不自然にならないよう自然を保証してくれるので復旧シナリオは考えていない」
まさかこのパターンの意味がわからない難聴系主人公はいないよね
コメント1件

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

109
デフォルトの名無しさん[]   投稿日:2015/07/24 08:31:24  ID:sUR4TL+C.net(2)
モナド則を満たさないモナドインスタンスは使用者が大いに困るだろう
上の return x = [x x]
とか
コメント1件

110
デフォルトの名無しさん[sage]   投稿日:2015/07/24 09:47:25  ID:+b/Jkmb9.net(2)
明らかにモナド則を満たさないモナドインスタンスの例はよく出てくるけど、
「ふつうの」FunctorやApplicative Functorであって
Monadでないものの具体例ってあるのかな
コメント2件

111
デフォルトの名無しさん[sage]   投稿日:2015/07/24 10:31:52  ID:qo8KZeeD.net

112
デフォルトの名無しさん[sage]   投稿日:2015/07/24 12:24:32  ID:mRGyPSzK.net
>109
確かにロボットが困った顔してるように見える

113
デフォルトの名無しさん[sage]   投稿日:2015/07/24 16:30:09  ID:sUR4TL+C.net(2)
>110
間違ってるかもしらんけど
関数はFunctorやApplicative Functorだけどmonadではなかったような
コメント2件

114
デフォルトの名無しさん[sage]   投稿日:2015/07/24 18:21:56  ID:ZflfUkEE.net(4)
>113
関数は恒等モナドなのでしょう?

115
デフォルトの名無しさん[sage]   投稿日:2015/07/24 20:30:46  ID:ZflfUkEE.net(4)
とにかくモナド則ってモナドの本質とは全然関係ないですよね。
そのネーミングがよくないなw
コメント2件

116
デフォルトの名無しさん[sage]   投稿日:2015/07/24 22:02:00  ID:UUB1Rdtf.net(2)
>115
モナドの本質とは、Kleisli射が「合成できる」ことであって、モナド則は
そのような合成が well-defined であることを保証しているという意味では本質と
関係している。
コメント1件

117
デフォルトの名無しさん[sage]   投稿日:2015/07/24 22:15:15  ID:E+4NqHJH.net(2)
>113
(->)型はモナド。
Readerモナドの正体は関数モナドそのもの。

118
デフォルトの名無しさん[sage]   投稿日:2015/07/24 22:26:30  ID:XFwmWe1A.net(2)
モナド則は情報量保存則のようなものだと思ってもよい
(>>=)やreturnでwrapするだけで元の情報が失われるような実装は禁止
後に続く関数に元の情報を全て渡す

つまりわざと情報を捨てればモナド則を満たさない例を作れる
return x = ("", x)
(_, x) >>= f = f x

("warning", x) >>= return = ("", x)
コメント1件

119
デフォルトの名無しさん[sage]   投稿日:2015/07/24 22:29:22  ID:+b/Jkmb9.net(2)
>111
なるほどZipListか
まだちゃんと読めてないんだけど、
> (可算無限も含めて)長さが固定のベクトルだったらその定義で上手く行くんだけどね、
> でも一般のリストに対する上手い定義ももしかしたらあるかもね
って感じの結論か
return (= pure) が無限リストを返すから
確かにモナド則を満たすのは容易ではなさそう

>115
Haskellでは型さえ合っていればコンパイルできてしまうだけで
モナドがモナド則を満たすのはむしろ定義だと思う
コメント1件

120
デフォルトの名無しさん[]   投稿日:2015/07/24 22:52:20  ID:jOlzxqLq.net
まあMonadLikeクラスでも作ってモナド則無しでやってみろよ
辛くなったら帰って来い

121
デフォルトの名無しさん[sage]   投稿日:2015/07/24 23:04:31  ID:ZflfUkEE.net(4)
>116
> モナド則は...合成が well-defined であることを保証している
>118
> モナド則は情報量保存則のようなものだと思ってもよい
>119
> モナドがモナド則を満たすのはむしろ定義だと思う

えっ? モナド則って単位元の存在と結合則ですから、モナドに限らないおよそ代数演算に
課される最低限の規則に過ぎないでしょう?
コメント1件

122
デフォルトの名無しさん[sage]   投稿日:2015/07/24 23:18:40  ID:UUB1Rdtf.net(2)
>121
その最低限の規則だって明示的に指定して置かなければ混乱するでしょ。
あなたにとって最低限のことは隣の誰かにとっては最低限の常識ではない。
コメント1件

123
デフォルトの名無しさん[sage]   投稿日:2015/07/24 23:40:04  ID:XFwmWe1A.net(2)
結合法則 (x + y) + z = x + (y + z)
交換法則 (+ z) . (x +) = (x +) . (+ z)
これらは数学的に同じ意味だから
結合法則は最低限だとか、交換法則は最低限じゃないとかいうのは
数学じゃなくて言葉遊びだよね
コメント1件

124
デフォルトの名無しさん[sage]   投稿日:2015/07/25 07:47:47  ID:6zkZTkly.net
結合法則を満たせば半群
群は交換法則を満たさなくてもよい,満たすものを特に可換群とよぶ

十分に数学的だ

125
デフォルトの名無しさん[sage]   投稿日:2015/07/25 07:57:27  ID:Jr3WK49j.net(2)
非可換群なんかいくらでもあるのにね。

126
デフォルトの名無しさん[sage]   投稿日:2015/07/25 08:09:08  ID:Jr3WK49j.net(2)
Z上でのある演算(+)の結合法則から構成される構造を
別の台集合(+z)(x+)と合成(.)で構成される構造に等価だといったところで
もとの演算(+)の可換性について何も言ったことにはならないというだけのことよね
コメント1件

127
121[sage]   投稿日:2015/07/25 08:44:38  ID:Bvjhkxqq.net(3)
>122 >123
強調点は「最低限」のところではなく「およそ(ふつうの)代数演算に共通」
というところにありました

128
121[sage]   投稿日:2015/07/25 08:46:08  ID:Bvjhkxqq.net(3)
だから、モナドの特質を表すものじゃないと

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

130
デフォルトの名無しさん[sage]   投稿日:2015/07/25 09:14:59  ID:bPfkCbEC.net
数学の話はいいからHaskellの話を

131
デフォルトの名無しさん[sage]   投稿日:2015/07/25 09:34:33  ID:Bvjhkxqq.net(3)
trace :: ((B, D) -> (C, D)) -> B -> C
trace f b = let (c, d) = f(b, d) in c

としたとき、このtraceってwell-defined?

132
デフォルトの名無しさん[sage]   投稿日:2015/07/26 10:00:37  ID:dkr9+eHq.net(2)
型に特質があるから値の特質(モナド則?)はなくても良くね?
「選択と集中」とかいう言葉を信じるなら値に特質を持つことは寧ろ禁止した方が良い
コメント2件

133
デフォルトの名無しさん[sage]   投稿日:2015/07/26 11:46:33  ID:rsm1cXgs.net
HackageDBである特定のパッケージに依存しているパッケージの一覧を得る
検索方法はないでしょうか。

たとえば、yesod が必要なパッケージの一覧など。

134
デフォルトの名無しさん[sage]   投稿日:2015/07/26 14:06:20  ID:ihM0rggd.net
>132
その「選択と集中」というカルト宗教流行ってるの? 根拠もなんもないくせに
耳あたりだけいい言葉に騙されてない?

選択と集中でおもいっきり原子炉にぶっこんだ東芝はどうなった? 

135
デフォルトの名無しさん[]   投稿日:2015/07/26 20:37:01  ID:vJ1KGCO5.net(3)
さすがにそこで原発でてくんのは謎

136
デフォルトの名無しさん[]   投稿日:2015/07/26 20:44:23  ID:vJ1KGCO5.net(3)
マジレスするとモナド則を満たしてないモナドインスタンスはバグだ
利用者が困る

137
デフォルトの名無しさん[sage]   投稿日:2015/07/26 20:52:18  ID:dkr9+eHq.net(2)
色々な機能を全部まとめて売りつけようとする奴がいるから
欲しくないものまで買わされて損する場合がある
それよりは欲しいものだけを集中的に買って損する方がマシ
コメント1件

138
デフォルトの名無しさん[]   投稿日:2015/07/26 21:02:49  ID:vJ1KGCO5.net(3)
モナド則満たしてないモナドインスタンスなんて欲しくないもの買わされたって状態だよ

139
デフォルトの名無しさん[sage]   投稿日:2015/07/26 21:02:55  ID:PdaEJy2y.net
モナド則を満たしていることをコンパイル時に証明する機構がHaskellに望まれる

140
デフォルトの名無しさん[sage]   投稿日:2015/07/26 23:01:02  ID:ooP+OwHf.net
完全な保証は無理でもQuickCheckあたりでなんとかならんかな

141
デフォルトの名無しさん[sage]   投稿日:2015/07/27 03:43:19  ID:+mQx9Q9E.net
選択と集中というのは、経済学の用語で比較優位の話だ。

なんでこんな所で選択と集中の話が出てくるの?

142
デフォルトの名無しさん[sage]   投稿日:2015/07/27 06:11:57  ID:3edBlaSG.net
よくわからないけどモジュールは疎結合が正義って話しかな?

143
デフォルトの名無しさん[sage]   投稿日:2015/07/27 11:31:50  ID:pQHi2myk.net
exportは天国、importは地獄
特に、間接的なimportを強制されたら最悪

144
デフォルトの名無しさん[sage]   投稿日:2015/07/27 22:21:38  ID:+pmDbRz6.net
>137
ジャック・ウェルチが言ってる「選択と集中」とは何の関係もないな

145
デフォルトの名無しさん[sage]   投稿日:2015/07/28 05:08:55  ID:XoUEQPXj.net
なるほど
ジョブズのようなものがいるんだ

146
デフォルトの名無しさん[sage]   投稿日:2015/07/28 11:57:02  ID:RBpFIWq5.net
プログラマも経営センスを求められるというお話?

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

148
coolio[]   投稿日:2015/07/28 16:34:52  ID:n3cGSoaV.net
Haskellってオワコンなんでは?
なんでJavaScript使わないのみなさん?
普及率も需要もこっちの方が上だし、国際的潮流かとおもうけど
コメント2件

149
デフォルトの名無しさん[sage]   投稿日:2015/07/28 17:47:57  ID:d4M8qnVV.net(3)
>148
じゃあまずお前が国際的潮流に合わせて英語か中国語で書き込めよ
コメント1件

150
デフォルトの名無しさん[sage]   投稿日:2015/07/28 17:50:36  ID:Ni9zj/4A.net
Javascriptやってればいいじゃん
人のことはどーだってよくね?

151
デフォルトの名無しさん[sage]   投稿日:2015/07/28 21:05:55  ID:ROVV0dd8.net
まるで何でスタバ行かないのって聞かれたような気分

152
デフォルトの名無しさん[sage]   投稿日:2015/07/28 21:40:55  ID:UXOcgM9+.net
>149
哦,可以用國語嗎?你看得到呢?
コメント1件

153
デフォルトの名無しさん[sage]   投稿日:2015/07/28 21:54:20  ID:d4M8qnVV.net(3)
>152
日本語でOK

154
デフォルトの名無しさん[sage]   投稿日:2015/07/28 22:15:38  ID:uKnSRdVu.net
我想喝啤酒!

155
デフォルトの名無しさん[sage]   投稿日:2015/07/28 22:49:30  ID:MQ4Zq0Y1.net
Haskellは無料で遊べちまうけど需要のあるJSは徹底的に課金するべき

156
デフォルトの名無しさん[sage]   投稿日:2015/07/28 23:02:16  ID:2DleteTo.net
ビールといえば、資源ごみ捨てないと…

157
デフォルトの名無しさん[sage]   投稿日:2015/07/30 13:15:34  ID:XKVzkpKt.net
ghcの新型出るんですか?


158
デフォルトの名無しさん[sage]   投稿日:2015/07/31 14:52:35  ID:gTceL3gJ.net
毛の壁また来てるの?
さっさと2chから消えろ

159
デフォルトの名無しさん[]   投稿日:2015/07/31 21:02:27  ID:SPFFmEBo.net
無理だよ、毛は10年前からナンパ書き込みしたりしてるから

160
デフォルトの名無しさん[sage]   投稿日:2015/07/31 22:59:33  ID:Tuqyf3gY.net
いつどこに誰が来たのかさっぱりわからないし意味不明。

161
デフォルトの名無しさん[sage]   投稿日:2015/08/01 01:31:31  ID:CYsajC4S.net
ヤングアニマル No.15
アンダーメンバー全員集合 16ページ お祭り騒ぎ

ベルセルク連載開始 + 別冊付録 直近4話分


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

162
デフォルトの名無しさん[sage]   投稿日:2015/08/01 05:22:40  ID:494SgxRt.net
そういや原発の長文書き込む荒らしがなりを潜めたと思ったら、入れ替わるように毛の壁ブームが起こったな
コメント1件

163
デフォルトの名無しさん[sage]   投稿日:2015/08/01 10:47:10  ID:jD/MwJWz.net
1人しか敵視しない1bit脳が基本だから
客観的に1人いようが2人いようが主観的には1人しか視えない

164
デフォルトの名無しさん[sage]   投稿日:2015/08/02 20:21:12  ID:htkPKsn5.net(2)
モナドの合成って難しいことなの?
コメント1件

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

166
デフォルトの名無しさん[sage]   投稿日:2015/08/02 20:39:24  ID:Iy0keT5I.net
きーたぽすととかいうけのかべが抹消されたようだ

167
デフォルトの名無しさん[sage]   投稿日:2015/08/02 21:10:57  ID: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 ファイルのどこを直せば良いのでしょうか。
コメント1件

168
デフォルトの名無しさん[sage]   投稿日:2015/08/02 21:22:35  ID:PjsL8G7T.net(3)
>167
>doc-index-file: $datadir/doc/$arch-$os-$compiler/index.html

普通に

doc-index-file: $datadir/doc/$arch-$os-$compiler/$pkgid/index.html

じゃいかんの?

169
デフォルトの名無しさん[sage]   投稿日:2015/08/02 21:23:45  ID:PjsL8G7T.net(3)
あ、 ....../$pkgid/html/index.html かな。パスの途中に "html" 入れ忘れた。

170
デフォルトの名無しさん[sage]   投稿日:2015/08/02 21:27:13  ID:PjsL8G7T.net(3)
ごめん見当違いだったわ。
総インデックスファイルは確かにそこになきゃダメだ。

171
デフォルトの名無しさん[sage]   投稿日:2015/08/02 22:14:50  ID:5gB+ySz/.net
>164
モナドは自己関手なんで、関手を合成することができるが、
そうしてできた合成関手は一般にはモナドにならない。
コメント1件

172
デフォルトの名無しさん[sage]   投稿日:2015/08/02 23:43:12  ID:htkPKsn5.net(2)
>171
合成関手はモナドになり得ると思うが。。。
モナドの合成は一般にはモナドにならないということね?
なぜそうなのか、まだよく分かってないのだが、
そもそも合成できないっていうのはモナドが圏的でないということね?
それって結構困ったことなのでは?
コメント1件

173
デフォルトの名無しさん[sage]   投稿日:2015/08/03 01:17:03  ID:kH5++B+D.net
>> 167
見当違いかもしれないけど、俺の手元の~/.cabal/configは
htmldir: $docdir/html
になってた。貴方のは
htmldir: $dicdir/html
コメント1件

174
デフォルトの名無しさん[sage]   投稿日:2015/08/03 07:24:39  ID:UJ5SIf4H.net
>173
すいません、ただの書き間違えです。
私の方でも正しくは

htmldir: $docdir/html

です。

175
デフォルトの名無しさん[sage]   投稿日:2015/08/03 11:59:33  ID:C3iL4RK8.net
>172
モナドFとGについて、合成関手FGに対して適切なηとμを、
「一般には」構成できない。FとGがよほど相性が良い場合は別だけど。
コメント1件

176
デフォルトの名無しさん[]   投稿日:2015/08/03 17:24:38  ID: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 `(_、_)   /  \´  )゚
 \_)    `ヽ   : :;;*:;   : : : |    (_ノ
         人__;;:;;、___ノ          ヽヽ        ヽヽ
             ;:;;:;;:;,,           ──┐ |  |   ──┐ |  |
          ∬ ;;:;::.;::.::;::..:;:..: ∬          /  |  |      /.  |  |
      ・〜   ;::;.:;:;:;:;:.:;:.:::.;:;:;.:.:.:          ノ    ノ  ┐ ノ    ノ  ┐
          ∬;;;:::;;;:;:.:;:.::.:;;.:.;.:;.:; ∬                 ┴    ヽヽ     ┴
              :"

177
デフォルトの名無しさん[sage]   投稿日:2015/08/04 07:05:53  ID:fTn2TRnu.net
もし敵の武器をコピーする能力があったら
意味不明すぎてコピーできない武器を使えばいい

178
デフォルトの名無しさん[sage]   投稿日:2015/08/04 09:50:58  ID:Jii/ZMO+.net(2)
>175
了解。
モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
プログラミングとしては、致命的なのではないの?
コメント2件

179
デフォルトの名無しさん[sage]   投稿日:2015/08/04 18:16:37  ID:Qc8p5PG4.net
>178
代数的な議論とか言ったって簡単に情報系の議論に移せるよ。

Fという文脈に、さらにGという文脈をつけたものは、先にG、それをFでかぶせたものとは
同一視できない。

もう少し具体的に言えば、Maybeと状態モナドStateを考えたとき、Maybe State s a と State s Maybe a
を何も制約つけずに同一視できるほうがプログラミングとしては致命的だよ。
コメント1件

180
デフォルトの名無しさん[sage]   投稿日:2015/08/04 20:22:00  ID:T0ZfeL7S.net
すいませんハスケル初級者で質問なのですが
ハスケルでは「=」は代入ではなく束縛だという事で

関数定義
func :: Int -> Int
func x = func (x - 1) 
それを使った式
func 100

と書いた場合無限に減算を繰り返す理由は
「=」は代入ではなく束縛だから
ハスケルがfunc xに該当する唯一の値を求めて処理を繰り返すという
仕組みになっているという理解でよろしいでしょうか。
コメント1件

181
デフォルトの名無しさん[sage]   投稿日:2015/08/04 20:46:26  ID:8q1xh6ui.net
代入とか束縛とか関係ない

int func(int x) {
. return func(x-1);
}

int x = func(100);

Cでこう書いたって無限再帰
コメント1件

182
デフォルトの名無しさん[sage]   投稿日:2015/08/04 21:03:02  ID:Jii/ZMO+.net(2)
>179
可換でないといけないとは言っていない。
合成ができないのが致命的と言ったのだが
コメント1件

183
デフォルトの名無しさん[sage]   投稿日:2015/08/05 08:30:57  ID:XaoKQAnn.net
素数と素数の積が素数でないのは致命的じゃないが
モナドとモナドの合成がモナドでないのは致命的か?
コメント1件

184
デフォルトの名無しさん[sage]   投稿日:2015/08/05 08:31:02  ID:8IuY4/EZ.net
>180 それは
x = x - 1
とかの場合の話じゃない?
コメント1件

185
デフォルトの名無しさん[sage]   投稿日:2015/08/05 09:20:55  ID:PKbBdrRV.net
>182
なぜ致命的なのかさっぱりわからない
コメント1件

186
デフォルトの名無しさん[sage]   投稿日:2015/08/05 11:55:37  ID:6JvEd9Ae.net(2)
>183 >185
> 素数と素数の積が素数でないのは致命的じゃないが
それは素数の本質からの帰結だが、モナドの場合はそうではない。
もし整数と整数の積が整数にならないとすると、それは整数概念にとってかなり致命的。
群とまでいわなくても圏すらなさない概念はふつう使い物にならない
コメント1件

187
デフォルトの名無しさん[sage]   投稿日:2015/08/05 12:21:47  ID:/t+jhWZx.net(2)
>178
>モナドが合成できないということは、代数的議論としてはそうだと言ってればいいんだろうが、
>プログラミングとしては、致命的なのではないの?

そりゃモナドでプログラミングしたことなきゃわかんないよな
コメント1件

188
デフォルトの名無しさん[sage]   投稿日:2015/08/05 13:35:33  ID:WyZxE69I.net(2)
>186
よくわからんが仮に「モナド」が使い物にならないなら
「素関手」みたいな、素数に似た名前の新しい概念を提案すればいいんだろ?
コメント2件

189
デフォルトの名無しさん[sage]   投稿日:2015/08/05 14:44:47  ID:6JvEd9Ae.net(2)
>188
今は、素でないといけないと言ってるわけじゃないし(むしろ素しかないのは変だなと言ってる)
名前を問題にしてるわけでもないんだが

190
デフォルトの名無しさん[sage]   投稿日:2015/08/05 15:47:37  ID:WyZxE69I.net(2)
ただ名前を提案するだけでも、何も提案しない奴よりマシになれるからね
コストは最小化した方が良いし

191
デフォルトの名無しさん[sage]   投稿日:2015/08/05 19:06:59  ID:nSk5CAms.net
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

192
デフォルトの名無しさん[sage]   投稿日:2015/08/05 20:35:22  ID:3EIw/aJp.net
>191
やったらいいじゃん

193
180[sage]   投稿日:2015/08/05 20:35:53  ID:++LOioZG.net
>181 >184
すいません代入束縛関係なく無限再帰の構文でした。

無限再帰途中で停止するため基底部を
パターンマイッチングの設定で止めてみました。

func' :: Int -> Int
func' 0 = 0
func' x = func' (x - 1)

x = x - 1でもやってみます。

194
デフォルトの名無しさん[sage]   投稿日:2015/08/05 23:13:16  ID:/t+jhWZx.net(2)
x = x-1

はHaskellだと止まらないよ。

x = x-1 = (x-1)-1 = ((x-1)-1)-1) = ...

といつまでたっても書き換えが終わらないから。
ただこの例ではループの検出が容易なのでghciで

ghci> let x = x-1
ghci> x

を試すと *** Exception: <<loop>> となって中断される。
基底部のない再帰はそうならない。
コメント1件

195
デフォルトの名無しさん[sage]   投稿日:2015/08/06 15:22:18  ID:gwZmdoaP.net
>187
ほんとこれ。 モナドの積がモナドにならないことがなぜ致命的なのか、全然言えないんだよねこの人。
コメント1件

196
デフォルトの名無しさん[sage]   投稿日:2015/08/06 16:19:38  ID:hE+0lNLB.net
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ
コメント1件

197
デフォルトの名無しさん[sage]   投稿日:2015/08/06 20:09:37  ID:QVat9e3X.net
でもまあ何をやってもダメな奴は
自分は何もやらず安く買って高く売るだけの能力に全振りしてるんじゃないか
コメント1件

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

199
デフォルトの名無しさん[sage]   投稿日:2015/08/07 09:35:35  ID:qqVIQMo+.net(2)
>188
素関手ってのは、あらゆる関手がそれらから合成できるときに使う言葉だ。
モナドは全然そんなものじゃないだろ?

>195 >196 >197
モナドっていうのは、ごく限られた単純局面でのみ使えるプログラミング技法だっていう自覚はないの?
その意味で、関手はもちろんメジャーだが、モナドはニッチなんだよ。
もっと実用の「コード書いて」いくとそれがわかってくると思うが
コメント1件

200
デフォルトの名無しさん[sage]   投稿日:2015/08/07 10:39:25  ID:aKStrfm+.net
>199
御託はいいんだよ。モナドってのは自己関手が作り出す「文脈」を引き継いで
どんどん計算してく、そういう発想をカタチにしたものなわけ。そういう具体的な
思想と具体的な実装を持っていて、Wadlerが示したように do 記法を通じて
参照透明性を壊さずに命令型のプログラミングができることは示された。

んで君は、「モナドは合成できないじゃないか」と言ってるわけ。んなこたあ誰だって
知ってるんで、たとえばモナドをパラメトリックにして、モナドトランスフォーマなんかを
考えたらいいんじゃね?いや、それ一見いいように思えてモナドがタワー状に積み重なって
保守しづらいんだけどとかいろんな人がまだあれこれやってる最中。

なんか便利なものができたら、その「便利なもの」が切り開いた地平の先に新しい岩があるの。
それは「問題の解決がもたらした新しい問題」なので頭が痛いところだけど、そうやって新しい問題の
解決のために挑むのが「知性ある人間」のしごとなの。

「馬車は不便」を内燃機関による自動車が解決したけど、今度はその馬力と速度を人間が
制御しそこねて「走る棺桶」だと言われたり、自動車による死者が多すぎて「交通戦争」と
言われたりすることに対して、シートベルトが知性ある人間によって発明されたの。
シートベルトは中途半端な解決策だね、ということでエアバッグを発明したの。

なんかのアイデアが副次的にもたらす頭の痛い問題をとりあげる、それは大事。
でも、「こんな致命的な欠陥があるから問題外」という考えは知性の放棄なの。

「自動車事故で人がたくさん死ぬから自動車禁止な」←知性の放棄です。

経済的工学的制約があるから、自動車事故の問題だってまだ解決してない。でもそれを
解決しようと続けることが知性なの。

モナドの合成の話は頭が痛い問題で、まだ十分な解決策をだれも見いだせてない。でも
それで喚き散らして「欠陥品」と罵ってるのはバカでもできる。知性がある人間は君が喚き散らしてる
間も圏論の本を読みながら「いくらかマシなアイデア」をひねり出そうとしてるの。
コメント2件

201
デフォルトの名無しさん[sage]   投稿日:2015/08/07 13:17:15  ID:SvrTmQUlp

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

203
デフォルトの名無しさん[sage]   投稿日:2015/08/07 20:18:30  ID:/Xr5U2Jc.net
あれこれ空論には饒舌でも結局コード書かない奴は何をやってもダメ

204
デフォルトの名無しさん[sage]   投稿日:2015/08/07 22:14:14  ID:CgCkvu6a.net
合成するならモナドじゃなくて、モナドに供する関数でやってくれってことかねぇ。

モナドでパイ生地宜しく抽象レイヤ重ね出したら、結局手続き型と同じ業を背負い込むんじゃねーの?
という素朴な疑問がある。

205
デフォルトの名無しさん[sage]   投稿日:2015/08/08 07:32:51  ID:OWyBYzJT.net(3)
手続き型言語がーってのは的外れだな
この流れなら普通は自然言語に疑問をもつ
自然言語なんて空論記述言語にすぎないんじゃねーかと
コメント1件

206
デフォルトの名無しさん[sage]   投稿日:2015/08/08 09:16:43  ID:SyZUU7PY.net
>205
意味不明w
自然言語だからか?w

207
デフォルトの名無しさん[sage]   投稿日:2015/08/08 10:03:20  ID:OWyBYzJT.net(3)
都合が悪いようだな
自然言語を理想とする理想主義が否定されれば高級言語や人工知能の大部分が崩れるから
コメント1件

208
デフォルトの名無しさん[sage]   投稿日:2015/08/08 10:56:41  ID:fC37rrhT.net
>207
逆だよ。ラッセルのような論理主義は自然言語が曖昧性を持ち、真理を記述するのに不適格だと
考えて記号論理を推進した。そのラッセルが生み出した型理論を(大幅に)修正したものが
強い型を持つ言語の基盤になっている。

自然言語による真理記述に興味を持ち続けた学者もいるけど、少数派(間違いだといいたいわけじゃない)
で、今日のプログラミング言語には全く影響を与えていない。

209
デフォルトの名無しさん[sage]   投稿日:2015/08/08 14:05:14  ID:OWyBYzJT.net(3)
低級言語に曖昧性はない
高級言語は曖昧性がないことに加えて更に別の理想を追求している
おそらく一度あきらめた理想を取り戻そうとしている

210
デフォルトの名無しさん[sage]   投稿日:2015/08/08 15:28:39  ID:TgCfkrij.net(2)
毛の壁みたいなこと言ってないでコード書けよ

211
デフォルトの名無しさん[sage]   投稿日:2015/08/08 15:52:47  ID:mk1m6mga.net
Haskellでまともなコードが書ける日本人なんていないでしょ

212
デフォルトの名無しさん[sage]   投稿日:2015/08/08 16:16:44  ID:TgCfkrij.net(2)
あっそう(ハナホジー

213
デフォルトの名無しさん[sage]   投稿日:2015/08/08 17:24:31  ID:CVdJzgpn.net(2)
都合のいいサンプルを出してるだけだ

214
デフォルトの名無しさん[sage]   投稿日:2015/08/08 17:25:05  ID:CVdJzgpn.net(2)
>200みたいな評論のことね

215
デフォルトの名無しさん[]   投稿日:2015/08/08 17:31:44  ID:9n35IarN.net
ガラパゴスなおまえらには無理

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

217
デフォルトの名無しさん[sage]   投稿日:2015/08/09 09:57:54  ID:Goie4Pfe.net
仕事でも趣味でも普通に世界でバリバリHaskell書いてる日本人たくさんいるけどな
コメント1件

218
デフォルトの名無しさん[sage]   投稿日:2015/08/09 10:15:53  ID:z+nEtG9u.net
理想の言語を選べ
1 自然言語 ←コード書かない
2 型を書くだけ ←コード書かない
3 短い (一行とか) ←コード書く
コメント1件

219
デフォルトの名無しさん[sage]   投稿日:2015/08/09 10:19:57  ID:yc5ubK7v.net(2)
>217
日本人が普通に世界でバリバリHaskellで書いたアプリケーションをたくさん紹介してくれ
コメント1件

220
デフォルトの名無しさん[sage]   投稿日:2015/08/09 11:07:30  ID:uWrNjf8R.net
>218
この3つの中では
1しかないかな?
2と3は論理的にありえない

221
デフォルトの名無しさん[sage]   投稿日:2015/08/09 12:47:58  ID:fLWMExWl.net
>219 外資金融系とか。
コメント1件

222
デフォルトの名無しさん[sage]   投稿日:2015/08/09 15:46:05  ID:IcT2pazV.net(2)
>221
金融屋だけどHaskellは実務ではあんまり使わないよ
金融業界で使われている有名なライブラリがOcamlで書かれてるから、Ocamlが多い
あとは、F#だっけ?なんか、Ocaml互換のプログラミング言語
コメント1件

223
デフォルトの名無しさん[sage]   投稿日:2015/08/09 16:06:00  ID:q2cZe2Ik.net
>222 知らないんだったら黙っててね
コメント1件

224
デフォルトの名無しさん[sage]   投稿日:2015/08/09 16:07:28  ID:t8Adpj37.net
言語名間違えてる時点で完全にモグリ。
コメント1件

225
デフォルトの名無しさん[sage]   投稿日:2015/08/09 17:14:22  ID:IcT2pazV.net(2)
>223
普通に現職の俺より詳しいというなら、なにかそれらしい反論してみろって

>224
OCamlだったか、すまん
特定のドメイン領域でしか使わないし、俺は普段使わないから間違えたの

226
デフォルトの名無しさん[sage]   投稿日:2015/08/09 17:56:53  ID:jZAMYmB+.net
エアコーダーさんは黙ってね

227
デフォルトの名無しさん[sage]   投稿日:2015/08/09 20:15:02  ID:yc5ubK7v.net(2)
どうせ紹介してくれるのならオープンソースの方がいいな。
まともに動く Haskell アプリのソース全体が見れる機会ってなかなかないんだ。
日本人が書いたなんて意地悪なことはもう言わんから、紹介してくれないか。

github 漁っても、実験的なものやサンプル、ライブラリくらいしか見あたらん。
なんか小粒な Web アプリはやたら出てくるが、なんだろ。
流行ってるのか?

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

229
デフォルトの名無しさん[sage]   投稿日:2015/08/09 21:19:45  ID:0nk6UHsv.net
金融ってMATLABで数値計算ガリガリというイメージだがな。
コメント1件

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

231
デフォルトの名無しさん[sage]   投稿日:2015/08/09 22:57:12  ID:PuCXERZp.net
>229
数値計算につかうわけじゃない
ADTで金融商品の記述のDSL作って使う

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

233
デフォルトの名無しさん[]   投稿日:2015/08/10 10:22:50  ID:6CToalvR.net(9)
この場がいいのかどうか分かりませんが、もし分かれば教えてください。

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]
となってしまい、明らかに
この定理は成り立たないと思うのですが、どこか誤解があるでしょうか?
コメント4件

234
デフォルトの名無しさん[sage]   投稿日:2015/08/10 10:23:33  ID:h0Losqum.net
ヘア告訴しか出来ない卑怯者がブンブンうるさいね

235
デフォルトの名無しさん[sage]   投稿日:2015/08/10 10:32:54  ID:mZ18nlaN.net
>233 rの型が違う
コメント1件

236
デフォルトの名無しさん[]   投稿日:2015/08/10 10:45:40  ID:6CToalvR.net(9)
>235
> rの型が違う
どう違うのでしょうか? 気が付きません
コメント1件

237
デフォルトの名無しさん[sage]   投稿日:2015/08/10 11:02:23  ID:dDBl8Ksv.net
>236 HaskellかMLのプログラム書いたことある?

238
デフォルトの名無しさん[]   投稿日:2015/08/10 11:20:23  ID:6CToalvR.net(9)
どこが違うかを直接指摘してくれるとありがたいです

239
デフォルトの名無しさん[sage]   投稿日:2015/08/10 13:39:27  ID:Mr6uGRV9.net
232の謎の言語のコンパイラはどこにあるんだろう
もしかしてコンパイラがなくても型が見える人なのかな

Haskellも自分が使うためじゃなくて型が見えない人のために作っただけ
そう考えるとHaskellでアプリを作っている気配がないのも辻褄が合う

240
デフォルトの名無しさん[sage]   投稿日:2015/08/10 14:07:42  ID:3agS2rXW.net(6)
>233
Wadlerの論文のどこの話をしてるの?
コメント2件

241
デフォルトの名無しさん[]   投稿日:2015/08/10 14:33:14  ID:qNcURq9A.net
岡部健さんこんにちは

242
デフォルトの名無しさん[sage]   投稿日:2015/08/10 14:40:16  ID:08na6m/L.net(2)
>240
http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf
Introductionの話だと思う

>233が何を言いたいのかは分からないけど
コメント4件

243
デフォルトの名無しさん[sage]   投稿日:2015/08/10 15:19:32  ID:3agS2rXW.net(6)
>242
ありがとう。そんな最初のところだったのか。
こりゃ単に r はパラメトリック多相な関数じゃなきゃいかんて話だな。

>233みたいに型ごと値ごとにアド・ホックな対応を付けて
r を構成することはできない(任意の型のリストの任意の値を
取らなきゃいけないんで計算可能にならない)。
コメント1件

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

245
デフォルトの名無しさん[sage]   投稿日:2015/08/10 15:29:36  ID:3agS2rXW.net(6)
>242

"odds"はIntについてしか定義できないだろ。
他の型についてどうやって定義すんだ?

というわけで、どんな型のリストにも適用できる関数は
特定の型の値を具体的に見て処理できないので
リストの構造を弄ることしかできない、ということよ
コメント1件

246
デフォルトの名無しさん[sage]   投稿日:2015/08/10 15:29:57  ID:3agS2rXW.net(6)
あ、アンカー間違えた。>242じゃなくて>244

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

248
デフォルトの名無しさん[sage]   投稿日:2015/08/10 15:32:35  ID:3agS2rXW.net(6)
>247
この文脈での「関数」が計算可能関数じゃなきゃいけないのは常識。
コメント1件

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

250
デフォルトの名無しさん[sage]   投稿日:2015/08/10 15:42:48  ID:3agS2rXW.net(6)
まあ、こりゃアド・ホック多相の話をしてない、ってだけだな。
コメント1件

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

252
デフォルトの名無しさん[age]   投稿日:2015/08/10 16:08:40  ID: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.
コメント1件

253
デフォルトの名無しさん[]   投稿日:2015/08/10 18:26:41  ID:6CToalvR.net(9)
>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)」だけではその意図を正確に形式化できていないのではないか?
と疑問なのですが。。。

254
デフォルトの名無しさん[sage]   投稿日:2015/08/10 19:25:00  ID:aurF6Aj8.net(2)
ML多相はad hoc多相ではないし、プログラミング言語理論でpolymorphismと言ったらデフォルトでparametric polymorphism。Cardelliのチュートリアルから読み直せ。

255
デフォルトの名無しさん[sage]   投稿日:2015/08/10 19:25:52  ID:aurF6Aj8.net(2)
ついでに、∀でad hoc多相表すほうが稀だから。

256
デフォルトの名無しさん[sage]   投稿日:2015/08/10 19:27:08  ID:xfbTbnyl.net
形式化はイントロ以外の本論か、普通の型理論の入門書を読み直そう。

257
デフォルトの名無しさん[sage]   投稿日:2015/08/10 19:32:28  ID:G+nIt1Sd.net(3)
associated data type は日本語では何と言うのが通例でしょうか。
コメント1件

258
デフォルトの名無しさん[sage]   投稿日:2015/08/10 19:44:04  ID:yZ3j9jzU.net(2)
どっかの大学のレポート課題?
コメント1件

259
デフォルトの名無しさん[sage]   投稿日:2015/08/10 20:02:43  ID:G+nIt1Sd.net(3)
>258
私(>257)への質問でしょうか。
勘違いでしたらすいません。

普通の社会人です。

type family を調べていたら出てきましたが、type family は型族という訳があるのに
associated data type は訳がネット上に見当たらないので質問しました。

単純に「関連データ型」でググっても associated data type に関連する記事は見当たりませんでした。

260
デフォルトの名無しさん[sage]   投稿日:2015/08/10 20:31:37  ID:P/rKXiwW.net
VBAでもやってろよ

261
デフォルトの名無しさん[sage]   投稿日:2015/08/10 20:54:08  ID:yZ3j9jzU.net(2)
ある程度以上のプログラミングを日本語で勉強しようというのが無理なので英語のままで検索することをおすすめする
コメント1件

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

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

264
デフォルトの名無しさん[sage]   投稿日:2015/08/10 23:19:26  ID:08na6m/L.net(2)
どのように書かれていたら ID:6CToalvRは「正確に形式化できている」と判断するのだろうか

265
デフォルトの名無しさん[sage]   投稿日:2015/08/11 00:48:36  ID:35SQIDRW.net
俺が悪いんじゃない、Wadlerの書き方が悪いんだ、と言いたいのかもな

266
デフォルトの名無しさん[sage]   投稿日:2015/08/11 06:26:59  ID:hdf2tNQK.net(2)
∀型の意味はSystem Fとして厳密に形式化されている。「型システム入門」にも書いてある初歩。

267
デフォルトの名無しさん[sage]   投稿日:2015/08/11 06:30:12  ID:hdf2tNQK.net(2)
Wadlerの論文でも4節のFigure 2でちゃんと定式化の復習してるじゃねーか。読まずに書くなよ

268
デフォルトの名無しさん[sage]   投稿日:2015/08/11 06:36:13  ID:l/j/VTng.net
>263

論文や入門書どころか2chのレスすら読めないのか?

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

269
デフォルトの名無しさん[sage]   投稿日:2015/08/11 08:39:19  ID:cH2UxrcD.net
パラメータ多相はtemplateのようなものに型名を渡すだけで実体化する

アドホック多相は実体化する前に
["a", "b"] |-> ["a", "b", "b"],
[1, 2] |-> [2, 1]
のような単相のコードを仕込んでおかないと実体化できない
つまり型名だけでなくコードとか色々な情報を注入している

270
デフォルトの名無しさん[sage]   投稿日:2015/08/11 21:39:29  ID:csNtDDNc.net
パラメータ多相とかアドホック多相とかいろいろ出てるが
それらに共通の「多相」って何か言ってみろよ
コメント1件

271
デフォルトの名無しさん[sage]   投稿日:2015/08/12 10:32:15  ID:E9Tw94sD.net
>270
君はなぜ自分より知識や教養が上の相手にタメ口なんだ
コメント1件

272
デフォルトの名無しさん[sage]   投稿日:2015/08/13 12:02:19  ID:mwGqyG64.net(2)
>271
答えられないのか?
ところで君はこのスレをご主人と崇める番犬なんだな?w
コメント1件

273
デフォルトの名無しさん[sage]   投稿日:2015/08/13 15:16:34  ID:M3nW2qvP.net
基本的用語の検索もできない自称プログラマって生きてて恥ずかしくないの?
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)

274
デフォルトの名無しさん[sage]   投稿日:2015/08/13 15:18:03  ID:d32APRUA.net
大学1年生か2年生の課題とかじゃない?

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

276
デフォルトの名無しさん[sage]   投稿日:2015/08/13 15:52:21  ID:Gt0qYtbN.net(3)
>272
おまえみたいなダメ学生のレポート代筆を誰が手伝うかってことです。

277
デフォルトの名無しさん[sage]   投稿日:2015/08/13 16:02:02  ID:Gt0qYtbN.net(3)
田舎の秀才というか、狭い世界で褒められてるうちに
自我が肥大してしまっていつしか
「わからなくてもコツコツ勉強するのは大事」
「世の中わからんこともある」
「わからんのは、教え方が悪いからとは限らず、自分の知力の限界かもしれない」
というようなことを認めようとしないまま中途半端な歳まで来ちゃうと限りなくアウトに
近い。

妙に肥大した自我と釣り合いを取るために、「わたしには
知性も教養も欠けてるのでどうか憐れむと思って教えてください」
の一言が出せずに煽ることしかできない、そういう喧嘩腰が
いつまでも通じると思ってる時点で社会知性が低すぎてダメ。
コンビニのバイトですら務まらないレベル。


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


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

278
デフォルトの名無しさん[sage]   投稿日:2015/08/13 19:19:34  ID:mwGqyG64.net(2)
>277
君どうしちゃったんだ?w
本題についてだけ静かに語ればいいんだよ
コメント1件

279
デフォルトの名無しさん[sage]   投稿日:2015/08/13 19:56:35  ID:Gt0qYtbN.net(3)
>278
まあそんなに落ち込むな。

280
デフォルトの名無しさん[sage]   投稿日:2015/08/13 20:09:47  ID:kVSCQFgg.net
自演して一人盛り上がってるアホを見た

281
デフォルトの名無しさん[sage]   投稿日:2015/08/13 20:16:46  ID:cFZHcgXb.net
長文自己紹介とか草

282
デフォルトの名無しさん[sage]   投稿日:2015/08/13 23:59:10  ID:/TT2ZElL.net
>277
毛の壁宛なんだろうが、なんとなく流れ弾に中った感がある

283
デフォルトの名無しさん[sage]   投稿日:2015/08/14 06:57:25  ID:UKR1Ens3.net
体育会系がルールにこだわるのは
ルールがなければ勝ち目のない相手にもルールを守らせれば勝てるからなんだよな

284
デフォルトの名無しさん[sage]   投稿日:2015/08/15 12:23:13  ID:fL/PzS3/.net(2)
そんなことってあるか?

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

286
デフォルトの名無しさん[sage]   投稿日:2015/08/15 16:27:38  ID:fL/PzS3/.net(2)
「常識でしょ」

287
デフォルトの名無しさん[sage]   投稿日:2015/08/15 19:01:57  ID:ijksDLQO.net
「選択と集中」だとか「勝ちたいのならルールを作る側になれ」とか
カモリーマン相手の自称ベテランコンサルタントが言いそうな言葉っすね。

そういうゴミみたいな言葉を頭に突っ込むとゴミみたいな考えしか出てこないゴミ頭になります。

288
デフォルトの名無しさん[sage]   投稿日:2015/08/15 19:48:49  ID:LE4LycT3.net
別に俺俺型クラス作ってもいいんやで

289
デフォルトの名無しさん[sage]   投稿日:2015/08/15 20:18:09  ID:R9hEcy+E.net
うおおお いつの間にかhackageにあるソースコードがリッチになってる!
http://hackage.haskell.org/package/base-4.8.1.0/docs/src/GHC.Base.html#local-1627391929
どうやって作るんだこれ…

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

291
デフォルトの名無しさん[sage]   投稿日:2015/08/16 03:11:32  ID:uK7XPl3A.net
ちょっと何言ってるか判らない

292
デフォルトの名無しさん[sage]   投稿日:2015/08/16 06:31:17  ID:aYrENx1a.net

293
デフォルトの名無しさん[sage]   投稿日:2015/08/16 18:29:05  ID:Vkg3e5dl.net
>292
若干長いけど良い記事だよね。
コメント1件

294
デフォルトの名無しさん[sage]   投稿日:2015/08/17 23:42:32  ID:E8Zlkk8d.net
>292 >293
とても素直な気持ちのいい記事だね

295
デフォルトの名無しさん[sage]   投稿日:2015/08/18 17:03:51  ID:j5KExTo2.net
いろいろHaskellが変わったらしいけど
今だとHaskellの入門書としてお勧めってどれになるんです?
コメント1件

296
デフォルトの名無しさん[sage]   投稿日:2015/08/18 22:53:30  ID:1H/7a1LX.net
>295
いろいろとか言っても Monad が Applicative になったとかそんな程度じゃないの?

297
デフォルトの名無しさん[sage]   投稿日:2015/08/19 03:34:39  ID:fY37jawe.net(2)
ねえ

Monad m => m (m a, m b) -> (m a, m b)
ってできるっけ?

298
デフォルトの名無しさん[sage]   投稿日:2015/08/19 03:58:30  ID:fY37jawe.net(2)
失礼。自己解決しました。
join . liftA (uncurry (liftA2 (,)))

299
デフォルトの名無しさん[sage]   投稿日:2015/08/20 02:59:44  ID: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が要らない。

300
デフォルトの名無しさん[sage]   投稿日:2015/08/20 07:37:43  ID:hMgOl3Ol.net
人には右利きと左利きがあって、左利きは「間違ってないか?」とよく言われるが
その問いに正解はない

301
デフォルトの名無しさん[sage]   投稿日:2015/08/21 01:40:51  ID:fXEaGRk/.net
リトルエンディアン: しばしばビッグエンディアンより優れているとされる
ビッグエンディアン: しばしばリトルエンディアンより優れているとされる

302
デフォルトの名無しさん[sage]   投稿日:2015/08/21 07:35:22  ID:QHPC0vl0U
なんか、すごいの来たー!!!
http://www.amazon.co.jp/dp/4535787204/

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

304
デフォルトの名無しさん[sage]   投稿日:2015/08/22 00:31:10  ID:EXDcUcnU.net
なんか、すごいの来たー!!!
http://www.amazon.co.jp/dp/4535787204/
以前の数学セミナー(だっけ?)の連載のまとめだと思うけど。

{- 間違えて sc の方に書き込んだら、まるっきり反応がなかった。 -}
{- で、.net で再投稿 -}
コメント1件

305
デフォルトの名無しさん[sage]   投稿日:2015/08/22 01:20:33  ID:OQor0U0W.net
Wikipedia
>圏論を初期の学部生に教授することは強い反対にあっている。

にわかに圏論の勉強を始めない方が良い?
コメント1件

306
デフォルトの名無しさん[sage]   投稿日:2015/08/22 01:53:23  ID:PkWehqCK.net
買うわ

307
デフォルトの名無しさん[sage]   投稿日:2015/08/22 03:47:42  ID:N1uhek7+.net
>305
一言で言うと、Haskellのモナドや多相型の関数の概念を理解し使いこなす、つまり関数プログラミングの実務に圏論は全く必要ないし
知っていても何の役にも立たない、つまりは圏論はそのキーワードをひけらかしていい恰好したいだけの単なるファッションの飾りに過ぎない

他方、本当に計算の理論(例えば表示的意味論を展開する数学的構造な枠組みとしてのScottらの領域理論など)を
勉強して理解し将来的にはその分野で学術誌か国際会議に論文の1つでも通したいのならば、圏論の勉強は不可欠
(Scott理論の古典的で基礎的な部分の学習だけならば別に圏論を知らなくとも一応はできるけれどね)
コメント1件

308
デフォルトの名無しさん[sage]   投稿日:2015/08/22 07:42:28  ID:pHk1lnIK.net(2)
>307
その説明もなんか変なんだよな
いい恰好したいなら金持ちか政治家になればいいのに
なんで批判する側もされる側も学者を標的にするのかさっぱりわからない

309
デフォルトの名無しさん[sage]   投稿日:2015/08/22 10:28:17  ID:bUf5bCJ1.net(2)
一言で言うと、自動車を運転するために熱力学や内燃機関について知る必要は全くないし
知っていても何の訳にもたたない。つまり熱力学だとかカルノーサイクルを勉強してるやつは
カッコつけたいだけのファッションバカにすぎない。

ブレーキは踏めば止まる、エンジンはなんかガソリン入れときゃ動く、ラジエーターだとか
よくわからんものはガソリンスタンドでチェックしてもらえばいいし、タイヤの空気圧が下がってる
事の意味もガソリンスタンドの人が注意してくれるし、物事が動く原理というのは
全く知る必要がない。

原理厨はなにかとあれこれ勉強しないとわからん言って脅してくるけど、俺達は反知性主義の
旗を掲げて徹底抗戦だ。

310
デフォルトの名無しさん[sage]   投稿日:2015/08/22 10:33:20  ID:XZXv5ALV.net
例えがまるで的外れだ

311
デフォルトの名無しさん[sage]   投稿日:2015/08/22 10:39:12  ID:Hb7eGyOr.net(2)
「一言で言うと」で始まる長文を書いてる時点で

312
デフォルトの名無しさん[sage]   投稿日:2015/08/22 11:04:44  ID:bUf5bCJ1.net(2)
反知性主義自体には共鳴してくれるでしょ。圏論要らない。

313
デフォルトの名無しさん[sage]   投稿日:2015/08/22 11:07:41  ID:Hb7eGyOr.net(2)
「全く〜ない」
とか
「〜だけ」
とか
「〜にすぎない」
が多用されてる文章は確かに反知性主義的な感じがする。

314
デフォルトの名無しさん[sage]   投稿日:2015/08/22 12:08:13  ID:pHk1lnIK.net(2)
要らないというのはミニマリストの言葉なんです
ミニマリストが反知性の手口を学べばそっくりそのまま応用できる可能性が高い

315
デフォルトの名無しさん[sage]   投稿日:2015/08/23 09:18:45  ID:bL4DWVex.net
>304
宣伝乙(良い意味で)

316
デフォルトの名無しさん[sage]   投稿日:2015/08/23 09:57:28  ID:LhCUqlmj.net
Haskell分かっても圏論が分かったことにはならないの?
どこで違いが出てくるの?
コメント1件

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

318
デフォルトの名無しさん[sage]   投稿日:2015/08/24 02:49:24  ID:UcMD+ccy.net
まぁhaskellの学習に圏論必要ないってのはほんま
コメント1件

319
デフォルトの名無しさん[sage]   投稿日:2015/08/24 08:58:11  ID:kCQmOeKa.net(2)
圏論ワードに外来語的なニーズがあるというコンセンサス

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

321
デフォルトの名無しさん[sage]   投稿日:2015/08/24 11:43:02  ID:OjRQ25eS.net(2)
知識がどうとかは、個人ベースの話なので、まったくどうでもいいし、着眼点がずれている
個人の人生のテーマなんぞは、本人にしか関係ないし、他人からしたらどうでもいいこと
お前が知識が要らないと考えるなら、そうすればいいし、俺らには関係ない、お好きにどうぞ

機能性を追及することが、人類の永遠のテーマなのです
分かりやすく言えば、100人の人間が集まって、その100人で、どういう機能を果たすか、ということ
昨今コミュニケーション能力が高らかに叫ばれるのは、そういうこと
ここで、知識は手段に過ぎず、目的になりえない

322
デフォルトの名無しさん[sage]   投稿日:2015/08/24 12:00:06  ID:kCQmOeKa.net(2)
100人がコミュニケーションすると80人が嘘をつき合計マイナス60人になる場合もある
マイナス60人は1人よりも小さい

323
デフォルトの名無しさん[sage]   投稿日:2015/08/24 12:08:55  ID:OjRQ25eS.net(2)
そうならないようにするのが、人類のテーマなんです

324
デフォルトの名無しさん[]   投稿日:2015/08/24 13:50:02  ID:1q9FvsVI.net

325
デフォルトの名無しさん[sage]   投稿日:2015/08/24 13:50:44  ID:twgtagYC.net(2)
mac 用IDE がもうすぐリリース

326
デフォルトの名無しさん[sage]   投稿日:2015/08/24 13:51:24  ID:twgtagYC.net(2)
すまん、かぶった

327
デフォルトの名無しさん[sage]   投稿日:2015/08/24 19:00:25  ID:pjiRa/zc.net
>320 建設会社でも行ってこい、
コメント1件

328
デフォルトの名無しさん[sage]   投稿日:2015/08/24 19:03:26  ID:/WF09MBN.net(2)
>327
圏論厨を滅ぼすまではダメです
コメント1件

329
デフォルトの名無しさん[sage]   投稿日:2015/08/25 02:06:08  ID:YISO+qUP.net(3)
>328 ワロタ、あれは生き残るパターンや。プログラミングの機械化がすすむ以上、おまいらが将来つかうことになるからな

330
デフォルトの名無しさん[sage]   投稿日:2015/08/25 02:10:41  ID:YISO+qUP.net(3)
そもそも真の圏論厨はlispで独自実装しそうなもんだが

331
デフォルトの名無しさん[sage]   投稿日:2015/08/25 07:15:28  ID:oMRqhMXw.net(3)
Lispと圏論は全然関係ないからやめろよ
C++使えよ
マクロじゃなくてテンプレートを使うんだぞ

332
デフォルトの名無しさん[sage]   投稿日:2015/08/25 10:27:27  ID:Vmm9Vscj.net(2)
>317
それはむしろHaskellをやればCCCがすぐ分かるということだ
Haskellをやっても圏論は分からないという例はないの?

>318
いやその逆で、圏論の学習の替わりにhaskellが使えるか?ということなんだが

333
デフォルトの名無しさん[sage]   投稿日:2015/08/25 11:52:16  ID:oMRqhMXw.net(3)
例というか、PerlのOOPが異端視されるのと同じ
Perlをいくら完璧に学習しても「OOPを正しく理解していない」と見做される

334
デフォルトの名無しさん[sage]   投稿日:2015/08/25 12:14:07  ID:Vmm9Vscj.net(2)
OOPと圏論を同列に並べるのはいかがなものか
OOPは茫漠とした思想みたいなもんだが圏論は違うだろ?

335
デフォルトの名無しさん[sage]   投稿日:2015/08/25 13:33:39  ID:oMRqhMXw.net(3)
違うだろ?ってみんなで答え合わせしないと確信を持てない時点でかなり怪しい
みんなで共有する知識はそういう怪しいものばかり
なので個人で頑張る
コメント1件

336
デフォルトの名無しさん[sage]   投稿日:2015/08/25 14:11:55  ID:nys8WXaq.net(2)
>335
Haskellの話に圏論絡めてくる奴は皆殺しにしろとか言い出す
僕みたいな反知性主義者が「答え合わせ」に参加すると結論が歪む。
コメント1件

337
デフォルトの名無しさん[sage]   投稿日:2015/08/25 15:35:47  ID:YISO+qUP.net(3)
>336 とりあえず通報しときました。
コメント1件

338
デフォルトの名無しさん[sage]   投稿日:2015/08/25 21:13:15  ID:nys8WXaq.net(2)
>337
つうほうせんといてや〜

339
デフォルトの名無しさん[sage]   投稿日:2015/08/26 01:43:51  ID:fE8RXalP.net
圏論やるより型クラス勉強してモナド使うほうがhaskellの勉強になるから
コメント2件

340
デフォルトの名無しさん[sage]   投稿日:2015/08/26 08:31:04  ID:NnDRip21.net(2)
>339
そうやな!圏論いらんわ。
だいたいあいつらちょっと数学が得意だからって調子こいてるよな。
コメント1件

341
デフォルトの名無しさん[sage]   投稿日:2015/08/26 12:27:26  ID:W/3BVY4r.net(4)
いらんってことはないけどな。
圏論だと思って使わなくても圏論の概念は使うことになるし。
逆に言えばわざわざ圏論を学ばんでもどうせ触れるっつー話でもある。

俺ら日本語の文法をわざわざ学んでから喋っとるわけちゃうみたいに、
実用から入っていけばなんとなく自然な使い方もわかるようになるで。
まあ、どっちから入門してもかまへん。
ただ、圏論から入っていくやつをあえてディスるんはやめよで。
コメント1件

342
デフォルトの名無しさん[sage]   投稿日:2015/08/26 13:44:56  ID:31UMARGP.net
私は関西人ではないのですが、『やめよで』は『やめような』という意味の関西弁として正統なのでしょうか?

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

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

345
デフォルトの名無しさん[sage]   投稿日:2015/08/26 15:30:11  ID:W/3BVY4r.net(4)
>344
「最初からハードル上げるな」という話。
Haskell でプログラミングするだけなら圏論を意識することはない。

圏論で言ってることというのは意識せずとも使える程度のものでしかないんだよ。
ただ、そこに明確な定義を与えて名前を付けたのが圏論という学問領域になってるだけ。
言うなれば数学界のデザインパターンが圏論。

先に Haskell を実用している人が圏論みても、
あ〜このパターンってこういう名前がついてんのね〜、ってくらいの感想だろうよ。

346
デフォルトの名無しさん[sage]   投稿日:2015/08/26 15:57:11  ID:W/3BVY4r.net(4)
デザインパターンの中には知らなかった (しかし知っていると有用な) パターンだってあるだろうし、
それを学ぶことを無意味と切り捨てることはできない。
圏論として学ばなくても誰かのコードを読んでいるときに知るということもあるだろうから、
圏論という形で学ぶ必要は必ずしも無いけど、
まあほどほどに Haskell を使えるようになった頃に一度くらい斜め読みしてもいいんじゃないのかねとも思う。

上手く使えるようになったつもりでもさー、全然知らなかった概念が頭の中に湧いて出てくるってことはないんだよ。
たとえ話で言えば、字を早く書きたくてペンの性能を目いっぱい追求して満足な結果が出るとするじゃん?
そしたら世の中には実はタイプライターがありました、ワードプロセッサがありました、っていう感じ。

347
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:14:34  ID:9WcNfeqJ.net
目的や目標とするレベルが各人バラバラだから話が噛み合わない

348
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:39:39  ID:U9Ynnj38.net
参考文献を書く義務とそれを読む自由と読まない自由があるけど
342のように自由というニュアンスを理解できない人が多い
で、自由ってよくわからんから全部義務にしようということで圏論まで強制されてしまう
コメント1件

349
デフォルトの名無しさん[sage]   投稿日:2015/08/26 16:50:54  ID:W/3BVY4r.net(4)
高度なことをしようと思えば高度な知識が必要だし、
ほどほどでいいならほどほどの知識でいいっていう当たり前の話だよな。

文章にきちんとまとめて発表しようとすると使う言葉が圏論の世界のものに
なってしまうからどうしてもそういう言葉を目にしてしまうだけで。
コメント1件

350
デフォルトの名無しさん[sage]   投稿日:2015/08/26 21:07:20  ID:2om2SE56.net
数学界のデザパタの前にHaskellのデザパタを知りたい

351
デフォルトの名無しさん[sage]   投稿日:2015/08/26 21:21:20  ID:6+xCvXdx.net
モナドだろ

352
デフォルトの名無しさん[sage]   投稿日:2015/08/26 22:58:54  ID:H1SEqDeZ.net(3)
>348
自由とか義務とかの問題じゃないだろw
能力の問題
>349
やっぱりHaskellより圏論の方が高度wってことね

353
デフォルトの名無しさん[sage]   投稿日:2015/08/26 23:36:27  ID:NnDRip21.net(2)
反知性主義者を代表して言わせてもらうが

「俺は圏論をまったく知らないが、モナドを自由に使えてる。だから圏論は必要ない」

以上です。
コメント2件

354
デフォルトの名無しさん[sage]   投稿日:2015/08/26 23:47:35  ID:H1SEqDeZ.net(3)
>353
反知性主義者か。ええなあ。がんばってや

355
デフォルトの名無しさん[sage]   投稿日:2015/08/27 05:45:42  ID:hpMNnVK0.net
>353
その圏論を知らずにモナドを自由に使えているあなたが仮に圏論を学べば、
モナドを人に上手く教えたりもっと
自在にモナドを操れるようになるのかも知れないね。
コメント1件

356
デフォルトの名無しさん[sage]   投稿日:2015/08/27 05:55:16  ID:V7YRDu0j.net(4)
必要に足りてるならそれはそれでいいよ。

357
デフォルトの名無しさん[sage]   投稿日:2015/08/27 07:04:42  ID:gHMFOOrZ.net(3)
>355
その例を一つ二つ挙げてみてよ

358
デフォルトの名無しさん[sage]   投稿日:2015/08/27 07:15:24  ID:MMHzsuN9.net(3)
べつにチューリング完全な言語を超えるような未知の能力を研究してるわけじゃないから
ただ型推論を使って動的型付け言語のレベルに追いつけるかどうかの問題

359
デフォルトの名無しさん[sage]   投稿日:2015/08/27 07:48:02  ID:2fn5iyFt.net(3)
何言ってんだこいつ?

360
デフォルトの名無しさん[sage]   投稿日:2015/08/27 07:58:41  ID:MMHzsuN9.net(3)
難聴乙

361
デフォルトの名無しさん[sage]   投稿日:2015/08/27 08:41:46  ID:TbOH8VLZ.net
静的型付け言語がまるで動的型付け言語に劣っているかのような誤解を招く書き方ですね

362
デフォルトの名無しさん[sage]   投稿日:2015/08/27 08:53:04  ID:2fn5iyFt.net(3)
チューリング完全の枠を出ないと、超一般的な前提を言いながら、
ffiで各々が呼びだせば解決する程度の話をする頭の悪さ

363
デフォルトの名無しさん[sage]   投稿日:2015/08/27 09:24:03  ID:MMHzsuN9.net(3)
頭の良さってほんのわずかの差で一喜一憂するところが放射能に似ているよね
コメント2件

364
デフォルトの名無しさん[sage]   投稿日:2015/08/27 09:57:44  ID:8/UVeoJ+.net
動的型つき言語は、再帰型のある静的型付き言語のサブセットだぞ

365
デフォルトの名無しさん[sage]   投稿日:2015/08/27 11:07:03  ID:2fn5iyFt.net(3)
>363
すまんが放射能語ではなくて日本語で頼む

366
デフォルトの名無しさん[sage]   投稿日:2015/08/27 12:31:59  ID:a/U6YIqa.net(2)
haskellにどんなモナドがあって、どういう使い方をすればいいのかは圏論を学んでも分からんよ。
Freeモナドが、Stateが、Parsec.ParsecTが、あるいはXMonad.Core.Xがどういうモナドなのか、圏論が教えてくれることはない。

VisitorとSingletonとIteratorと各々を学ばなきゃ使えないのに、デザインパターンという言葉の意味にだけ耽溺する奴とよく似ている。
よっぽど学術的なことをしたいか、さもなければ馬鹿だ。
俺は「純粋関数型言語で副作用はどう書けばいいのか」という初学者の質問に「IOモナドがー」と馬鹿な答を書く馬鹿がこのスレにいたのをよく覚えている。
http://blog.jle.im/entry/io-monad-considered-harmful
スノッブ共からモナドや圏論の言葉を取り戻さないといけない。
コメント3件

367
デフォルトの名無しさん[sage]   投稿日:2015/08/27 12:51:13  ID:a/bxJDEM.net(2)
Stateモナドとかスタック作るまでのチュートリアルがほとんどで
結局どう使うかはほとんど説明されてなかったり
コメント1件

368
デフォルトの名無しさん[sage]   投稿日:2015/08/27 12:59:12  ID:SD+R1pbM.net(3)
>367
実際あんまり使わないからだと思う。
それに、本当に状態操作が欲しいなら素直にSTモナド使うほうがいい。
コメント1件

369
デフォルトの名無しさん[sage]   投稿日:2015/08/27 14:07:36  ID:V7YRDu0j.net(4)
>366
どういうモナドかは当然それぞれの性質があるんだろうけど、
共通する性質があってそれをモナドというパターンに当てはめてるんだから、
モナドがどういうものかは知らんと話にならんだろう。

デザインパターンに過剰にこだわるのが害悪の場合はあるが、説明に使う言葉に何を使えばいいっていうんだ?
っていうか、基礎的な質問ならキーワードとなる言葉を与えてウェブ検索させるってのは普通のことだろう。
共通認識できる「名前」が重要で、それが圏論由来のものであろうがそうでなかろうが重要じゃない。
既についている名前があるなら新しい言葉を発明することにどれだけ意味があるっていうんだ?

370
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:20:33  ID:/PZRaFKU.net
http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf
Monads for functional programming
Philip Wadler, University of Glasgow
No knowledge of category theory is required to read these notes.
コメント1件

371
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:33:29  ID:sT+Vb4An.net(6)
>366
うんうん、それもまた反知性主義だね!

反知性主義者たちがどんどん集まってきてうれしい。
Haskell界で声がでかい人で圏論にハッキリ嫌悪感を示してる人って山本センセぐらいしか
いないんで、貴重な同士だわ〜

372
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:38:27  ID:sT+Vb4An.net(6)
>370
なんか糖衣にくるんで圏論に誘導しようとしてるような感じがして嫌だな。
参考文献に悪名高いMoggi(こいつのせいで調子こいて圏論言うやつが計算機科学に入ってきた)
が挙がってるし、ろくなもんじゃないだろ。

そもそも反知性主義者である俺は英語論文を読むなどというスノビズムに染まった行動には断固として反対なのだ。
日本男児なら日本語で語れ!

373
反知性主義者[sage]   投稿日:2015/08/27 15:40:14  ID:V7YRDu0j.net(4)
dg非jドアsポあjふぃおs打ksgふぁ: 打sjgdl:s
dscじょぎkdさkjgdskげj子rイオdsgkあd祖gsだ

j御k自ソアdgjポdsjgぴおdsあぽgだぽあ

374
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:44:45  ID:a/bxJDEM.net(2)
>368
まあStateモナドは確かにそうなんだけど
そういう意味じゃなくてSTモナドも含めてきっちり実用面まで含めて状態計算関連の説明してる所ってほとんどないよね、ってことが言いたかった
ソース読めって言われればそれまでだけど
コメント1件

375
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:48:48  ID:sT+Vb4An.net(6)
だいたいね、

``It is doubtful that the structuring methods presented here would have been
discovered without the insight afforded by category theory.''

とか言い出してるあたりで、「あーこいつ自分が圏論を知ってますアピールしとるな」
と分かるじゃん。心の底では「Moggiくらいお前ら読めよ」とか思ってるわけ。
自分では圏論信者なんだけどそれは小乗の教えだとか密教だと思ってるわけ。
それで、大乗というか大衆バージョンの教えとして「ほら経典なんか勉強しなくても
この車輪を手で回すだけで救われますよ」とか大衆をバカにした布教をしてるんだよね。

そういう態度がいちいち鼻につくからね、圏論厨はキモいんですよ。

376
デフォルトの名無しさん[sage]   投稿日:2015/08/27 15:59:38  ID:V7YRDu0j.net(4)
じゃあどうするっていうんだ?
圏論的背景があるのはどうしたって動かせないだろう。
真髄を理解したければ圏論は必要じゃないか。

真髄は必要ない、ただ使えればいいっていう人向けの情報が嫌なら
もう Haskell 使うなよとしか言いようがないよ。

377
デフォルトの名無しさん[sage]   投稿日:2015/08/27 17:02:40  ID:SD+R1pbM.net(3)
>374
STモナドはIOモナド理解してればそのまま使えるよね?
そして、IOモナド・STモナドの仕組みは原理としては別に難しくない

378
デフォルトの名無しさん[sage]   投稿日:2015/08/27 17:06:24  ID:6g/R3ZXu.net
逆にわたくし、haskellしばらく勉強してきまして
そろそろ裏でどういう理論づけがあるのかなーみたいなことを知りたくなってきたのですが、
何かしらおすすめのルートはございますか(普通に圏論に入門してみればいいの?)
コメント2件

379
デフォルトの名無しさん[sage]   投稿日:2015/08/27 17:37:41  ID:a/U6YIqa.net(2)
反知性とかそういうのじゃなくてな、haskell初学者を惑わせるだけの圏論の話なんて必要無いってだけなんだ。
初心者が聞く「モナドって何?」っていう質問に圏論的な説明はじめるのは迂遠過ぎてhaskell難しいっていう印象しか残せない。

単に「中の値を直接取り出せないようなコンテナ型であっても、その中身を(安全に)操作、合成するための技法」の1つであると言えばいいのに、
それを「何故モナドという名前なのか」という意味に曲解し、そこだけ説明したり訂正したりする奴がいるから、haskellの真髄は圏論であると勘違いする人が出てくる。

圏論じゃなくて型付けラムダ計算あるいはSystemFがhaskellの基礎でしょ。
Control.MonadやControl.Categoryはあくまでも利便性を高めるためにあるもの。無くても不便なりに使える。
>378 なので、haskellのコアな部分というなら型理論を学べば良い。ライブラリの中には圏論をベースにしたものがあるから、そっちの理論的背景を学びたいなら圏論を学べば良い。
圏論は間違ってもマクレーンの本からはじめない方がええ。最近ならもっといい(例が数学的過ぎない)文書がネット上にもある。
日本語だったら前スレにも出てた↓とか。
http://nineties.github.io/category-seminar/#/
コメント3件

380
デフォルトの名無しさん[sage]   投稿日:2015/08/27 18:03:40  ID:sT+Vb4An.net(6)
>379
自分は反知性主義を掲げて圏論厨を批判してるけど、「なぜモナドという名前なのか」とか言い出す
圏論厨は見たことない。

マクレーンが隠れ哲学厨だったんで範疇論から名を借りてcategory とつけた分野に、
ついでにライプニッツの単子論から名前を借りて(こっちはもう本当に名前を借りただけ)
monad と呼んだだけで意味とか全くないし。

それまでは triple と呼ばれてたんでまともな複合語が作れないという問題があったから
モナドと呼ぶほうがマシじゃんぐらいの意味しかない。

ほらね、圏論ってのは意味がないんです。やめましょう。

381
デフォルトの名無しさん[sage]   投稿日:2015/08/27 18:34:38  ID:75t8dyUl.net
Haskellの真髄は(->)
型クラスがなくても(->)は存在する
(->)がなければMonadもCategoryもない

382
デフォルトの名無しさん[sage]   投稿日:2015/08/27 18:35:35  ID:sT+Vb4An.net(6)
>378
圏論はやらんほうが人生を有効に使えると思いますが、人生を無駄にしたいというなら

Benjamin C. Pierce "Basic Category Theory for Computer Scientists"

あたりはお勧めできます。ただしモナドは載ってません。とはいうものの索引まで入れて100pなので
圏論がどんなものか概観するにはちょうど良いでしょう。100pもあんのかよ、というツッコミもあるでしょうが
ラムダ計算の領域理論のための議論も含まれてるので、Hask圏をゆるっと理解したい程度なら
領域理論の準備の箇所を飛ばせばいいと思います。

他に、もうすぐ共立から邦訳が出ますが

Steve Awody "Category Theory", 2nd ed.

あたりも好評のようです。非常に丁寧に書かれてる本ですが、丁寧ということは長ったらしいという
ことでもあり、いちいち説明が大仰だったりする感もないではないです。

みなさんも仰ってるとおり圏論なんてのは言葉づかいにすぎないわけで、日常会話程度なら
大げさな本で勉強せずともよろしいという人は、圏論の教科書ではありませんが

J. L. Bell "Toposes and Local Set Theories" ←Doverなのでそこそこ安い

の最初(一章)の20pぐらいまでを眺めるとよいでしょう。モナドは載ってませんが米田ぐらいまで一気に話が進みます。

Pierce とかBellをざっと眺めるぐらいの理解をしておけば

https://ja.wikibooks.org/wiki/Haskell/圏論

の議論は簡単に理解できるでしょう。理解したからといってHakellのコーディング能力は一ミリも伸びないと思うけど、
とりあえず「return,join でモナド実装するのがスッキリしてわかりやすいと思うな」とか言い出した奴に
ドヤ顔で「うんうん、圏論で言う eta, mu だね」と返せるようになります。
コメント2件

383
デフォルトの名無しさん[sage]   投稿日:2015/08/27 20:00:44  ID:kht9K5Vg.net(3)
>363 その前に頭の良さの定義を頼むw

384
デフォルトの名無しさん[sage]   投稿日:2015/08/27 20:03:43  ID:gHMFOOrZ.net(3)
>382
反知性主義者というので期待してたが
結構知ってるよ的なので、ガッカリしたw

385
デフォルトの名無しさん[sage]   投稿日:2015/08/27 20:18:05  ID:kht9K5Vg.net(3)
お前ら人間なめんなよ、子供の算数を集合論ではじめときゃいいんだよ。

386
デフォルトの名無しさん[sage]   投稿日:2015/08/27 21:38:54  ID:gHMFOOrZ.net(3)
>366
> VisitorとSingletonとIterator
これらデザパタはクソなのだが、モナドも同類なのか?
>「純粋関数型言語で副作用はどう書けばいいのか」という初学者の質問に「IOモナドがー」
Moggiはじめ皆そう言ってきてるんだが違うの?
> http://blog.jle.im/entry/io-monad-considered-harmful
これモナドを全否定してるかと思ったらそうでもないので期待外れ

>379
> 圏論じゃなくて型付けラムダ計算あるいはSystemFがhaskellの基礎でしょ。
圏論は後者とどう違うという認識?
コメント1件

387
デフォルトの名無しさん[sage]   投稿日:2015/08/27 21:59:24  ID:b8i3sMHc.net
>379 >382
ありがとうございます。
なんかある程度勉強してからだと「あ、そういうことね」っていうふうになれそう
というのに最近出会ってちょっと悔しかったので、やってみます

388
デフォルトの名無しさん[sage]   投稿日:2015/08/27 22:16:22  ID:kht9K5Vg.net(3)

389
デフォルトの名無しさん[sage]   投稿日:2015/08/27 22:41:39  ID:sT+Vb4An.net(6)
>388
Benjamin C. Pierce "Types and Programming Languages"  ですね。 "Basic Category Theory for Computer Scientists"
のようなコンサイスな本を書いた人がなぜこんな風に長ったらしく書いたのか不思議ですが丁寧な本ですね。
もう少し読者の数学的マチュリティを信頼して書いてくれたら簡潔になっただろうにと思うとそこんとこ残念ですが。

>386
圏論と型付ラムダ計算との関係については、J. Lambek and P. J. Scott "Introduction to Higher Order Categorical Logic"
なんかを見ると良いと思います。

390
デフォルトの名無しさん[sage]   投稿日:2015/08/27 23:45:18  ID:SD+R1pbM.net(3)
圏論ねえ。数学的興味からHaskelltoha関係なく勉強したのだが、
Haskellに関する限り、Ekmettが何してるのか理解したい時に
少し役に立つ程度だと思う。

391
デフォルトの名無しさん[sage]   投稿日:2015/08/27 23:58:49  ID:Rek5NYGp.net
Haskellと圏論の関わりなんて、IOを無矛盾に扱うために言語に追加導入できる最良の道具だったってだけのことで、
ラムダ計算とLisp・一階述語論理とPrologのような、その生い立ちに根源的に関っているもんじゃないからね
オナニーの道具としては最高なんだろう

392
デフォルトの名無しさん[sage]   投稿日:2015/08/28 04:26:11  ID:SsK9tv39.net(2)
普通andとorとnotしか使わないから述語論理も要らないな
コメント1件

393
デフォルトの名無しさん[sage]   投稿日:2015/08/28 10:12:07  ID:ngZ5utA1.net
鹿児島県の伊藤祐一郎知事に言わせれば
「高校教育で女の子にサイン、コサイン、タンジェントを教えて何になるのか」
「社会の事象とか、植物の花とか草の名前を教えた方がいい」
ということになる。
コメント1件

394
デフォルトの名無しさん[sage]   投稿日:2015/08/28 14:21:25  ID:UpW/wiba.net(3)
>392
普通∀や∃も使うだろう

395
デフォルトの名無しさん[sage]   投稿日:2015/08/28 14:56:36  ID:SsK9tv39.net(2)
>393
関数の名前は知ってるけど内容は知らないんだろ
植物の名前でも同じことだ
名前ばっかり宣伝するのは本当に無意味だからやめればいい

396
デフォルトの名無しさん[sage]   投稿日:2015/08/28 16:13:34  ID:hUebxbgg.net
ひゃっほーう stack 環境下でエディタの補完が効くようになったぜ!

397
デフォルトの名無しさん[sage]   投稿日:2015/08/28 20:02:41  ID:UpW/wiba.net(3)
圏論とHaskellとモナド。。。。。
ちょっと話が面白くなってる気がするな
反知性主義者や山本さんやらが出てきて。
勿論知性主義者が出てきてもいいよ
あれを読めとか何かを教えてやったとかつまらんこと言わずに
自分の見解を言ってくれ
コメント1件

398
デフォルトの名無しさん[sage]   投稿日:2015/08/28 21:14:35  ID:YaVx9p2L.net
圏論なんてそんなに構えて勉強する、なんてスゴイものじゃないよ
おれはバカンス先のホテルで2冊も読んだらだいたい分かったよ
コメント1件

399
デフォルトの名無しさん[sage]   投稿日:2015/08/28 22:12:50  ID:UpW/wiba.net(3)
>398
「スゴイ」とか「分かった」という語句を使う点がなんだかなと思うが。。。
すぐに分かったと言うあなたとなかなか分からん奴とは何が違うと思うか語ってみてくれないか

400
デフォルトの名無しさん[sage]   投稿日:2015/08/29 14:46:46  ID:bSBiDVBZ.net
「C++完全に理解した」

401
デフォルトの名無しさん[sage]   投稿日:2015/08/29 23:11:48  ID:VDxSZNt2.net(2)
cabal について質問です。

.cabal/config ファイルの documentation の項を True に設定すれば
cabal でインストールしたパッケージのドキュメントが追加され、
ドキュメントルート内にある index.html ファイルが更新されますが、
その際に index.html ファイルの更新のされ方を指定する方法はあるでしょうか。

具体的には、index.html に張ってあるリンクの URL をデフォルトから変えたいです。
たとえば、ただいま index.html 内の Data.List へのリンクの URL は、
最後 Data-List.html で終わっています。
これを base-4.8.0.0/Data-List.html のように文字列を加えたいのです。

.cabal/config ファイルにはパッケージのインストール先を指定する項目はありますが、
このようにドキュメントのリンクの URL を指定する項目は見あたらないようです。

不可能なのでしょうか。

402
デフォルトの名無しさん[sage]   投稿日:2015/08/29 23:27:12  ID:UzL1ueYp.net
>> 399
たぶん、haddockセクションの html-location の項がそれ。
コメント1件

403
デフォルトの名無しさん[sage]   投稿日:2015/08/29 23:38:33  ID:VDxSZNt2.net(2)
>402
そこに文字列を入れ、いろいろなパッケージをインストールしてみましたが、
何も変わりませんでした。

404
デフォルトの名無しさん[sage]   投稿日:2015/08/30 00:01:23  ID:U2/m8tQL.net(4)
ひょっとして、コメントアウトを外してない、なんてことはないかい?

-- html-location:

html-location: hoge
にしないといけないよ。
コメント1件

405
デフォルトの名無しさん[sage]   投稿日:2015/08/30 00:21:30  ID:XpmQg4Hy.net(5)
>404
もちろん、コメントは外しています。
コメント1件

406
デフォルトの名無しさん[sage]   投稿日:2015/08/30 00:38:28  ID:XpmQg4Hy.net(5)
>405
ちなみに、cabal install --haddock-html-location='・・・' で直接指定しても何も変わりませんでした。
コメント1件

407
デフォルトの名無しさん[sage]   投稿日:2015/08/30 02:57:07  ID:U2/m8tQL.net(4)
>406
以前似たような質問をしてた方と同じ人ですか? 
前回ともども、ろくすっぽ調べもせずテキトウに答えちゃってごめん。

いろいろ試してみたんだけど、どうやら無理っぽい。
html-locationはその時にインストールしたパッケージの内部のドキュメントのリンク先を変えるものらしい。
haddockにある別のオプションを変えることで、ドキュメント右上のContentsや、Indexの参照先を変えることはできた。
でも、ご所望の、パッケージが依存している別のパッケージのドキュメントへのリンクは、書き換えられないみたいだ。

すべてのパッケージのドキュメント位置の情報は、ghc-pkg が握ってる。

$ ghc-pkg field '*' haddock-html
...
haddock-html: /usr/local/Cellar/ghc/7.10.2/share/doc/ghc/html/libraries/array-0.5.1.0
haddock-html: /usr/local/Cellar/ghc/7.10.2/share/doc/ghc/html/libraries/base-4.8.1.0
haddock-html: /usr/local/Cellar/ghc/7.10.2/share/doc/ghc/html/libraries/bin-package-db-0.0.0.0
haddock-html: /usr/local/Cellar/ghc/7.10.2/share/doc/ghc/html/libraries/binary-0.7.5.0
...

これらの情報を参照して、haddockはパッケージのリンク先を書くんだと思う。
だから、やりたいことを実現するには、そもそもの依存パッケージの位置を変えるしかない。
(cabalを通して呼ばれるhaddockにだけその情報を渡す方法があるのかもしれないが、俺の調査ではわからなかった。
cabal installへのフラグ--haddock-option=--optghc=-package-db=hoge/.../package.conf.dなどを試したけど何も変わらず)
コメント1件


408
デフォルトの名無しさん[sage]   投稿日:2015/08/30 10:45:14  ID:XpmQg4Hy.net(5)
>407
こちらでは ghc-pkg field '*' haddock-html 出力と、
ドキュメントの index.html 内の各リンクの URL とが異なっています。

たとえば、ghc-pkg field '*' haddock-html の出力では
   /usr/share/doc/ghc/html/libraries/array-0.5.1.0
   /home/.../.cabal/share/doc/x86_64-linux-ghc-7.10.1/random-1.1/html
となっています。
前者は ghc インストール時にデフォルトで入っているパッケージ、
後者は cabal でインストールしたパッケージです。

ところが、/home/.../.cabal/share/doc/x86_64-linux-ghc-7.10.1/index.html では、
Data.Array へのリンクは /home/.../.cabal/share/doc/x86_64-linux-ghc-7.10.1/Data-Array.html
System.Random へのリンクは /home/.../.cabal/share/doc/x86_64-linux-ghc-7.10.1/System-Random.html
になっています。

.cabal/config がデフォルトの状態でこのようになります。


ちなみに、frames.html や doc-index-A.html などの中にあるリンクは正しいです。
また、各モジュール個別のページ内にある他モジュールへのリンクも正しいです。
トップの index.html 内のリンクだけがおかしいのです。


もう少しアプローチを変えて調べてみます。
ありがとうございました。

409
405[sage]   投稿日:2015/08/30 11:56:14  ID:U2/m8tQL.net(4)
ああ、もし、sandbox使ってるんだったら、

$ ghc-pkg field '*' haddock-html
ではなく、
$ cabal sandbox hc-pkg field '*' haddock-html
を呼んでください。

あと、405の時点では「haddockがghc-pkgを内部で呼ぶ」と思ってたんだけど、実は「cabal が haddock に依存先パッケージのドキュメントの位置を渡す」ということがわかった。
cabal install に --verbose=3 を渡して、haddockに渡っているオプションを見て気づいた。
cabal の --package-db オプションの値が、haddockへ --read-interface オプションとして渡されるらしい(ただし、sandboxにいるときは cabal install に直接package-dbを指示しても無視されるみたい)。
コメント1件

410
デフォルトの名無しさん[sage]   投稿日:2015/08/30 12:43:47  ID:XpmQg4Hy.net(5)
>409
問題が解決しました。

結論から言うと、最新版の GHC をインストールしたら治りました(7.10.1 --> 7.10.2)。

ここに私と似たような質問がありました。

http://comments.gmane.org/gmane.comp.lang.haskell.arch-linux/2119

要約すると、これはインストール時の設定などではなくもっと上流で起きている問題であり、
以前はオンラインドキュメントでも同じ問題が起きていて、GHC 10.7.2 で治ったそうです。

つまり、私は問題の根本が分からず、とりあえず config ファイルの設定によって URL を変えて一時しのぎをしようと思い、
その方法をここで質問しましたが、最新版で問題が解決され、質問の意味がなくなったということです。

私は ArchLinux を使用しており、GHC も cabal-install も ArchLinux のパッケージシステムを使用してインストールしていましたが、
ArchLinux のパッケージでは GHC の最新版はまだ 7.10.1 のままでした(ArchLinuxは最新版の提供が比較的早いはずなのですが・・・)。
そこで GHC の公式サイトから 7.10.2 をDLしインストールしたところ、デフォルトのライブラリドキュメントも、
その後で cabal でインストールしたライブラリドキュメントも、index.html が正しいリンクを張ってくれるようになりました。

実際のところは、ArchLinux のパッケージだったからまずかったのか、7.10.1 だったからまずかったのか分かりませんが。


cabal の挙動について詳しく解析していただいたのに活用できなくて申し訳ありません。
ただ、その解析方法や情報についてはとても勉強になりました。

ありがとうございました。

411
デフォルトの名無しさん[sage]   投稿日:2015/08/30 13:07:09  ID:U2/m8tQL.net(4)
おめでとう。
haddockのバグだったのか(cabalではなく)。
haskellのツール周りは色々混み合っててよくわかんないなあ。

412
デフォルトの名無しさん[sage]   投稿日:2015/08/30 16:07:36  ID:XpmQg4Hy.net(5)
型クラスのメソッドにデフォルトの定義を与えることができますが、
そのデフォルトの定義をインスタンス定義の側から呼ぶことはできるでしょうか。

例えば下記のようなことがしたいです。

class Umai a where
 level :: a -> Int
 level _ = 3

data Nasu = Nasu

instance Umai Nasu where
 level x = Umai.level x * 100

これは最後の Umai.level でコンパイルエラーが出ますが、ニュアンスは伝わると思います。

他にも、デフォルトと同じ挙動をさせたいが、Debug.Trace.trace 関数を仕込んで調査したい時とか。

413
デフォルトの名無しさん[sage]   投稿日:2015/08/30 21:36:21  ID:/UH+7Zkm.net
instance Umai () where {}
newtype X10 a = X10 a
nasu = X10 (X10 ())

class Oldtype a where { oldtype :: a b -> b }
instance Oldtype X10 where { oldtype (X10 o) = o }
instance Umai a => Umai (X10 a) where { level x = level (oldtype x) * 10 }
コメント1件

414
デフォルトの名無しさん[sage]   投稿日:2015/08/31 00:21:09  ID:VGvD8wHt.net(2)
()もいいけど、型をラベルみたいにして情報載せるのは、ファントムタイプの出番ですよ。
data Umai a = Umai { defaultLevel :: Int,
season :: Season}
data Season = Spring | Summer | Autumn | Winter deriving Eq

data Nasu
data Tomato

class Level a where level :: a -> Int

instance Level (Umai Nasu) where level = defaultLevel * 100
instance Level (Umai Tomato) where level = defaultLevel * (liftA (== Summer) season ?) 200 100
{--
> level (Umai 1 Summer :: Umai Nasu)
100
> level (Umai 1 Summer :: Umai Tomato)
200
> level (Umai 2 Summer :: Umai Tomato)
400
--}
コメント1件

415
412[sage]   投稿日:2015/08/31 00:22:07  ID:VGvD8wHt.net(2)
ちな
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances,TypeFamilies #-}

module Main where
import Control.Applicative

(412の中身)
instance Num n => Num (a -> n) where
(+)= liftA2 (+)
(-) = liftA2 (-)
(*) = liftA2 (*)
abs = liftA abs
signum = liftA signum
fromInteger = const . fromInteger

class Conditional q a where
type ConditionalExec q a
(?) :: q -> ConditionalExec q a -> ConditionalExec q a -> ConditionalExec q a
infixr 1 ?

instance Conditional Bool a where
type ConditionalExec Bool a = a
(?) b x y = if b then x else y

instance Conditional (a -> Bool) b where
type ConditionalExec (a -> Bool) b = a -> b
(?) = liftA3 (?)

main :: IO ()
main = print $ level (Umai 1 Spring :: Umai Tomato)

416
デフォルトの名無しさん[sage]   投稿日:2015/08/31 20:29:14  ID:YNC36to9.net(2)
>413 >414
ありがとうございます。
そのままでは使えないのですが、考え方を参考にさせていただき、応用してみます。


ちなみに、さすがに Umai 型クラスにも、Nasu データ型にも手を加えずに実現する方法はないですよね。

417
デフォルトの名無しさん[sage]   投稿日:2015/08/31 21:06:33  ID:BIyPIWGf.net
それならデフォルトの実装は別の場所に書いた方がよさそう
手を加えてはならない場所に書くのはリスクが大きすぎる
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2015/08/31 21:21:39  ID:YNC36to9.net(2)
>417
すいません、そういう意味ではなくて、
Umai 型クラスに相当するものがライブラリで提供されていて、
こちらでは手が加えられないのです。

もし方法がないなら、ライブラリのソースはあるので、
アドバイスを参考に改変しようかと思います。

419
デフォルトの名無しさん[sage]   投稿日:2015/09/02 01:39:18  ID:MPctfeu0.net
質問。infix pattern synonym の結合性って弄れないの?

420
デフォルトの名無しさん[sage]   投稿日:2015/09/02 23:39:30  ID:VgKb5GV5.net
>397
なんで君はいつも上目線なんだ

421
デフォルトの名無しさん[sage]   投稿日:2015/09/03 05:35:30  ID:OYAV2gHU.net
謙虚月間です。皆さん九月は、他人の落ち度より自分の異常を優先して疑い、相手を尊重しましょう
コメント1件

422
デフォルトの名無しさん[sage]   投稿日:2015/09/04 12:32:49  ID:5HbwgMaM.net
GHC が出力する実行バイナリがえらいデカいんやけど、これどうにかならんの?
コメント1件

423
デフォルトの名無しさん[sage]   投稿日:2015/09/04 17:36:40  ID:KCyhzv12.net
atomの端末から起動しないとghc-mod使えない不具合辛い

424
デフォルトの名無しさん[sage]   投稿日:2015/09/04 21:44:05  ID:Ziq//RxQ.net
>422


対策

1.諦める

2.共有ライブラリを使う

from : http://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/using-share...

>4.13.1. Building programs that use shared libraries

>To build a simple program and have it use shared libraries for the runtime system and the base libraries use the -dynamic flag:

>ghc --make -dynamic Main.hs

425
デフォルトの名無しさん[]   投稿日:2015/09/05 17:50:27  ID:zbNENDxs.net(2)
中置関数の部分適用について理解できないところがあるので、質問です。

まず下記の関数を定義しました。
siplus :: String ->Int -> Int
siplus str num = read(str) + num

普通に使うと次のように動作します。
> siplus "1" 2
> 3

最初のStringを部分適用したものの型を調べると、こうなります。
> :t siplus "1"
> siplus "1" :: Int -> Int

ここで最初のStringではなく、2つ目のIntを部分適用したいと思った時、
例えばこんな書き方はできません。
> :t siplus _ 2
> エラー

しかしこれを中置関数として扱った場合、2つ目のIntのみを部分適用した
関数を作ることができてしまいます。
> :t (`siplus` 2)
> (`siplus` 2) :: String -> Int

これは一体どういうことなのでしょうか?
String -> Int -> Intの関数への部分適用でString -> Intの関数を作り出せてしまうのは、
カリー化の考え方から見て矛盾があると思います。
どういう理屈でこれは成り立っているのでしょうか?

426
デフォルトの名無しさん[sage]   投稿日:2015/09/05 18:08:50  ID:NPRaO0u1.net(2)
中置演算子の部分適用は、適用する引数をどちらからも選べる特殊な機能で、
普通の部分適用と区別して「セクション」と呼ばれている。
いずれにせよ、実体は (¥str -> siplus str 2) のようなラムダ式作るのと変わらん。
コメント1件

427
デフォルトの名無しさん[sage]   投稿日:2015/09/05 18:33:26  ID:zbNENDxs.net(2)
>426
なるほど、つまり中置記法の右側に値を置いたものは、
カリー化とは無関係で単にラムダの糖衣構文ってことなんですね。

428
デフォルトの名無しさん[sage]   投稿日:2015/09/05 18:40:53  ID:NPRaO0u1.net(2)
まあ、(flip siplus) 2 の糖衣だと思うんでもいいと思うけどな。

429
デフォルトの名無しさん[sage]   投稿日:2015/09/06 00:53:10  ID:wfrbDpC5.net(5)
二項演算子は後置演算子とみつけたり
コメント1件

430
デフォルトの名無しさん[sage]   投稿日:2015/09/06 08:00:48  ID:SMmxtXxm.net(2)
Haskellは二項演算子を愛し過ぎてる
1+が綺麗に書けるけど、そんなにこだわる機能じゃないと思う
むしろ二項演算子無くして前置に統一したほうがよく無いかな?
コメント1件

431
デフォルトの名無しさん[sage]   投稿日:2015/09/06 08:29:11  ID:wfrbDpC5.net(5)
>430

a * x + b

なんてのをまともに書けない言語はアカンでしょ
コメント1件

432
デフォルトの名無しさん[sage]   投稿日:2015/09/06 08:41:14  ID:SMmxtXxm.net(2)
>431
>a * x + b
つ (+ (* a x) b)
コメント1件

433
デフォルトの名無しさん[sage]   投稿日:2015/09/06 09:30:37  ID:wfrbDpC5.net(5)
>432
そういうのが好きならLisp使えばいいじゃん。。。

434
デフォルトの名無しさん[sage]   投稿日:2015/09/06 09:44:06  ID:Vj9nK5xC.net(3)
>429
それは嘘です
後置演算子の直後の二項演算子はセーフ x! * y
二項演算子の直後の二項演算子はアウト x + * y

>421
「本当か嘘か」を優先して考え「謙虚か傲慢か」などという雑念は捨てました
コメント1件

435
デフォルトの名無しさん[sage]   投稿日:2015/09/06 09:45:15  ID:OmMBsRo+.net
煽ってるのをオマエラじゃんw

436
デフォルトの名無しさん[sage]   投稿日:2015/09/06 10:14:27  ID:wfrbDpC5.net(5)
>434
うーん、その例と「二項演算子は結合強度最弱の単項後置演算子とみなせる」
がどう矛盾するのかよくわからないです。
コメント1件

437
デフォルトの名無しさん[sage]   投稿日:2015/09/06 10:31:40  ID:Vj9nK5xC.net(3)
>436
結合強度を変えてもsyntax errorを覆すことはできません
コメント1件

438
デフォルトの名無しさん[sage]   投稿日:2015/09/06 10:59:37  ID:wfrbDpC5.net(5)
>437

x + * y 

によってあなたが何を例示したのか正直まったく理解できないのです。


元ネタは外国のブログ記事だった気がするけど見つからないので自己流解説すると、
なんか二項演算子(算術に限らない。ここでは (#) とする。)があって、そのシグネチャは

(#) :: X -> Y -> Z

だとしますね。そうすると x : X に対して作られるセクション x # は Y -> Z という型を持つわけですね。
そうすると、結局「あたかも」

postfix #
(#) :: X -> (Y->Z)

と定義されていた「かのごとく」見れますねという話をしてるつもりです。
(Haskellでは自前の後置演算子は作れないので上のは嘘コードですが)。
コメント1件

439
デフォルトの名無しさん[sage]   投稿日:2015/09/06 17:00:24  ID:Vj9nK5xC.net(3)
カリー化ですべての関数が単項演算になるはずだったのですね
ところが構文解析を見ると二項演算が存在する証拠が出てきたので理解できないと

440
デフォルトの名無しさん[sage]   投稿日:2015/09/06 20:34:02  ID:2q2onHzV.net
概念の話をしてるのに実装の話をされても困りますね
ちょっと上のレスに出てるように二項演算子だと
# x
っていうように後ろの引数だけ適用もできることになってるからこれは後置単項演算子とは別物だよね

441
デフォルトの名無しさん[sage]   投稿日:2015/09/07 06:23:10  ID:+vVUVgP4.net
素直に実装の話をされて困ることなんてないよ
実装の話じゃないから困らないよな?と言われて困ることはある
{-# LANGUAGE #-} とか

442
デフォルトの名無しさん[sage]   投稿日:2015/09/07 21:31:00  ID:mXAJW74L.net
二項演算子は単項後置演算子みなせるよね
に対して
構文解析では二項演算子が分けてあるんだよ
と言われても はあそうですか としかならないがな
なぜ構文解析上分けてあるかの理由まで示されると納得しそうだが
コメント2件

443
デフォルトの名無しさん[sage]   投稿日:2015/09/07 23:06:47  ID:+gBmAsnf.net
>438
Applicativeスタイルを使うときに出てくる「途中の式」はそうやって考えるとわかりやすいね。

444
デフォルトの名無しさん[sage]   投稿日:2015/09/07 23:35:52  ID:saV1gx5W.net
>単項後置演算子
今日はじめて知ったんだが、実は出来るぜ。
{-# LANGUAGE PostfixOperators #-}

data Currency = Yen Int deriving Show

(¥) :: Int -> Currency
(¥) = Yen

main = print (105 ¥)
{--
> :main
Yen 105
--}

445
デフォルトの名無しさん[sage]   投稿日:2015/09/08 00:02:16  ID:FdaSRh76.net(5)
>442
それが後置演算子だとすると
(2 +)と(+ 2) で(+)が別の演算子だということになってしまう。
数式の構文解析で(-)が単項演算子と二項演算子の両方に使われるせいで
BNFが無駄に複雑化するの知ってるでしょ?
同じことが(-)だけでなく二項演算子一般について大規模に生じてイヤなわけ。

446
デフォルトの名無しさん[sage]   投稿日:2015/09/08 04:52:37  ID:5w88oMs5.net
>442
構文は理由より人気を優先した方がいい
どんな理由を示してもおそらくライバルの1.05倍くらいのメリットしか出てこない
一方、理屈抜きで人気投票すれば1000倍とか差がつく可能性がある

447
デフォルトの名無しさん[]   投稿日:2015/09/08 21:51:21  ID:1BhJxNoG.net(3)
「モナドは値を箱の中に入れるので外からは見えない、だから安全だ」
っていう話をよく聞くけど、納得いかない。

例えばMaybeモナドの中に値を入れても、fromJustで簡単に取り出せるし、
入れる時もJustで簡単に入るじゃん。

こんなユルユルの箱に入れたところで何が安全なの?
コメント3件

448
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:00:09  ID:KAkZMLHa.net
入れたままで扱えるから便利なんだよ。
(IO は別)

449
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:03:02  ID:gWCBxnxw.net
>447
箱の喩えでいうなら、その箱から中身を取り出したままでいられる仕組みは
モナドの範疇ではないよ。

Monad 型クラスのインスタンスであるその型に付随された
モナドとは何の関係もない機能だ。
コメント1件

450
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:04:03  ID:FdaSRh76.net(5)
>447
>「モナドは値を箱の中に入れるので外からは見えない、だから安全だ」
>っていう話をよく聞くけど、

そんな話を聞いた覚えがないのだが……
コメント1件

451
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:11:56  ID:CPV+4Ywq.net(3)
自分も聞いたことないな
安全だって言ってる文献を教えて欲しい

452
デフォルトの名無しさん[]   投稿日:2015/09/08 22:15:43  ID:1BhJxNoG.net(3)
>449
でも取り出す機能を簡単に付けられるのであれば、箱としての堅牢性は無いに等しいじゃん。
一回入れたらもう出せない!ってのならわかるけど。

>450-451
IOモナドなんかそんな風に言われるじゃん。
でもIOモナドに入れた値だってfromJustで取り出せる。
コメント1件

453
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:17:47  ID:FdaSRh76.net(5)
>452
>IOモナドなんかそんな風に言われるじゃん。
>でもIOモナドに入れた値だってfromJustで取り出せる。

???
まず前半、聞いたことがない。そういうこと言ってる実例挙げられる?
後半、意味がわからない。

454
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:18:26  ID:CPV+4Ywq.net(3)
もしかしてMaybeなどのモナドを使うことで付く分岐による安全性を
「モナドは外からは見えないから安全」という話に思い込んだんじゃ?

455
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:20:00  ID:1BhJxNoG.net(3)
出直してきます

456
デフォルトの名無しさん[sage]   投稿日:2015/09/08 22:20:30  ID:CPV+4Ywq.net(3)
どうやら根本から勘違いしてただけだったか・・・

457
デフォルトの名無しさん[sage]   投稿日:2015/09/08 23:38:38  ID:vkbbpybQ.net
まあ気持ちはわかるわ。俺もはじめの頃は、Maybeモナドは腑に落ちんかった。
パターンマッチでいつでも値取り出せるじゃん。って。

モナドはデストラクタを隠蔽するのが肝なんだよな。
だからparsecとかIOとかをみて、初めてありがたみがわかった。
コメント1件

458
デフォルトの名無しさん[sage]   投稿日:2015/09/08 23:44:27  ID:FdaSRh76.net(5)
>457
>モナドはデストラクタを隠蔽するのが肝なんだよな。

データ構築子のこと?
runXX の形でモナドの実体を取り出せるモナドは珍しくないし、
IOモナドもそこは変わらないよ?
IO aの実体をWorld -> (a, World)として取り出してもありがたくないだけで

>だからparsecとかIOとかをみて、初めてありがたみがわかった。

うーん、その感覚はさっぱり
隠蔽云々とは関係なくリストモナドだろうがIOモナドだろうがありがたいけどなあ

459
デフォルトの名無しさん[sage]   投稿日:2015/09/08 23:52:35  ID:FdaSRh76.net(5)
Maybeモナドの場合なら、return (つまりJust)に突っ込んで得られない
Maybe a の値、つまりNothingによって集合aを拡大していることになるわけで、
この拡大された集合a+上の計算を、元々のaの計算から自然に与えることが
できるようなそういう拡大の仕方とその構造のことをモナドというわけ。
Maybeほどストレートではないけど、他のモナドも基本は一緒。

これはデータ構築子が公開されててパターンマッチできるかどうか、とか
或いはそれと等価な関数が公開されてるかどうか、とかとは関係のない話。

460
デフォルトの名無しさん[]   投稿日:2015/09/09 00:06:36  ID:EJNsNdDh.net
関数型言語ってのは
要するに
OOPでクラス関数で主に記述するってことと同じでしょ?
メンバ関数・変数をなるべく使わずに

何がすごいのかさっぱりわからない
コメント1件

461
デフォルトの名無しさん[sage]   投稿日:2015/09/09 00:14:15  ID:15Wbqaqp.net(9)
あなたがそう思うならそれでいいんじゃないの
誰が関数型言語使えと頼むじゃなし使わないと死ぬわけでもなし

462
デフォルトの名無しさん[sage]   投稿日:2015/09/09 00:50:04  ID:+WsBDtot.net
荒くれ者のC++erがHaskellやると
バグめっちゃ減るんすよwwww
その代わりコンパイル通りににくくなるんで慣れるまでめっちゃ苛々するんすけど
実行時にヘマするくらいならコンパイル失敗した方がマシだってことを学ぶんすよwww

もうC++は体力続かない
三ヶ月前のコードとか読みたくないでしょ
歳取ったらHaskellが良いって解りますよ
Haskellなら三ヶ月前のコード、また読んでみてもいいかなって、それはとっても嬉しいなって

463
デフォルトの名無しさん[sage]   投稿日:2015/09/09 01:57:38  ID:rpodVdIT.net(4)
>> 457
なんていうか上手く言えないんだけど、例えば、
データ構築子がreturnとbindしか無くて、一方分解子、runの類いがたくさん提供されてるデータを考えてくれ。
どうだいそれって滅茶苦茶役に立たないだろ?
コメント1件

464
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:07:49  ID:15Wbqaqp.net(9)
>463
>データ構築子がreturnとbindしか無くて、一方分解子、runの類いがたくさん提供されてるデータを考えてくれ。

なにが言いたいのか理解できないが、いずれにせよreturn とbind があれば
他のはそれから定義できるんだからなにも問題ない
runXXの類がたくさん提供されてる、というのもよくわからんが、
それで有用性が損なわれるとはちっとも思えない

465
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:09:55  ID:15Wbqaqp.net(9)
あと、データ構築子とreturn/bindは違うものなんでそこのところ宜しく
もし、returnでしか当該データ型の値が作れないならrunXX云々以前にそりゃ役には立たない
m a 型の計算が実質的に a 型の計算そのものに崩壊するからな

466
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:28:58  ID:rpodVdIT.net(4)
そうそう。そんな感じ。
だからモナドにするならreturn以外にカスタムコンストラクタをたくさん提供するべき。
逆にコモナドなら、コンストラクタは少なくていい。けど、デストラクタはextractだけじゃだめ。

(俺は_ -> Hoge のヤツをHogeのコンストラクタ、Hoge -> _ をデストラクタって呼んでる。異端かもしれんが)
コメント1件

467
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:39:48  ID:15Wbqaqp.net(9)
>466
>だからモナドにするならreturn以外にカスタムコンストラクタをたくさん提供するべき。

いやまったくもって意味不明なんだけど
普通に型定義のデータ構築子がある以上、それを使えばいいんだし、
それらのデータ構築子から構成できないようなものもあり得ない

しかもなんで「べき」なわけ?
Maybe型が役に立たなかったことなんかないだろう
あと、勝手な自分用語振り回されても理解できない(するきになれない)

468
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:57:08  ID:rpodVdIT.net(4)
オレオレ用語で分かりにくくて、すまんかった。共通の言葉遣いは大事だよね。データ構築子はdata Hoge a = Hoge ... の奴でいいよね?

ところでさ、ライブラリを作っていて、データの内部表現を公開したくない時があるじゃない?
あとでチューニングしたいときとか。そういう時にデータがモナドなら主に ... -> Hoge a を、コモナドなら Hoge a -> ... を提供する。
return / extract に加えて。

理由は、えー… 逆だと使いづらいから。
(たとえばMaybeなら、fromJustってあんまり使わないでしょ?)
コメント1件

469
デフォルトの名無しさん[sage]   投稿日:2015/09/09 02:58:54  ID:FLIFW6sl.net(4)
なんか変な主張と独自用語のレスが続くね…
荒らしかな
コメント1件

470
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:07:23  ID:rpodVdIT.net(4)
あ゛ーそのつもりはないんだけど… スレ汚してスマンね。

理由が弱いので、もう少し考えると、
例えば、doの途中でrunして値を取り出して、その値で分岐して別のモナディックアクションにつなぐのは、計算量が無駄。
それを避けるためにモナド(手続きの抽象)がある、と俺は理解している。
コメント3件

471
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:13:59  ID:15Wbqaqp.net(9)
データ構築子を公開したくない、というのはわかる
パターンマッチで実体取り出されたくないとき
(実体に依存した利用をされたくないとき)、というのはあるからな

だが、「return に加えて」は意味不明だ

作ろうとするモナドが恒等モナド以上の何かであろうとする限り、
returnでは作れないようなモナド値を構成する方法を提供しなければならない
これは内部表現の隠蔽云々とは何の関係もない
そうしないと使いづらいからではなく、そうしないと恒等モナド以上の
機能を有し得ないから、だ

fromJustを使わない(データ構築子 Just のパターンマッチも使わない)、
というなら、コード全体がモナディックになってしまう
(もちろんnon-monadicなコードは恒等モナドによってまったく等価な
 monadicなコードとして書けるが、普通はそんなことはしない)

はっきりいって、何が言いたいのか本当にわからない……

472
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:14:53  ID:FLIFW6sl.net(4)
>470
こっちもすまん、>468見る前に書き込んだから

473
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:20:21  ID:15Wbqaqp.net(9)
>470
>例えば、doの途中でrunして値を取り出して、その値で分岐して別のモナディックアクションにつなぐのは、計算量が無駄。
>それを避けるためにモナド(手続きの抽象)がある、と俺は理解している。

計算量(?)はほぼ変わらず、コードが見やすくなるだけだ
むしろ、コードの煩雑さを苦にしないならば
最初からモナドの実体を直接操作する方が余計な関数呼び出しと
そこでいう意味の「計算量」は減る

-- オーダー以外の意味で「計算量」を使われるのも違和感があるが
コメント1件

474
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:21:55  ID:FLIFW6sl.net(4)
>470
>例えば、doの途中でrunして値を取り出して、その値で分岐して
>別のモナディックアクションにつなぐのは、計算量が無駄。
>それを避けるためにモナド(手続きの抽象)がある、と俺は理解している。
別のモナディックアクションにつなぐのが計算量の無駄というのが、
わからんのだけど
よく言われるように、用途の文脈を明確にしたい場合に使ってる事が多いし
コメント1件

475
デフォルトの名無しさん[sage]   投稿日:2015/09/09 03:27:24  ID:15Wbqaqp.net(9)
>474
Reader モナドで、逐一runReaderを使い r->a 型関数に戻すのが手間だ、
くらいの意味だろう。そりゃモナドの中で計算を合成できる方がいいしが、
指摘の通り、手間や関数適用コストの僅かな定数的増大よりは、文脈を切らずに
連続させることの利益が目的でdo 記法を使うはずだ、と私も思う。
コメント1件

476
デフォルトの名無しさん[sage]   投稿日:2015/09/09 04:04:10  ID:FLIFW6sl.net(4)
読み直したけど主張が纏まってないのと、レスが補強になってない
少し落ち着いて

>475
それで意味がわかりましたが、自分も正に>473と同じ事を思いました
モナド無くていいじゃん、と

477
デフォルトの名無しさん[sage]   投稿日:2015/09/09 05:16:14  ID:k6Vctrbh.net
>469
「計算は論理の物質化である」

478
デフォルトの名無しさん[sage]   投稿日:2015/09/09 06:53:19  ID:5v/OlT8A.net
>460
OOPがわかってもC++がさっぱりわからないのと同じ

C++がわかればstaticメンバが何の役に立つのかわかる

479
デフォルトの名無しさん[sage]   投稿日:2015/09/09 07:44:14  ID:yxoakRA/.net(2)
なんでMonadはApplicativeのインスタンスじゃないの?

480
デフォルトの名無しさん[sage]   投稿日:2015/09/09 11:27:05  ID:Gx2jhnq1.net
いまはApplicativeだよ

481
デフォルトの名無しさん[sage]   投稿日:2015/09/09 11:44:28  ID:15Wbqaqp.net(9)
Monadにはできない(或いは非効率)だけど、Functorよりは強い構造を
持ってる有用なデータ型が多いことがHaskellでのプログラミングの進展に
よって後になってから判明したから

後付で用意されたんで、元からあるMonadの定義には手を付けなかった

482
デフォルトの名無しさん[sage]   投稿日:2015/09/09 15:58:18  ID:Q+d8J0F/.net
>447
藁人形を殴るのやめろ

483
デフォルトの名無しさん[sage]   投稿日:2015/09/09 18:35:43  ID:wpO/WxMy.net
RTS上のデータ域に直接的にアクセスできるらしいな
unboxedが最速かと思ったがもう一つ隠し玉があるのか

484
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:47:23  ID:yxoakRA/.net(2)
<*> <*>

485
デフォルトの名無しさん[sage]   投稿日:2015/09/09 20:48:31  ID:15Wbqaqp.net(9)
FFIのためにCに揃えてメモリ剥き出しでデータ配置してる場合のことでしょ

486
デフォルトの名無しさん[sage]   投稿日:2015/09/11 17:09:38  ID:yMgx5TOb.net
StateはStateT Identityとして定義されてるのに、なぜMaybeはMaybeTを使って定義されていないのでしょう?
コメント1件

487
デフォルトの名無しさん[sage]   投稿日:2015/09/11 18:51:03  ID:KUqdYwfe.net
>486
Stateは、状態をあとづけでつける場合に使われるからモナド変換子なのかなぁ。。。?

488
デフォルトの名無しさん[sage]   投稿日:2015/09/11 19:36:27  ID:v/2h2RVh.net(2)
MaybeはEitherを使って定義されなかったという前例がある

489
デフォルトの名無しさん[sage]   投稿日:2015/09/11 20:01:00  ID:2FuYRHxl.net
そらそうだろ、という気もするのだが、

Maybe a = Either () a
Just x = Right x
Nothing = Left ()

みたいな話?

490
デフォルトの名無しさん[sage]   投稿日:2015/09/11 20:39:04  ID:v/2h2RVh.net(2)
unitはidentityに似てるからいいんじゃね

491
デフォルトの名無しさん[sage]   投稿日:2015/09/12 09:02:59  ID:8GXyupq5.net(2)
よく頭のおかしいバカが「スケーラビリティ」とほざくが
大抵それは「前例のない規模で前例を踏襲する」ことだ
コメント1件

492
デフォルトの名無しさん[sage]   投稿日:2015/09/12 09:43:20  ID:UPPQquvW.net
>491
「前例のある規模で前例を踏襲することができない」よりはいいんじゃね

493
デフォルトの名無しさん[sage]   投稿日:2015/09/12 20:12:10  ID:XAqQ9sMD.net
そんなになんでも簡単にスケールしてもらってはエンジニアがご飯が食べれなくなるので困る
軽トラをCADで拡大して4tトラックになるんだったら仕事なくなる
実際には現実世界の各種係数があって、そっちはスケールしないので無理なわけだが
CAD内でデータを拡大しても、重力やら鉄の剛性やら法律やらetcの
現実世界まで一緒に拡大されるわけではないからな、不整合が起こる

494
デフォルトの名無しさん[sage]   投稿日:2015/09/12 22:59:42  ID:8GXyupq5.net(2)
不整合そのものを認識できないバカは少ない
拡大できない現実が悪いか、拡大できると言う虚言癖が悪いかを判断できないバカが多い

495
デフォルトの名無しさん[sage]   投稿日:2015/09/13 13:03:42  ID:kiB/x+KN.net
えー

496
デフォルトの名無しさん[sage]   投稿日:2015/09/13 14:50:26  ID:mhOIQ8p/.net(2)
○○されると仕事がなくなるというのは現実的にあるとしても、
だから○○は止めろとグチを言って前へ進まないのはただの甘えです。


ところで、GCがゴミを回収するタイミングを制御する方法はあるでしょうか。
たとえば、ある関数を評価しようとしないとGCが動かないようにできる、みたいな。

ステージクリア型のゲームを作っていると、ステージプレイ中はGCを止めて、
クリアしたりミスしたタイミングで一気にゴミ回収したいことってありませんか?
他にも、3DCGツールを作っていて、レンダリング中ではなく完了後にゴミを回収したい、とか。
コメント2件

497
デフォルトの名無しさん[sage]   投稿日:2015/09/13 15:44:15  ID:x1dh+v5m.net
>496
GC止めるのはできないはず
System.Mem以下の関数で明示的に起動することはできる

RTSオプションの -I フラグ辺りを見るといいのかもしれない
コメント1件

498
デフォルトの名無しさん[sage]   投稿日:2015/09/13 17:52:56  ID:m/zohjMN.net
>496
あるある
入力待ちに入る瞬間に軽くGCしといて欲しいとか考える

499
デフォルトの名無しさん[sage]   投稿日:2015/09/13 22:09:38  ID:mhOIQ8p/.net(2)
>497
ユーザーガイドを見てみました。

なるほど、そのオプションでアイドルになってから
GCが自動起動するまでの時間を指定できるのですね。
この値を非現実的な大きな値にすれば、結果的にperformGC関数で
意図したタイミングでGCを起動できることにならないか、と。

試してみます。
ありがとうございました。

500
デフォルトの名無しさん[sage]   投稿日:2015/09/17 15:51:54  ID:B1grEVzP.net
近頃ホットなライブラリは?

501
デフォルトの名無しさん[sage]   投稿日:2015/09/18 01:29:26  ID:wjuvkHJc.net
tanakahってネトウヨなのか

502
デフォルトの名無しさん[sage]   投稿日:2015/09/18 13:33:55  ID:YvxDAq3A.net(2)
そんなことはない。彼は六年前に衆議院総選挙で民主党に投票した過去がある。よほど懲りたとみえる

503
デフォルトの名無しさん[sage]   投稿日:2015/09/18 15:57:30  ID:hYbUwCNL.net(2)
民主に騙されてアホウヨになってしまったんだね

504
デフォルトの名無しさん[sage]   投稿日:2015/09/18 17:03:07  ID:4VBZsKU6.net
どんな嘘に騙されたのか知らんが
騙されたというならもっとこう、嘘を絶対に許さない的な理念があるべきじゃないのか
人を分類して煽り合うだけでは嘘は無くならないだろう

505
デフォルトの名無しさん[sage]   投稿日:2015/09/18 19:10:38  ID:YvxDAq3A.net(2)
Haskellでこの世から嘘をなくせるのか?
プログラミングの話をしてくれ

506
デフォルトの名無しさん[sage]   投稿日:2015/09/18 22:09:52  ID:dOXUeH6Y.net
嘘を見抜くソフトを開発すればいい

うまい嘘をつくためにも使えちゃうか

507
デフォルトの名無しさん[sage]   投稿日:2015/09/18 23:39:24  ID:hYbUwCNL.net(2)
tanakahがおかしいのは昔からだ

508
デフォルトの名無しさん[sage]   投稿日:2015/09/18 23:58:08  ID:bAzDgVJC.net
任意の要素数の集合(順序など特別な構造はない)に対する置換が与えられた時、
その置換と同等な巡回置換のリストを得る関数 cperms :: ([a], [a]) -> [[a]] を作りたいのですが、泥臭くなってしまいます。

例えば、集合 {x, y, z, w} に対して置換 {x, y, z, w}-->{x, w, y, z} があるとします。
(本来ならば置換は上下に並べて表記したいところですが、これで勘弁してください)。
この置換は2つの巡回置換に分けられ、ひとつは x を x に置換するの巡回置換 [x]、
もうひとつは y を w に、 w を z に、z を y に置換する巡回置換 [y, w, z] です。
なので、cperms ([x, y, z, w], [x, w, y, z]) = [[x], [y, w, z]] となります。

私の考え方は下記のような単純なものです。

引数のタプルの第1要素を置換前リスト、第2要素を置換後リストとします。
置換前リストの先頭要素から次のように順にスキャンします。

0. 置換前リストの先頭要素を a1 とする。
1. 置換前リストの a1 と同じ位置にある置換後リストの要素を a2 とする。
2. 置換前リストの a2 と同じ位置にある置換後リストの要素を a3 とする。
・・・
n. 置換前リストの an と同じ位置にある置換後リストの要素を a[n+1] とする。

a1 == a[n+1] ならば [a1, a2, ..., an] を巡回置換のリストとする。
置換前・置換後の各リストから辿った要素を取り除いた新たな2つのリストを作りタプルにする。
そのタプルに対して再び cperms 関数を適用し、結果を先ほど作った巡回置換のリストと concat する。

泥臭く感じるのは2点。
ひとつは、a1 を覚えておいたり、構築中の巡回置換リストを保存するなどのために
いくつものアキュムレータを付けた再帰関数を作っている事。
もうひとつは、置換前リストや置換後リストから要素を探すときにいちいち先頭から順に探している事。

宣言的とはとても言えないコードになってしまうなですが、良い方法はないでしょうか。
コメント3件

509
デフォルトの名無しさん[sage]   投稿日:2015/09/19 03:37:04  ID:ygsDvVju.net
Hideyuki Tanaka ‏@tanakh
憲法守れ!検閲反対!憲法守れ!検閲反対!

検閲する側の人間を支持していてこれか
脳みそ入ってないでしょ

510
デフォルトの名無しさん[sage]   投稿日:2015/09/19 08:31:20  ID:oTM0A26u.net
ここはHaskellのプログラミングについて語るスレです。プログラマ個人について語るスレではありません

511
デフォルトの名無しさん[sage]   投稿日:2015/09/19 09:58:08  ID:UoEBemSS.net(2)
とりあえず連想リストの検索と削除を同時にするけどアキュムレータを使わない方法

f :: Eq a => a -> [(a,b)] -> Maybe (b, [(a,b)])
f _ [] = Nothing
f x (y:ys) = if x == fst y then Just (snd y, ys) else fmap(id***(y:))(f x ys)
-- (***) a b (c, d) = (a c, b d)
コメント3件

512
デフォルトの名無しさん[sage]   投稿日:2015/09/19 11:38:35  ID:9U4PsEMd.net
めっちゃ素朴で雑談的な疑問: 長い函数合成書く時に、ついAしてBして…っていうふうに考えてしまって
右から順に書いてしまう (極端には filter even 書いてからその左に length . って書き加える)
んですが、これは慣れてもそういうもの?
それともそのうち「最終的に欲しいのはこれだから」みたいに左から書くようになる?
コメント2件

513
デフォルトの名無しさん[sage]   投稿日:2015/09/19 11:55:02  ID:uMEyIMVB.net
自分も同じ疑問感じるわ
今はタイプするのが楽だから左から書いてるけど
一度右からの流れを思い浮かべてから逆順をたどるように書くみたいにしかできてない
左から考えられるようになるものなのか?そもそもなるべきなのか?どうなんだろう

514
デフォルトの名無しさん[sage]   投稿日:2015/09/19 12:03:35  ID:dgpmJE92.net
>512
右から左に思考の順番通り書くので何の問題もない。
カーソルの戻りがイヤで左から右にしたいなら

(>>>) :関数合成演算子( . )の引数が逆になった演算子(Control.Category)

とか

(&) :関数適用演算子($)の引数が逆になった演算子(Data.Function)

とかを使えばいいよ。

簡単な短いものはボトムアップで考えて関数合成の連鎖で直接書いてしまうし、
複雑な関数は「欲しいのはこれだから」みたいにトップダウンで定義を考えて
(where節がどんどん入れ子になる感じで)書いていく。

515
デフォルトの名無しさん[sage]   投稿日:2015/09/19 12:36:41  ID:UoEBemSS.net(2)
左に書き加えるとかはHaskellではなくVimの話題のような気がする

516
デフォルトの名無しさん[sage]   投稿日:2015/09/20 00:25:40  ID:6c+MIwD/.net
田中さん完全にネトウヨなんだな
コメント1件

517
デフォルトの名無しさん[sage]   投稿日:2015/09/20 09:21:19  ID:ZXXgaQ/P.net(4)
>511
レスが遅くなってすいません。

その関数 f の意図が今一分からないのですが、
例えば f 2 [(2, 4), (3, 2), (1, 1), (4, 3)] とやってみると結果は
Just (4, [(3, 2), (1, 1), (4, 4)]) となるのですが、
これは意図通りの結果でしょうか?
コメント1件

518
デフォルトの名無しさん[sage]   投稿日:2015/09/20 09:23:48  ID:ZXXgaQ/P.net(4)
>517

>511
間違えました。

> 例えば f 2 [(2, 4), (3, 2), (1, 1), (4, 3)] とやってみると結果は
> Just (4, [(3, 2), (1, 1), (4, 4)]) となるのですが、

結果は Just (4, [(3, 2), (1, 1), (4, 3)]) になります。
コメント1件

519
デフォルトの名無しさん[sage]   投稿日:2015/09/20 10:33:01  ID:nVyOckkY.net
>518
[(2, 4), (3, 2), (1, 1), (4, 3)]の先頭の(2, 4)はfを使わなくても処理できるので
そこでfを使う意図はありません
次の段階でf 4 [(3, 2), (1, 1), (4, 3)]のような使い方を意図しています
コメント1件

520
デフォルトの名無しさん[sage]   投稿日:2015/09/20 11:37:14  ID:629ydc81.net(2)
脳みそ入ってるか入ってないか判らないときはMaybeモナドに包んで処理って習った

521
デフォルトの名無しさん[sage]   投稿日:2015/09/20 12:05:14  ID:OSUmrGRk.net
>508でやりたいのっていわゆる強連結成分分解じゃないの
ググればしっくりくる解き方があるんじゃないかな
コメント1件

522
デフォルトの名無しさん[sage]   投稿日:2015/09/20 12:24:31  ID:oJTeEA6y.net
宣言的なコードをあきらめればいい

523
デフォルトの名無しさん[sage]   投稿日:2015/09/20 12:40:33  ID:629ydc81.net(2)
シンプルに総当りしてマッチしたものを返せばいい
コメント1件

524
デフォルトの名無しさん[sage]   投稿日:2015/09/20 13:13:36  ID:ZXXgaQ/P.net(4)
>519
すいません、やはり意味がよく分かりません。

関数 f の各引数と戻り値の意味を教えていただけないでしょうか。

525
デフォルトの名無しさん[sage]   投稿日:2015/09/20 13:40:26  ID:ZXXgaQ/P.net(4)
>521
恥ずかしながら初めて聞いた名称だったので調べてみました。
確かに、置換を有向グラフとみなせば、強連結成分分解で解けますね。
今、そのアルゴリズムの詳細を調べているところです。

ただ、私の問題の方が制限がきついので、実際はもう少し特化した方法がとれると思います。
グラフと見なしたとき、全てのノードについて出る辺と入る辺はちょうど1つずつです。
なので極大もなにも一通りにしか分解できませんし、探索中に戻る必要もありません。


>523
総当たりというのが具体的にどのような処理を指しているのか分かりませんが、
それは結局 >508 になるのではありませんか?

526
デフォルトの名無しさん[sage]   投稿日:2015/09/20 16:52:06  ID:KBlLbBcH.net
>508
多少は手続き的っぽくない感じで定義してみた
計算量のことなんも考えてないので泥臭さでは全く負けてないけどw
置換は[0..(n-1)]に対する任意の置換を[Int]で与えるものとする

import Data.List (nub, nubBy, sort, transpose)
cperms :: [Int] -> [[Int]]
cperms ns = nubBy unique . (map nub) . transpose . (take n)
  $ iterate (map (ns!!)) [0..(n-1)]
  where n = length ns
   unique xs ys = (sort xs) == (sort ys)

-- cperms [0,3,1,2] => [[0], [1,3,2]]

長さnの一般の置換に対して、[0..(n-1)]の各要素をn回、順に置換していって、
軌道に分けて(transpose)、無駄な重複を削除して結果を得る
unique関数では「2つの巡回置換が本質的に等しい」を判定したいんだけど
毎回ソート2回やるより速い方法が絶対あると思う(メモ化するとか)
コメント3件

527
デフォルトの名無しさん[sage]   投稿日:2015/09/20 17:24:46  ID:9hEz0Smr.net
みんなもう買ったか?

文芸誌「新潮」4千部増刷 筒井康隆さんの長編小説掲載
http://www.asahi.com/articles/ASH9K61F1H9KUCVL01X.html

新潮社は17日、文芸誌「新潮」10月号(初版8900部)の4千部の増刷を決めた。
同号には筒井康隆さんの長編小説「モナドの領域」が掲載され、本人がツイッターで「わが最高傑作にして、おそらくは最後の長篇(ちょうへん)」とつぶやくなど話題となっていた。

528
デフォルトの名無しさん[sage]   投稿日:2015/09/21 00:14:56  ID:bf3bKAE/.net
import Data.Graph (buildG,scc)
import Data.Tree (flatten)
cperms (a,b) = map flatten $ scc $ buildG (minimum a,maximum a) $ zip a b

cperms ([1,2,3,4],[1,4,2,3]) -> [[2,4,3],[1]]
コメント2件

529
デフォルトの名無しさん[sage]   投稿日:2015/09/21 00:49:50  ID:jrn4ktsf.net
>511のつづき

g (x, ys) = maybe ([], ys) (((x:) *** id) . g) (f x ys)
h [] = []
h ((x,x'):ys) = uncurry (:) . ((x:) *** h) . g $ (x', ys)
cperms (xs, xs') = h (zip xs xs')
コメント1件

530
デフォルトの名無しさん[sage]   投稿日:2015/09/21 12:16:42  ID:/2p4upNw.net(4)
>526
グラフで言えば、n個の各ノードから1歩ずつ辿ってスタート地点に戻りn個の輪っかを作る。
最後に本質的に同じ輪っかを1つとみなして輪っかを集める感じですか。
分かりやすいですし、発想が面白いですね。

2つの巡回置換が本質的に等しいことを判定する部分(unique)は、
ys ++ ys の中に xs にマッチする部分があるかどうかを、
xs を先頭から1要素ずつずらしながら調べれば O(n) の計算量でいけますね。

しかしそれ以前に、O(n^2) の nub を n+1 回行っているので、
要素数が増えてくると焼け石に水かもしれませんが・・・


>528
調べてみたのですが、強連結成分分解の計算量は O(|V| + |E|) なんですね。
(実際にこのライブラリの実装がそうなっているかは未調査のため分かりませんが)

巡回置換への分解が強連結成分分解の特殊バージョンだと分かっていれば、
このコードはとてもシンプルで、何をやっているかも一目で分かるので良いと思います。


ただ、>526>528 も、集合が整数の連続した列と一対一に対応できること前提なのですね。
まぁ、集合をリストで表現できる時点で要素に番号付けは可能なので、
テーブルか何かでも作っておけば、理論上は整数の巡回置換のリストから元の要素へ戻せますが、
手間と処理時間は少しだけ増えそうです。
コメント1件

531
デフォルトの名無しさん[sage]   投稿日:2015/09/21 12:18:24  ID:/2p4upNw.net(4)
>529
h (zip xs xs') の簡約をノートに書いていって、処理がやっと理解できました。

結果的に、ひとつの巡回置換の先頭 2 要素のうちの最初のひとつを h で、
次の要素を g で取り出しているのがやや気になります。

あと、1 要素から成る巡回置換を作ることになる場合、
(x, x) :: [...] というパターンから処理を始めますが、
最初の x を h で取り出して、次の x を g で取り出してから、
残りのリスト [...] から g で取り出した x があるかを調べますよね。
そこも少し気になるところです(そこには無いと分かっているから)。

以上の部分をもう少しシンプルにできそうな気がするので考えてみます。


みなさん、いろいろな方法でアドバイスくださり、ありがとうございました。
参考にします。

532
デフォルトの名無しさん[sage]   投稿日:2015/09/21 13:35:14  ID:/2p4upNw.net(4)
>526
冷静に考えてみれば、いろいろ最適化できそうですね。

たとえば、unique は >530 よりもっとシンプルになります。
巡回置換リストは、元の集合(を表したリスト)を類別します。
つまり、巡回置換リストのある要素リスト内の任意の要素は、
巡回置換リストの他の要素リスト内には存在しません。
よって、unique xs ys は elem (head xs) ys と同値です。

map nub では、nub は要らないです。
この部分の nub で要素が消えるのは、要素が繰り返し循環している部分です。
たとえば、nub [2, 3, 2, 3] = [2, 3] という感じに。
これ以外にここの nub で要素が消えるパターンはありません。
なので nub xs は、ここに限れば takeWhile (/= head xs) xs と同値です。

これで、O(n^3) から O(n^2) になりました。
せっかくなので、ひとつ残った nub をどうにかしたいところですね・・・
コメント1件

533
デフォルトの名無しさん[sage]   投稿日:2015/09/21 13:40:59  ID:/2p4upNw.net(4)
>532
と思ったのですが、iterate (map (ns !!)) [0 .. n-1] の部分で O(n^3) でしたね。

連投失礼しました。

534
デフォルトの名無しさん[sage]   投稿日:2015/09/21 18:54:41  ID:gEmyCLgu.net
>516
(´・_・`)自分が思ったことを素直に表明してるだけで、特段ネトウヨに加担してるつもりはないと思うよ

535
デフォルトの名無しさん[sage]   投稿日:2015/09/22 01:49:24  ID:xlNSF2Nb.net
デマによる誹謗中傷
レッテル張り
相手を馬鹿にした言動
完全に田中はネトウヨでしょ

536
デフォルトの名無しさん[sage]   投稿日:2015/09/22 06:06:26  ID:3/1FxAoT.net
レッテル貼りは一回だけならほとんど問題ない
同じことを何回も言うのはそれがレッテルであろうがなかろうが問題がある
レッテルを貼ることが問題だというのは多分嘘だろう
本当の問題は連呼すること

537
デフォルトの名無しさん[sage]   投稿日:2015/09/22 07:17:58  ID:rRTVDkU9.net
田中はもう何年もずっとだろ

538
デフォルトの名無しさん[sage]   投稿日:2015/09/22 15:24:02  ID:cGE1lXHQ.net
(´・_・`)他人の意見を鵜呑みにするより自分で考えてるだけでネトウヨというレッテルを貼られるなんて辛すぎでしょ。
コメント1件

539
デフォルトの名無しさん[sage]   投稿日:2015/09/22 18:49:33  ID:cCHjzu4f.net(2)
>538
>他人の意見を鵜呑みにするより自分で考えてるだけでネトウヨ

いや、まさに他人の意見を鵜呑みにしてるだろw

540
デフォルトの名無しさん[sage]   投稿日:2015/09/22 20:56:50  ID:ADm2wL+1.net(2)
関プロ実入の194Pの図4.1の一番右側にあるtarai、間違ってませんかね?

541
デフォルトの名無しさん[sage]   投稿日:2015/09/22 20:59:08  ID:ADm2wL+1.net(2)
毛の壁に触ったがために田中さんも災難だなぁ

542
デフォルトの名無しさん[sage]   投稿日:2015/09/22 21:29:48  ID:cCHjzu4f.net(2)
taraiは2ヴァージョンある

543
デフォルトの名無しさん[sage]   投稿日:2015/09/23 13:39:43  ID:18dgrDRG.net
>512
fmapとかnewtypeコンストラクタとかは最終的に欲しいものというよりむしろ
欲しくないものを検出するために書いてるだけだから
慣れないと感じるのは順序とは別の問題かもしれない
欲しいものの記述のみに集中できる言語があればいいんじゃないか

544
デフォルトの名無しさん[sage]   投稿日:2015/09/23 13:44:57  ID:OAr0MdsU.net
>fmapとかnewtypeコンストラクタとかは最終的に欲しいものというよりむしろ
>欲しくないものを検出するために書いてるだけだから

545
デフォルトの名無しさん[sage]   投稿日:2015/09/23 23:08:22  ID:mLvEhcU8.net
(´・_・`)民主党政権時代より今の自民の政治がマシだと思っただけでネトウヨ扱いなんですかねえ

546
デフォルトの名無しさん[]   投稿日:2015/09/24 00:22:27  ID:NkCijieZ.net(2)
すみません。
反復関数系でフラクタル図形等に応用される
サンプルがあったので研究してみたのですが

値構築子の関数に固有の法則を持たせて
値構築子のタプルの値を使って演算する様ですが
構築子の値に関数をCONSで繋げるという手法が理解できず
何か参考になる文献を知っていましたら教えて下さい。

data Decision = (Int, Double) :-> DecFun
type DecFun = Int -> [Int]

d1 :: Decision
d1 = (1, 0.25) :-> \f -> []
dList = [d1,d2.....](このリストを処理する関数内でDecFunを匿名関数にして処理)
コメント1件

547
デフォルトの名無しさん[sage]   投稿日:2015/09/24 04:46:59  ID:ZG5YRh3S.net
田中さん実質実効為替レートとか知らなさそう

548
デフォルトの名無しさん[sage]   投稿日:2015/09/24 05:50:31  ID:eomUiX/2.net
毛の壁本当うぜーな
関係ない話は自分のブログでやってろボケ


549
デフォルトの名無しさん[sage]   投稿日:2015/09/24 08:34:06  ID:Z+e1DhYA.net
実名と自然言語がうぜーから無名関数プログラミング

550
デフォルトの名無しさん[sage]   投稿日:2015/09/24 08:52:18  ID:Uo3c7c9s.net
>546
元のサンプルplz
コメント1件

551
デフォルトの名無しさん[sage]   投稿日:2015/09/24 17:39:46  ID:wr9fetd/.net
思っているだけじゃなくてレッテル貼り、中傷、デマ
色々やってんじゃん

552
デフォルトの名無しさん[sage]   投稿日:2015/09/24 18:00:44  ID:t2o+8nOY.net
Haskellの話して。それがHaskellとどう関係あるの?

553
デフォルトの名無しさん[sage]   投稿日:2015/09/24 19:16:38  ID:9+DIf2hV.net
マ板でtanakhスレでも立ててそっちでやれ

554
デフォルトの名無しさん[sage]   投稿日:2015/09/24 20:30:38  ID:NkCijieZ.net(2)
>550
すみません。反復関数系のソースは以下です。
import System.Random
type Length = Rational
data ABCTerm = A | B | C
data DP = DP {len :: Length, state :: State, key :: Int}
data State = S1 | S2 | S3 | S4
data Term a b = NnT (a,b) | Mod String (Sentence a b) (Sentence a b) | Par String
type Sentence a b = [Term a b]
type Prb = Double
data Direction a b = (a, Prb) :-> DirFunc a b
type DirFunc a b = b -> Sentence a b
--grammar
abcDir :: [Direction ABCTerm DP]
abcDir = [
(A, 0.5) :-> \p -> [NnT (A, p)],
(A, 0.5) :-> \p -> [NnT (A, h p), NnT (A, h p)],
(B, 0.5) :-> \p -> [NnT (B, p)],
(B, 0.5) :-> \p -> [NnT (B, h p), NnT (B, h p)],
(C, 0.5) :-> \p -> [NnT (C, p)],
(C, 0.5) :-> \p -> [NnT (C, h p), NnT (C, h p)]
]
rFact x p = p{len = len p * x}
h = rFact 0.5
q = rFact 0.25

applyDir :: (Eq a) => [Direction a b] -> StdGen -> (a,b) -> (StdGen, Sentence a b)
applyDir dirs g (c,d) =
let ds = filter (\((c',p) :-> df) -> c'==c) dirs
(p,g') = randomR (0.0::Double, 1.0) g
in (g, [NnT (c,d)])

555
デフォルトの名無しさん[sage]   投稿日:2015/09/25 05:08:31  ID:LEPedfxV.net
一人二人見かけてそれを全体として語っちゃうような感じ

556
デフォルトの名無しさん[sage]   投稿日:2015/09/25 07:23:04  ID:JLRSSQVw.net(2)
(非終端記号, 確率) :-> (意味値 -> [終端記号または非終端記号])
こうですか?わかりません
コメント1件

557
デフォルトの名無しさん[sage]   投稿日:2015/09/25 07:35:12  ID:4M3b8xA3.net
右寄りのマスコミまで左寄りに見える極右脳
もう産経くらいしか見れるものがない

558
デフォルトの名無しさん[sage]   投稿日:2015/09/25 08:02:54  ID:791H3qBg.net
なんでソースの全体示さないで、一部分だけ貼り付けてんの?
コメント1件

559
デフォルトの名無しさん[sage]   投稿日:2015/09/25 08:28:12  ID:8yN1LKRy.net(3)
確率的構文ツリー生成なんかな
コメント1件

560
デフォルトの名無しさん[sage]   投稿日:2015/09/25 08:41:47  ID:JLRSSQVw.net(2)
宗教上の理由でオープンソースを認めたくない人もいるかもしれない

561
デフォルトの名無しさん[sage]   投稿日:2015/09/25 17:27:22  ID:VsxADiNC.net(2)
エントロピーの計算って p log p とか p log p/q とかいっぱい足し合わせるからpやqの大きさに依ってあり得ない数値になることがあります
合計値が非負であることが数学的に証明済みの計算結果が負になることもあります
困りました
コメント1件

562
デフォルトの名無しさん[sage]   投稿日:2015/09/25 19:08:14  ID:8yN1LKRy.net(3)
>561
Haskell関係ないよね。どっちかというと数値計算の話題だと思う。
コメント1件

563
デフォルトの名無しさん[sage]   投稿日:2015/09/25 19:28:04  ID:VsxADiNC.net(2)
>562
Haskellにそういの巧いことやってくれるライブラリありませんか?
コメント3件

564
552[sage]   投稿日:2015/09/25 21:21:39  ID:1bSV3maE.net
>556 >558 >559
どうもありがとうございます。
もっとハスケル学習してから解読してみます。
パタンマッチ用に記号を鰓が出ない範囲で構成しただけなのかもしれません。

565
デフォルトの名無しさん[sage]   投稿日:2015/09/25 23:01:07  ID:8yN1LKRy.net(3)
>563
Haskell万能だと思いすぎじゃね?

566
デフォルトの名無しさん[sage]   投稿日:2015/09/26 00:37:50  ID:wQKcUgTw.net
ぼく「Haskellに夢を見過ぎた」

567
デフォルトの名無しさん[sage]   投稿日:2015/09/26 06:29:16  ID:b2xSHmqn.net
Haskellやりすぎるとネトウヨになる
彼女もできない

568
デフォルトの名無しさん[sage]   投稿日:2015/09/26 12:13:32  ID:NeyxRrj3.net(2)
>563
君がそのライブラリを作ればいい。(ドヤッ)

569
デフォルトの名無しさん[sage]   投稿日:2015/09/26 15:17:28  ID:9aiso459.net
>563
浮動小数点使わずに計算を進めて最後の最後に浮動小数点にすればいい。
data Logarithm = Log Ratio
みたいな型と、Logarithmに関する計算法則を関数で定義してやればいいだけ。
後はインターフェースを使いやすくしてライブラリとして公開だ!
コメント1件

570
デフォルトの名無しさん[sage]   投稿日:2015/09/26 18:49:49  ID:NeyxRrj3.net(2)
>569
logsumexp みたいな問題ってそれだけで解決するんだろうか(疑問)

571
デフォルトの名無しさん[sage]   投稿日:2015/09/27 11:14:14  ID:76rcq1HU.net
今 yesod-1.4.2 パッケージがインストールされている状態です。

ここに、persistent-sqlite-2.2 をインストールしようしてもできません。
以下が cabal install persistent-sqlite コマンドの出力です。

Resolving dependencies...
In order, the following would be installed:
persistent-2.2 (reinstall) changes: aeson-0.9.0.1 -> 0.10.0.0
persistent-sqlite-2.2 (new package)
cabal: The following packages are likely to be broken by the reinstalls:
yesod-persistent-1.4.0.3
yesod-form-1.4.4.1
yesod-auth-1.4.6.1
yesod-1.4.2
persistent-template-2.1.3.4
Use --force-reinstalls if you want to install anyway.

試しに cabal install --force-reinstalls persistent-sqlite をしてみましたが、
警告通り yesod 関係のパッケージが壊れ、Yesod モジュールが import できなくなりました。
しかたがないので、今は yesod を --force-reinstalls して(表面上は)元の状態に戻しています。

どのようにすれば、yesod と persistent-sqlite が両立できるでしょうか。
コメント1件

572
デフォルトの名無しさん[sage]   投稿日:2015/09/27 13:42:31  ID:A9loNygE.net
stack new、もう少し便利になるといいな。
ライセンスファイルまで作ってくれるのはいいけど、テンプレートいじらないとBSD固定だし。

573
デフォルトの名無しさん[sage]   投稿日:2015/09/27 21:10:40  ID:4V+mGekM.net
テンプレートを一度弄るだけで済むなら十分便利だと思うが……

574
デフォルトの名無しさん[sage]   投稿日:2015/09/28 20:50:38  ID:7GFvCUeK.net(2)
>571 ですが、今の状態のままだと解決策は見あたらないので、
一度全て綺麗さっぱりとアンインストールして stack を入れてみたところ、
yesod も persistent-sqlite も問題なくインストールできました。

しかし、今度はライブラリ ドキュメント関係で問題が発生しました。

まず ghc-7.10.2 をインストールし、それから stack(ArchLinux なので haskell-stack)をインストールしました。
stack を使って ghc をインストールしても良かったのですが、今回はこの順でやりました。

それから、stack haddock コマンドでライブラリ ドキュメントをインストールすると、
~/.stack/snapshots/x76_64-linux/lts-3.7/7.10.2/doc/index.html
からドキュメントが見られるのですが、stack で入れたライブラリのドキュメントしか一覧にありません。

初めに ghc をインストールした時に付随していたライブラリ、
例えば Data.List や System.IO などのモジュールのドキュメントが同じ所には見当たりません。

cabal install --enable-documentation コマンドでインストールした時は、
上記のモジュールも、新しく入れたモジュールも、全てのモジュールが、
ライブラリ ドキュメントのトップページに載っていました。

今の stack ではそのような事はしてくれないのでしょうか。

575
デフォルトの名無しさん[sage]   投稿日:2015/09/28 21:59:53  ID:zeW+fSKN.net
stackでghc入れないからそうなる
コメント1件

576
デフォルトの名無しさん[sage]   投稿日:2015/09/28 22:15:50  ID:7GFvCUeK.net(2)
>575
今の状態からはもう直せないのでしょうか。

577
デフォルトの名無しさん[sage]   投稿日:2015/09/29 03:02:05  ID:EIRExeCg.net(2)
自分でいれたghcをpathから外して、stack setup

578
デフォルトの名無しさん[sage]   投稿日:2015/09/29 03:03:41  ID:EIRExeCg.net(2)
すればstackからghcいれられるけど、望む結果になるかはわからん。

579
デフォルトの名無しさん[sage]   投稿日:2015/09/29 04:11:33  ID:2Slpmx/K.net(3)
main = do
[x,y] <- span (\i -> i < 3) [1 2 3 4 5]
print y

みたいに、spanの結果を束縛したいんだけど、型が合わない。
doの中で、モナドじゃない普通の関数の戻り値を束縛する方法を教えて下さい。
<$>とか<*>で頑張ればできるんでしょうか?
コメント1件

580
デフォルトの名無しさん[sage]   投稿日:2015/09/29 05:03:04  ID:On1dpniq.net
>579
letを使えばよい
span :: (a -> Bool) -> [a] -> ([a], [a]) に注意

main = do
let (x, y) = span (\i -> i < 3) [1, 2, 3, 4, 5]
print y

581
デフォルトの名無しさん[sage]   投稿日:2015/09/29 05:17:34  ID:Pz1/YzO9.net
あとwhere、インデントは適当にあわせくれ

main = do
print y
where
(x, y) = span (\i -> i < 3) [1..5]

582
デフォルトの名無しさん[sage]   投稿日:2015/09/29 05:59:19  ID:cx9spjlF.net
プログラマーの朝は早い。

583
デフォルトの名無しさん[sage]   投稿日:2015/09/29 15:10:52  ID:2Slpmx/K.net(3)
> 578
> 579
そうか、無理にIO ([a],[a])にしようとしないでletを使えばよかったのか・・・。

早朝から回答ありがとうございました。
そして書き込み直後に寝落ちしてごめんなさい。

584
デフォルトの名無しさん[sage]   投稿日:2015/09/29 16:05:00  ID:2Slpmx/K.net(3)
span :: (a -> Bool) -> [a] -> ([a], [a]) に注意
の意味がやっとわかりました。
タプルだったんですね。

main = do
 (x,y) <- (span (\i -> i < 3)) <$> return [1..5]
 print y
でできました。
コメント1件

585
デフォルトの名無しさん[sage]   投稿日:2015/09/29 20:19:07  ID:QEsaWW2p.net
>584

純粋な値をわざわざ return して <- で束縛(正確には違うけど)するのはよくない。
純粋な値の束縛にはlet を使おう(whereでもいい)。

あと、細かいことだが

¥i -> i < 3

とは書かずに

(< 3)

と書く(中置演算子のセクション記法による部分適用)。
コメント1件

586
デフォルトの名無しさん[sage]   投稿日:2015/09/29 21:47:48  ID:7/IBEyg8.net
何故do中のletにはinが不要なのですか?
コメント2件

587
デフォルトの名無しさん[sage]   投稿日:2015/09/29 21:53:11  ID:GFX2Obud.net
>586
do 構文というものはそうだからとしか言いようがない。
Haskell Language Report とかちゃんと見てる?

588
デフォルトの名無しさん[sage]   投稿日:2015/09/30 00:13:44  ID:lhq6Kj3a.net
>586
let ... in を使いたければ do 構文に先行して書く必要がある。
というか、do 構文中に出現するletは do構文に先行するlet ... in の糖衣構文。
なんでそうなってるのかというと、大雑把にはdo構文の解糖を簡単にするため。

# where派より

589
デフォルトの名無しさん[]   投稿日:2015/09/30 00:43:40  ID:7+kRPL7S.net
whereは好きじゃない。当方はlet派です。
F#由来の |> 演算子もいいと思う。

590
デフォルトの名無しさん[sage]   投稿日:2015/09/30 01:54:07  ID:VeSxtbXl.net
F#の |> ってなんだろうと、ググろうとしたけど、記号がググれない。Hoogle的なものはないのか、F#よ。

591
デフォルトの名無しさん[sage]   投稿日:2015/09/30 11:12:27  ID:YNt8mKMb.net
forward pipe operatorだよ

592
デフォルトの名無しさん[sage]   投稿日:2015/10/01 03:27:55  ID:tMJ2X2AQ.net
tanakhネトウヨオフ会やるでー

593
デフォルトの名無しさん[sage]   投稿日:2015/10/01 15:39:45  ID:avwvrY6P.net
データ宣言に型クラス制約つけると、そういう制約のかかってないクラスのインスタンスになれません。

{-# LANGUAGE GADTs #-}

data Foo a where {
Foo :: (Integral a) => a -> Foo a
}

-- ↓これはエラーになる!
instance Functor Foo where {
fmap f (Foo x) = Foo (f x)
}

--- ↓これはOK
class IntegralFunctor f where {
ifmap :: (Integral a, Integral b) => (a->b) -> (f a) -> (f b);
}

instance IntegralFunctor Foo where {
ifmap f (Foo x) = Foo (f x)
}

しかし制約のついた型をファンクタやらモナドやらの枠組みで扱いたいことってあるんですけど、
どうにかしてうまいことすりぬける技とかってないですかね。

594
デフォルトの名無しさん[sage]   投稿日:2015/10/01 21:58:04  ID:J0wqCUi1.net
データ宣言に型クラス制約つけるのって非推奨ないし禁止されてなかったっけ

595
デフォルトの名無しさん[sage]   投稿日:2015/10/02 04:55:22  ID:UReGaTQg.net
それは知ってるんですけど、でもどうしても制約つけたいときあるじゃないですか。
やっぱりなじまないから非推奨扱いなんですかね。

596
デフォルトの名無しさん[sage]   投稿日:2015/10/02 17:31:14  ID:FPOS40TH.net
もともと人間のミスを探すためにつけた制約だからエラーになったら人間のミスでしょ
人間ではなくシステムの工夫が足りないと言い出したらなんのための制約かわからない

597
デフォルトの名無しさん[sage]   投稿日:2015/10/02 21:11:53  ID:xHUlQErn.net
代替手段ないの? どうしてもどうしてもどうしてもそれやりたいの?

598
デフォルトの名無しさん[sage]   投稿日:2015/10/03 10:59:58  ID:+dNnssqW.net(2)
Windowsでタスクトレイに常駐するタイプのプログラムを作ろうと思ったらgtk2ksでいいの?

599
デフォルトの名無しさん[sage]   投稿日:2015/10/03 11:00:27  ID:+dNnssqW.net(2)
×gtk2ks
○gtk2hs

600
デフォルトの名無しさん[sage]   投稿日:2015/10/04 03:27:47  ID:ToJIIXd8.net(2)
Michael Barr, Charles Wells, "Category Theory for Computing Science"って誰か読んだことある人いる?
http://www.math.mcgill.ca/triples/Barr-Wells-ctcs.pdf
良い本ならタダだし読みたいんだけど

601
デフォルトの名無しさん[sage]   投稿日:2015/10/04 03:38:24  ID:ToJIIXd8.net(2)
> でもどうしても制約つけたいときあるじゃないですか。

俺も以前はあるような気がしていたし、Haskellの設計者たちもそうだったんだろう
でもよく考えると、ありそうでないんだよなぁ。だから非推奨になった
データ型での制約は無意味、関数で制約をつければ十分

602
デフォルトの名無しさん[sage]   投稿日:2015/10/04 10:46:06  ID:6Gez6s+W.net(3)
パラメータ多相はダックタイピングに肯定的な雰囲気
アドホック多相は否定的な差別意識のようなものを助長する

603
デフォルトの名無しさん[]   投稿日:2015/10/04 10:46:25  ID:7g0ECNdk.net
1要素のリストを作るとき、[x]ではなく[] xのような書き方を
したいときがあります。(\x' -> [x']) x とか return x は気に入らないです。
この対策となる手短な演算子、関数あります?
コメント2件

604
デフォルトの名無しさん[sage]   投稿日:2015/10/04 10:49:06  ID:2p1Fakm9.net(2)
>603
return

605
デフォルトの名無しさん[sage]   投稿日:2015/10/04 10:50:45  ID:2p1Fakm9.net(2)
すまぬ、「return x は気に入らないです」を見落とした

606
デフォルトの名無しさん[sage]   投稿日:2015/10/04 11:44:55  ID:DjeWLfiE.net
>603
(:[]) x ダメ?

パクッと食べる感じで私は好きですが
コメント3件

607
デフォルトの名無しさん[sage]   投稿日:2015/10/04 12:05:49  ID:6Gez6s+W.net(3)
ていうか感情論じゃなくて客観的な動機を設定してほしい
コメント1件

608
デフォルトの名無しさん[]   投稿日:2015/10/04 14:15:53  ID:fDLINyyR.net
>606
いいね。採用です。

>607
(\x' -> [x']) x 見た目に冗長 (でも、ついさっきまで使っていた)
return は、多目的に利用されていて、
特に「IOモナドにいれる」という雰囲気が強い。
単要素リストのために使いたくないです。

609
デフォルトの名無しさん[sage]   投稿日:2015/10/04 18:32:08  ID:6Gez6s+W.net(3)
モナドがIO専用になったら型クラスにする意味がない
演算子はいくらでも作れるから演算子オーバーロードの需要も少ない

610
デフォルトの名無しさん[sage]   投稿日:2015/10/04 22:02:02  ID:ZUTIhruE.net
Applicativeのpureがreturnよりはいい名前だと思うが
この目的なら>606の書き方が一番クールに見える

611
デフォルトの名無しさん[sage]   投稿日:2015/10/04 22:44:20  ID:Bf0N6nIe.net
というか、普通は>606で書くもんだろ。
非決定性計算の話をしてる時はreturnに決まってるが
コメント1件

612
デフォルトの名無しさん[sage]   投稿日:2015/10/05 00:10:48  ID:GrmouQHI.net
>611
そういう事は初めはなかなか気づけないものなんですよ。

慣れた人にとっては普通すぎて何故その発想が出てこないのか不思議なことでも、
本人にとってはその思考回路がまだできていないのだから仕方がない。

でも、大抵そういう事は一度教えれば納得してもらえるから、
クドクドと言わなくてもいいんじゃないでしょうか。


あと、このタイミングで「非決定性計算」という単語を出しても、
return に対して IO モナドと強く結びついた印象を持っている話し相手には、
たぶん何のことだか分からないと思いますよ。
この単語を出すのなら、もう少し噛み砕いて言わないと。

613
デフォルトの名無しさん[sage]   投稿日:2015/10/05 00:43:59  ID:kDxLTVRe.net
リストをリストとして扱うか、モナドとして扱うかの違いですか

614
デフォルトの名無しさん[sage]   投稿日:2015/10/05 06:37:18  ID:07AYgejN.net(2)
とりあえず***演算子を使ってみてほしい
Arrowとして扱わないから使わないなんてもったいない

615
デフォルトの名無しさん[sage]   投稿日:2015/10/05 09:45:35  ID:yzUqWBwX.net
(>>>)はともかく(***)の出番なんてそんなあるか??

616
デフォルトの名無しさん[]   投稿日:2015/10/05 11:28:48  ID:pbV8Etye.net
>148
ただ賢くなりたいってためにやってるんだと思うよ
筋トレと同じ
目的がなくただプログラミングが詳しくなりたいって人がやってるだけ
だから使えない知識なんだよ

617
デフォルトの名無しさん[sage]   投稿日:2015/10/05 13:21:54  ID:07AYgejN.net(2)
目的は人それぞれ
これを知らない人は同調圧力をかけて計画経済をやろうとするので
そういう意味でとても重要な知識だよ

618
デフォルトの名無しさん[sage]   投稿日:2015/10/09 07:42:19  ID:FkJ7bVyJ.net
>585
>純粋な値をわざわざ return して <- で束縛(正確には違うけど)するのはよくない。
>純粋な値の束縛にはlet を使おう(whereでもいい)。

これはコンパイルエラーのメッセージが分かりづらくなるから?
それとも遅くなる?

正直Haskellのコードがどういうアセンブラにコンパイルされるのか全然イメージできてない。

619
デフォルトの名無しさん[sage]   投稿日:2015/10/09 12:11:11  ID:sh3xoE2A.net(2)
確かに関数適用分のコストは生ずるが、そういう問題じゃない。
モナドじゃないものをわざわざモナドの中に突っ込むとわかりにくくなる。

620
デフォルトの名無しさん[sage]   投稿日:2015/10/09 12:13:09  ID:sh3xoE2A.net(2)
あ、あとラムダ式のネストが一段深くなるのものコストか。
だが、コストの問題よりは意味の問題。

621
デフォルトの名無しさん[sage]   投稿日:2015/10/09 13:39:19  ID:kuWdcal8.net
1. モナドから中身を取り出して
2. なんか純粋な計算をして
3. モナドに戻す
これらを疎結合的に書けるのに、純粋な値をreturnでラップして繋げちゃうと
密結合になっちゃってよくない、という話だと理解していた

622
デフォルトの名無しさん[sage]   投稿日:2015/10/09 15:51:18  ID:SHMAXyUq.net
Haskell使ってる時点でC++より遅いのは今更なこと
低バグ、3ヶ月後に読んでうんざりしないコードが書きたくてHaskellを使うのだろう?

623
デフォルトの名無しさん[sage]   投稿日:2015/10/09 22:08:25  ID:9aZeSACJ.net
低バグはいいが、3ヶ月後に読んでうんざりしないは保証しかねるかな
意外と冗長なほうが読みやすいこともある

624
デフォルトの名無しさん[sage]   投稿日:2015/10/09 22:44:34  ID:uiMXim+R.net
可読性を最大化する言語を決めてから一つの言語で書き続ける
これはウォーターフォール的なやり方

どんな言語が与えられてもまあまあ読めるような書き方を覚えてから言語を適当に選ぶ
というやり方があってもいいと思う

625
デフォルトの名無しさん[sage]   投稿日:2015/10/09 23:13:43  ID:sJZRLwqr.net
3ヶ月後に仕様が変わっていて大幅書き直しを要求されることも…
言語拡張なんていうクソほども信用できないものを使った自業自得だが、これには参ったです

626
デフォルトの名無しさん[sage]   投稿日:2015/10/10 09:00:52  ID:k6/3wbQ3.net
目的のためなら互換性を犠牲にする言語と、目的も犠牲もない言語を使い分ける

627
デフォルトの名無しさん[sage]   投稿日:2015/10/14 10:07:56  ID:6zz3+ZrR.net
Tカードやマイナンバーの
定期的に番号変えても行動パターンが同じだったら結局同定されてしまう問題って

関手から隠されているはずの対象の性質がわかっちゃうんだよって
圏論的に秘匿性に限界があるってことを指摘できちゃうんじゃないの?
役人馬鹿なの?
コメント1件

628
デフォルトの名無しさん[sage]   投稿日:2015/10/14 11:04:49  ID:HE0NXWt0.net
ヤケクソワロタ

629
デフォルトの名無しさん[sage]   投稿日:2015/10/15 16:45:01  ID:UdQzikyH.net
>627
>Tカードやマイナンバーの定期的に番号変えても行動パターンが同じだったら
>結局同定されてしまう問題って

行動パターン?

公開鍵暗号方式で公開鍵を規則的に変えると秘密鍵も同じ規則でかわるの?

630
デフォルトの名無しさん[sage]   投稿日:2015/10/15 18:00:22  ID:8y87T4ny.net
線形に変化すると特定されるので非線形の暗号アルゴリズムを使用しなければならない

631
デフォルトの名無しさん[sage]   投稿日:2015/10/17 13:50:41  ID:oxF0LCT1.net
最近ホットなライブラリは?

632
デフォルトの名無しさん[sage]   投稿日:2015/10/18 17:32:04  ID:IQSF+r4c.net(2)
wai パッケージのライブラリの使い方について質問です。

Web アプリにおけるストリーム レスポンスがどのように働くのか調べているのですが、
挙動がいまいちよく分かりません。

import Blaze.ByteString.Builder (Builder, fromByteString)
import Control.Concurrent (threadDelay)
import Network.HTTP.Types (status200)
import Network.Wai (Application, responseStream)
import Network.Wai.Handler.Warp (run)

main = run 3000 app

app _ sendResponce = sendResponse $ responseStream
 status200
 [("content-Type", "text/plain")]
 content

content = send frush = do
 send $ fromByteString "A\n"
 flush
 threadDelay 5000000
 send $ fromByteString "B\n"

これを runhaskell で実行して firefox でアクセスしてみました。

私の期待通りなら、ブラウザ画面に A が表示されてから 5 秒後に B が表示されるはずですが、
実際は画面が空白のまま 5 描画が経過した後に A と B が表示されます。

この挙動を見てストリーミングの意味がよく分からなくなったのですが、こういうものですか?
コメント2件

633
デフォルトの名無しさん[sage]   投稿日:2015/10/18 17:43:42  ID:IQSF+r4c.net(2)
>632
すいません、コードが変で、余計なものもありました。

import Blaze.ByteString.Builder (fromByteString)
import Control.Concurrent (threadDelay)
import Network.HTTP.Types (status200)
import Network.Wai (responseStream)
import Network.Wai.Handler.Warp (run)

main = run 3000 app

app _ sendResponce = sendResponse $ responseStream
 status200
 [("content-Type", "text/plain")]
 content

content send frush = do
 send $ fromByteString "A\n"
 flush
 threadDelay 5000000
 send $ fromByteString "B\n"

これが >632 のように期待通りになりません。
「期待」の方が間違っているでしょうか?

634
デフォルトの名無しさん[sage]   投稿日:2015/10/19 18:31:35  ID:D0TieV9y.net
sbvって実行時証命? コンパイル時証命してくれる機能はないの?

635
デフォルトの名無しさん[sage]   投稿日:2015/10/22 01:58:37  ID:7Ovl9dzN.net
Data.ListとData.Array.Repaをimportとするのに困っています
・Repaをfull importする -> map,zipWithが衝突する
・Repaをqualifiedにする -> :. も修飾しろと言われる
両方qualifiedにするしか回避方法がないのでしょうか?

636
デフォルトの名無しさん[sage]   投稿日:2015/10/22 02:12:31  ID:kknqMtK3.net(2)
import Data.Array.Repa (:.)
import qualified Data.Array.Repa as R
コメント1件

637
デフォルトの名無しさん[sage]   投稿日:2015/10/22 02:15:03  ID:kknqMtK3.net(2)
或いは

import Data.Array.Repa as R

とRepaをqualifiedせずにいったんフルに開いてしまい、
衝突するmapやzipWith は R.map R.zipWith とする。

638
デフォルトの名無しさん[sage]   投稿日:2015/10/28 01:22:53  ID:JEFLc7P8.net
>636
同じモジュールを2回importしてもいいんですね

import Data.Array.Repa ((:.)(..))
import qualified Data.Array.Repa as R

これで思っていた感じになりました
ありがとうございました

639
デフォルトの名無しさん[sage]   投稿日:2015/10/29 21:24:47  ID:DfqrGTRw.net
いまだに forall がよく分からん。

f :: T1 a => T2 a
g :: forall a. T1 a => T2 a

関数 f と g の違いって何?
コメント2件

640
デフォルトの名無しさん[sage]   投稿日:2015/10/29 21:31:26  ID:MKBh71hJ.net
ライブラリのサンプルでラムダ式の4重ネストとか見かけるけどそういう書き方って普通なの?
jsのコールバック地獄と何一つ変わらない気がするんだけど
コメント1件

641
デフォルトの名無しさん[sage]   投稿日:2015/10/29 23:35:31  ID:e9INJKYU.net
>639
なにも違わない
コメント3件

642
デフォルトの名無しさん[sage]   投稿日:2015/10/30 01:13:23  ID:FTBRryE0.net
>641

=> は型制約?
それとも -> という関数型データ構築子の誤記?

data ShowAny = forall a. Show a => SA a

みたいなデータ型を定義すると、この型を使って

heteroList :: [ShowAny]
heteroList = [SA 7, SA "Hello!", SA [1,2,3], SA ()]

みたいなリストを作って、

map show heteroList

メソッドディスパッチ的な多相みたいなことができるようになる。
forall を書くことでデータ型宣言の右側に量化を及ぼせるようになるのが
forall(とExistentialQuantification拡張)の意義だよ。
コメント1件

643
デフォルトの名無しさん[sage]   投稿日:2015/10/30 21:13:55  ID:F94K7ptG.net
>641
>642
誤記じゃないよ。

いや、Wikibooks の「Hskell/存在量化された型」などを見て forall の基本は理解したつもりになっていたけど、
書籍「Developing Web Apps with Haskell and Yesod」に、

type ChatHandler a =
  forall master. YesodChat master =>
  HandlerT Chat (HandlerT master IO) a

という型シノニムが載っていて、よく分からなくなった。
(これ、ライブラリが用意した型じゃなく、こういうのを自作しましょうと言ってる)

わざわざ forall を付てるのはどういう意図なんだろ。
>641 の言うように特に意味はないの?

意図はともかく、この場合の forall の役割も記事の文脈が分からないと何とも言えないかな。
コメント1件

644
デフォルトの名無しさん[]   投稿日:2015/10/31 10:46:17  ID:dbQDbY0R.net
>639
Haskellが今どうなってるか知らないが一般的にトップレベルのforallは省略できる
局所的なforallは省略できない
例 (forall a. (b -> a) -> a) -> b
コメント1件

645
デフォルトの名無しさん[]   投稿日:2015/10/31 11:22:59  ID:v6Gqs4tJ.net
モナドの別名を作りたいです。型におけるnewtypeのように、専用のモナドにして、
既存のモナドと混ざらないようにしたいです。

具体的には、Writerモナドを特化したいと考えています。

WriterT のエラーログ専用版、 ErrorLogTを作り、
エラーログは関数tellではなく、専用関数tellErrorを使うようにしたいです。

同様に、警告ログ用はWarningLogTとtellWarningとしたいです。

作る方法あります?
コメント1件

646
デフォルトの名無しさん[sage]   投稿日:2015/10/31 13:00:33  ID:VBW/ZV1E.net(4)
>643
それはmasterが局所的な量化になってるんじゃないの?
ChatHandlerの型にはmasterがどういう型かが現れてないでしょ
コメント1件

647
デフォルトの名無しさん[sage]   投稿日:2015/10/31 13:04:49  ID:VBW/ZV1E.net(4)
>645

newtype MyMonad a = MyMonad { runMyMonad :: SomeMonad SomeType a }
deriving (Functor, Applicative, Monad)

とかすれば?

648
デフォルトの名無しさん[]   投稿日:2015/10/31 14:02:44  ID:mkYHJB27.net
定義としては、こんな感じかな。。
モナド変換子の扱いが厄介だと思ったが、あっさり成功しました。
まだ使ってない・・。

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

newtype ErrorLogT m a = ErrorLogT { runErrorLogT :: WriterT [String] m a }
deriving (Functor, Applicative, Monad)

649
デフォルトの名無しさん[sage]   投稿日:2015/10/31 14:45:40  ID:+eMHagJM.net
>644
>646
試しに forall master. をコメントアウトしてコンパイルしてみたら、下記の warning が出た。

Variable ‘master’ is implicitly quantified due to a context
Use explicit forall syntax instead.
This will become an error in GHC 7.12.
In the type ‘YesodChat master => HandlerT Chat (HandlerT master IO) a’
In the declaration for type synonym ‘ChatHandler’

出たのは warning だけで、コンパイル自体はできる。
ということは、局所的な forall ではないよね。
もしそうならエラーでコンパイルできないはず。

つまり、今のところは「この場合の forall の有無による意味の違いは無い」と解釈して問題ない、よね? まずいかな?


書籍ではたぶん、将来エラー扱いになる(し、今でも警告が出る)から今のうちに forall を明示的に書いておいたのだと思う。
だが、なんで将来エラー扱いになるのかが分からんな。
明示しないとどんな不都合が起こるんだろ。
コメント1件

650
デフォルトの名無しさん[sage]   投稿日:2015/10/31 15:08:37  ID:VBW/ZV1E.net(4)
>649
んー、確かめたら局所量化じゃなさそうだね。
= の右に左に出てこない型変数をforallなしで書くなってことなんだろうけど
でもこれデータ型宣言じゃなくて型シノニムだもんね。

651
デフォルトの名無しさん[sage]   投稿日:2015/10/31 20:13:28  ID:VBW/ZV1E.net(4)
>640
>ライブラリのサンプルでラムダ式の4重ネストとか見かけるけどそういう書き方って普通なの?
>jsのコールバック地獄と何一つ変わらない気がするんだけど

よくわからん。

¥x1 x2 x3 -> zzzzzzz と書くのを律儀に
¥x1 -> ¥x2 -> ¥x3 -> zzzzzzzzz と書いてたって話じゃないのか?

それなら単に複数引数のλを周りくどい表記で書いてるってだけだ。
或いはdo構文をdesugarした形で明示的に書いてるとかかな。
いずれにせよ関数定義内で局所的に変数を定義するのと同じなんで地獄とも思えない。

652
デフォルトの名無しさん[sage]   投稿日:2015/10/31 20:39:17  ID:fFBIHpK6.net
もしhaskellじゃなかったらごめんなさい
うろ覚えだけどabcマシン?なるマシン語を下地になんか作る本があったきがするんだけど
何の本かわかります?
コメント1件

653
デフォルトの名無しさん[sage]   投稿日:2015/11/01 02:39:58  ID:35r9qLcL.net(2)
すみませんhaskell学習のためにIDE使おうと思い試しに
intellijにhaskforceプラグイン入れて
winghci向けにテキストエディタで作っていた物を実行した所
cabalのhackageライブラリへの接続設定が上手くいかないみたいで
エラー連発となったのですが
どなたかintellij活用していて解る方いましたら教えて下さい。

参考URL
https://carymrobbins.github.io/intellij-haskforce/

654
651[sage]   投稿日:2015/11/01 11:32:51  ID:35r9qLcL.net(2)
すみません.cabalファイルの
build-depends設定が必要でした。
お騒がせしました。

655
デフォルトの名無しさん[sage]   投稿日:2015/11/02 00:08:37  ID:BuossX5P.net
>652
わからん。
Haskellはcmmで書かれてるらしい。

656
デフォルトの名無しさん[sage]   投稿日:2015/11/02 00:55:43  ID:+TdI2Qwj.net(3)
abcマシンってこの人が記事にしてるやつ?

http://d.hatena.ne.jp/lethevert/20060424/p2

657
デフォルトの名無しさん[sage]   投稿日:2015/11/02 01:05:24  ID:+TdI2Qwj.net(3)
察するにHaskellじゃなくConcurrent Cleanなる関数型言語がABCマシンからなるVMを使っているようだが

658
デフォルトの名無しさん[sage]   投稿日:2015/11/02 01:17:27  ID:+TdI2Qwj.net(3)
昔は2chにConcurent Cleanのスレがあったらしい

http://d.hatena.ne.jp/quox/20080809/p4

659
デフォルトの名無しさん[sage]   投稿日:2015/11/02 02:19:27  ID:3aJacJQZ.net(3)
いまは単にCleanという。Concurrentの部分は黒歴史認定された。

660
デフォルトの名無しさん[sage]   投稿日:2015/11/02 20:29:53  ID:iqlL+d1G.net
cleanかー。確かに昔cleanのpdfファイルを読んだ覚えがある。cleanのスレもたまに見てた
haskellじゃなかったのね、ありがとう

661
デフォルトの名無しさん[sage]   投稿日:2015/11/02 20:33:46  ID:6V7frwcR.net(2)
import Data.Array
import Data.Map

f :: Array Int Int -> Int -> Int
f a i = a ! i

これ、(!) がどっちのモジュール由来かわからんってエラーが出るんだが、
なんで推論しないんだろうな。

もし (!) が、Array と Map がともにインスタンスになっている共通のクラスのメソッドなら、
ちゃんとどっちの型のものか推論してくれるのに。
コメント2件

662
デフォルトの名無しさん[sage]   投稿日:2015/11/02 22:03:07  ID:3aJacJQZ.net(3)
>661
>これ、(!) がどっちのモジュール由来かわからんってエラーが出るんだが、
>なんで推論しないんだろうな。
>
>もし (!) が、Array と Map がともにインスタンスになっている共通のクラスのメソッドなら、
>ちゃんとどっちの型のものか推論してくれるのに。

まさに殆ど自分で答えを書いてると思うが、(!)は多相関数じゃないから
推論もヘッタクレもなく、単純に名前が衝突する。

ほぼ同じ状況のレコードのフィールドは
列多相にする拡張がGHC 8.0でついに入るようだ。
コメント1件

663
デフォルトの名無しさん[sage]   投稿日:2015/11/02 22:29:42  ID:BI35UJR0.net
多相な関数ってのとたまたま同じ名前がついた関数が複数あるってのは条件が違うんだな。

664
デフォルトの名無しさん[sage]   投稿日:2015/11/02 23:30:27  ID:6V7frwcR.net(2)
>662
名前が衝突してたって、a と i の型で (!) がどっちのものか特定できるじゃん。

なんで分からないなんて言うの、って話。

クラスメソッドなら同じく a と i の型から推測するわけだから、
同じように推測すればいいのに。
コメント1件

665
デフォルトの名無しさん[sage]   投稿日:2015/11/02 23:36:48  ID:3aJacJQZ.net(3)
>664
多相性抜きだと (!) に型がつかないから。
あと、同じ型シグネチャを持った複数の(!)があったらいずれにせよ解決できない。
おとなしく最初からモジュール名で修飾して特定できるようにしとけ、というのは理にかなった方針。
コメント1件

666
デフォルトの名無しさん[sage]   投稿日:2015/11/03 09:06:22  ID:6b9tjAll.net
>665
うーん、正直なところまだ納得できん。

これだけ教えてくれ。
>661 の状況で (!) が Data.Array モジュールで定義されたものだと特定するのは、理論的に不可能なのか?
それとも、たまたま今の ghc に特定する仕組みが備わっていないだけなのか?
コメント2件

667
デフォルトの名無しさん[sage]   投稿日:2015/11/03 09:43:56  ID:9Nk73qdO.net
>666
理屈としては可能なんじゃないかな。効率がわるいから
やらんだけで。

668
デフォルトの名無しさん[sage]   投稿日:2015/11/03 12:15:21  ID:47MAD1yd.net
>666
観点による。現在の環境にある(!)という名前の全部をテーブルから探してきて、
引数位置の型に合うヴァージョンを同定するということ自体はもちろんできる。

だが、(!)を多相にする仕組みを用意しないと(!)に型が付かないので
型安全性の観点からは不可能だということになる。
試しに自分が期待するように振る舞う(!)の型を書いてみればいい。

察するに構造的部分型が欲しいのかもしれないが、Haskellにはない(OCamlにはある)。

669
デフォルトの名無しさん[sage]   投稿日:2015/11/04 11:53:03  ID:8WRcFuaF.net
具体的に考えるんだ
x の型が一意に決まらないとき show x はどうなるかとか
コメント1件

670
デフォルトの名無しさん[sage]   投稿日:2015/11/04 20:49:16  ID:YGBxZpF/.net
>669
どうなるの?

671
デフォルトの名無しさん[sage]   投稿日:2015/11/05 12:04:56  ID:327W9Rc/.net
A型またはB型を意味するABクラスを考える
x :: AB a => a
show :: Show a => a -> String
show x :: (AB a, Show a) => String
形式上ABクラスとShowクラスの関係は宣言していない (できない) から両者は無関係

だがABクラスがなくなればAとShowの関係やBとShowの関係を無視できない

672
デフォルトの名無しさん[sage]   投稿日:2015/11/07 05:01:31  ID:e/JIsCJ0.net
13:00
〜21:00
チャンネル 関数型ストリーム処理勉強会

lv241026970

673
デフォルトの名無しさん[sage]   投稿日:2015/11/08 15:12:58  ID:ZXpAyz0G.net
free monadのfreeってどういう意味?
自由とか解放とか、鉛フリーとかのフリー?
monad以外にも何とかフリーってあるの?
コメント1件

674
デフォルトの名無しさん[sage]   投稿日:2015/11/08 23:09:18  ID:/x5r6R9h.net
>673
由来は数学だね。数学のなかで、なんかの理論(たとえば群論や線形空間論)があったとして、
「なんでもない集合S」を土台にして「群」や「線型空間」を作りたい場合があるわけ。
普通の群はなんか色々元同士に絡みあった複雑な関係があったりするけど、Sから簡単に作った
群はそういう「複雑な関係から自由」だと思えるわけ。そんなわけで、そうやって作ったのを「Sの
上の自由群」と呼んだりする。

線形空間もそう。Sの元をベクトル空間の基底だと思って、無理にベクトル空間にするわけ。
S={きゅうり、なす、みかん} だとすると、これらを基底とするベクトルは

 αきゅうり+βなす+γみかん

みたいになる、、、とか言うと大理不尽パンチを食らった感じがするかもしれんけど、
学習理論で言う特徴空間なんてそんな感じだよ。

 α特徴1+β特徴2 + γ特徴3

みたいに表して、その空間がどうなってるかを調べたりするわけ。そういう意味で、一見
理不尽というか、「数学的な対象はコネコネして作れない」という神話的プラトニズムからは
受け入れがたいだろうけど、こうして作った空間は「数学」と「現実」を結んで議論するのに役に立つよ。

「現実と数学」の理論を結んでくれるこのような働きそのものを圏論ではシミュレートできるわけ。
「なんたら」という理論に対して「自由なんたら」を考えることができる。こういうとゆるっとしてふわっとした
話のようだけど、一般性という意味でのゆるさを保ちつつ、議論が宙に浮かない程度にはリゴラスな
議論ができるのが圏論の旨味です。

気分的な解説をこれ以上続けても仕方ないので、興味があったら圏論の本の「随伴」あたりを勉強されたし。
たまに「Wikipedia見てもわからなかった」とか言ってる人がいるけど、Wikipediaは記事によって記述の濃淡が
ばらつき過ぎていて、あれで勉強するというのは全くオススメしないよ。
コメント1件

675
デフォルトの名無しさん[sage]   投稿日:2015/11/09 00:46:28  ID:hXrsgMsb.net
>674
ありがと。

圏論 原著第2版 の第9章のタイトルが随伴だそうだから読んでみるわ。
圏論入門者がそこまで到達(理解)するのにどれだけ時間がかかるか分からんが。

676
デフォルトの名無しさん[sage]   投稿日:2015/11/10 15:18:42  ID:GBT1w9xC.net
モナドって離散信号を一回連続に直してからフーリエ変換して離散に戻すみたいな感じですか
コメント1件

677
デフォルトの名無しさん[sage]   投稿日:2015/11/10 20:05:26  ID:ZeRtqP7q.net
モナドは自己関手なので離散から連続に直すみたいな感じではありません

678
デフォルトの名無しさん[sage]   投稿日:2015/11/11 00:04:10  ID:CaB3I9+U.net(2)
>676
床下配線でどうたら、という解説から想像をたくましくしてはいけない

679
デフォルトの名無しさん[sage]   投稿日:2015/11/11 07:01:19  ID:ECN7vnC1.net
あえて抽象的な喩えで言うなら、
「モナドは文脈」という考え方が私はわかりやすかった。

ある関数を使うときに文脈によって意味 (戻り値) がかわることもあるし、
文脈にそぐわない関数を使うことは出来ないように型で制約されている感じは、
まさに文脈って感じがする。

680
デフォルトの名無しさん[sage]   投稿日:2015/11/11 08:45:56  ID:+7UgY0Lp.net
つまりモナドを説明する前に多相型を説明しろってことだ
多相型は文脈によって意味がかわる
コメント1件

681
デフォルトの名無しさん[sage]   投稿日:2015/11/11 22:41:55  ID:CaB3I9+U.net(2)
>680
そういう意味での文脈、じゃないよ。

たとえばMaybeは「中に何も入ってないかも知んない文脈」だし
リストは「なんか値が複数にバラけてるっぽい(し何もないかもしれない)文脈」なんだよ。
具体的にはFunctorでラップされてる型ならなんでもそのFunctorに応じた文脈だと言える。

Functorを考えるとき、

X -> F Y と Y -> F Z を合成したい場合がある。
(しなくても済む場合もありますが)

そういう「合成」がうまくいくためには FY と Y->FZ を受け取ってFZを
返してくれる演算があると便利だなぁということになる。それが (>>=)だね。
そういう演算が「うまく行く」ことを保証するのがモナド則。

682
デフォルトの名無しさん[sage]   投稿日:2015/11/12 06:44:47  ID:169dDeUZ.net(3)
「文脈」なんて言わずにおとなしく「計算効果」といっておけばよかったんだよ

非モナディックな値を単純にreturnでモナドに投入するだけでは作れないような
モナディックな値がその計算効果の意味を表現している
MaybeならNothingだし、Listならシングルトン以外の全てのリスト、
IOなら実行しても定数しか返さないようなもの以外の全てのIOアクション

そういう計算効果を、do構文の中にいるときのようにある種自然に
取り扱えるようにするのが、モナドの持つ構造つまりモナド則。

683
デフォルトの名無しさん[sage]   投稿日:2015/11/12 12:19:12  ID:92MD0hMh.net
モナドがない言語にもListはあります
モナドがなくてもListの計算効果はあります
Listを知らない人にモナドを教えるのは早すぎるし
知っている人に計算効果を教えるのは遅すぎる
コメント1件

684
デフォルトの名無しさん[sage]   投稿日:2015/11/12 19:03:08  ID:UTL+VBaF.net(2)
昔、継承がなければポリモーフィズムもないと思ってたんだが
ダックタイピングすれば継承がなくてもポリモーフィズムがあると気付いて
継承を理解するには静的型付けを知るべきだと思った

モナドも同じだと思う
静的型付けを知らなければモナドの本当の意味は分からない
コメント1件

685
デフォルトの名無しさん[sage]   投稿日:2015/11/12 19:15:06  ID:169dDeUZ.net(3)
>684
>昔、継承がなければポリモーフィズムもないと思ってたんだが
>ダックタイピングすれば継承がなくてもポリモーフィズムがあると気付いて
>継承を理解するには静的型付けを知るべきだと思った

意味がわからん。
継承と多相が関係ないのはそりゃ当然だが
ダックタイピングがどうというのも関係がない

>モナドも同じだと思う
>静的型付けを知らなければモナドの本当の意味は分からない

いや普通にリストモナドとかLispで実装して使うから。
そういうLisperは既に静的型付けを知っている!みたいな話なのかもしれんけど。
コメント1件

686
デフォルトの名無しさん[sage]   投稿日:2015/11/12 21:24:49  ID:UTL+VBaF.net(2)
>685
リストモナドというけど、Haskellと全く同じ仕様をLispで実装したとは思えないから
モナドの定義が微妙に違うんだろうな
オブジェクト指向の定義が何通りもあるのと同じようにね

687
デフォルトの名無しさん[sage]   投稿日:2015/11/12 21:50:28  ID:169dDeUZ.net(3)
「モナドの定義が微妙に違う」#とは

ふつうにreturn, fmap, bind (or join) を用意して
do構文に似せたマクロにするだけなんだが……

688
デフォルトの名無しさん[sage]   投稿日:2015/11/12 23:18:40  ID:HSTzSi/o.net
ID:UTL+VBaFが何言ってんのかさっぱり分からん

689
デフォルトの名無しさん[sage]   投稿日:2015/11/13 00:16:45  ID:S1si1Bvf.net
嘘を言うよりよっぽど安全だが
まあどんな小さなリスクも見逃さない努力が必要ってことか
コメント1件

690
デフォルトの名無しさん[sage]   投稿日:2015/11/13 07:28:57  ID:z10Svt7p.net
そもそも継承と部分型関係は関係ないからな。
ID:UTL+VBaF (>689もかな?) の言ってることは尽く意味不明。

691
デフォルトの名無しさん[sage]   投稿日:2015/11/14 16:08:25  ID:eusaGjJ0.net
>683
(>>=)のような組み合わせ方法を議論のビルディングブロックに
もってきたのがHaskellの(というかワドラーの)偉さなんだけど、
この「偉さ」は静的な型がしっかりした世界でのみ意味を持つのであって
そういう意味では他の言語では(所謂関数型言語の仲間であっても)
モナドを論じる意味は全くない。
コメント1件

692
デフォルトの名無しさん[sage]   投稿日:2015/11/14 16:32:22  ID:99hLr/Ur.net(2)
>691
>この「偉さ」は静的な型がしっかりした世界でのみ意味を持つのであって

まったく勘違いしてる
計算効果は型付けの静的動的とはなんの関係もない
コメント1件

693
デフォルトの名無しさん[sage]   投稿日:2015/11/14 17:06:11  ID:naUAJjzL.net
自分が書いたものでも他人が書いたものでも、
ぱっと見これは宣言的じゃないなと感じるコードってあるよね。

俺は自分で無計画に思いつくままにプログラミングしてて、
let や where でやたら数珠繋ぎに値が加工されているときに、
こりゃアカンわと思うんだが。
where
 (x, y) = f a
 z = g x
 w = h y z


おまえらはどう?
どういうコードを見たときに非宣言的だと感じる?

694
デフォルトの名無しさん[sage]   投稿日:2015/11/14 20:09:24  ID:e1nh6RLI.net
let や where の変数の値は実行時まで分からないことが多い
分からないことは宣言できない
余計な変数を作らないようにして分からないことを目立たなくすることはできる

695
デフォルトの名無しさん[sage]   投稿日:2015/11/14 23:38:38  ID:99hLr/Ur.net(2)
>let や where の変数の値は実行時まで分からないことが多い
>分からないことは宣言できない
>余計な変数を作らないようにして分からないことを目立たなくすることはできる

意味不明過ぎる。
局所定義でなくトップレベルに書いたらいいとでも?

696
デフォルトの名無しさん[sage]   投稿日:2015/11/15 00:16:27  ID:1MD+X9xB.net
宣言的ってナニ?

697
デフォルトの名無しさん[sage]   投稿日:2015/11/15 06:56:56  ID:QRVxROzt.net
Excelは宣言的だと聞いたことがある

698
デフォルトの名無しさん[sage]   投稿日:2015/11/15 09:11:10  ID:5yN0loUP.net(2)
囲碁やソリティア、大戦略などのような2次元の広がりのある升目型ボードゲームを作る場合、
ボードのデータ構造は Haskell でもやはり Data.Array 系でしょうか。
コメント1件

699
デフォルトの名無しさん[sage]   投稿日:2015/11/15 10:02:09  ID:rgLL3QSn.net
>698
immutableでやるんならData.Mapでもさほど問題はないよ。数百要素程度だし。
mutableで行くとシンプルに割りきってMArrayを使ってもいいんじゃないかな。
もし盤面を行列と見た計算が必要ならRepaを使う。
コメント1件

700
デフォルトの名無しさん[sage]   投稿日:2015/11/15 14:07:14  ID:0IQFXnOJ.net
副作用使わない自慢よりは静的型付け自慢の方が無難

701
デフォルトの名無しさん[sage]   投稿日:2015/11/15 20:49:33  ID:5yN0loUP.net(2)
>699
ありがとうございます。
参考にさせていただきます。

702
デフォルトの名無しさん[sage]   投稿日:2015/11/15 21:30:51  ID:mV2QWUyr.net
>692
私が言ったのは (>>=)を議論のビルディングブロックに持ってくることが
ピンと来るのは静的な型がしっかりしているからだ、と言うことだ。

別にLispやJavascriptやらJavaで (>>=)に該当するものを作っても構わんが
Haskellが受けるのと同じ恩恵は受けられない。

ホゲホゲという言語でモナド作ってみたとかいう記事は腐るほど出てくるが
Haskellっぽい言語以外では「作ってみた」以上の進展はない。
考えることは出来ても(>>=)を議論のビルディングブロックにする旨味が
その導入コストを下回るからだ。

703
デフォルトの名無しさん[sage]   投稿日:2015/11/15 22:40:50  ID:vt2WrPRj.net

704
デフォルトの名無しさん[sage]   投稿日:2015/11/16 01:03:44  ID:86x+5+3M.net
declarativeと何を対比したいんだ?

宣言的/式志向的

を区別したいなら
https://wiki.haskell.org/Declaration_vs._expression_style

を読むだろJK

705
デフォルトの名無しさん[sage]   投稿日:2015/11/16 01:27:31  ID:Dn8++f15.net
>703
・宣言的/非宣言的に分けられるという信念はだれに吹きこまれたのか
・宣言的/非宣言的を判定する基準は存在すると思うか。思うとしたら何故か
・そもそも宣言的(ry

706
デフォルトの名無しさん[sage]   投稿日:2015/11/16 01:52:39  ID:O5zwBLaM.net
よく知らないけど、宣言的と手続き的って矛盾しないの?
対比させてる人が多いけど

707
デフォルトの名無しさん[sage]   投稿日:2015/11/16 19:26:37  ID:sTC4qthO.net
手続きは機械でできるから人間の仕事は宣言だけになるという噂だよな
手続き的な宣言が存在しないとは言っていない

708
デフォルトの名無しさん[sage]   投稿日:2015/11/17 02:43:27  ID:f2IMGMZY.net
モナドすら知らない人からするとdo文は手続きに見える
コメント1件

709
デフォルトの名無しさん[sage]   投稿日:2015/11/17 07:00:14  ID:qSlbRl0V.net
>708
というかそれでいいんだよ。
純粋な関数型の枠組みの内部で手続き的な構造をもたらすことが
モナドを導入する意図の重要なひとつなんだから。
コメント2件

710
デフォルトの名無しさん[sage]   投稿日:2015/11/17 21:08:21  ID:a/8UTPX3.net
手続き的な構造を目的にして do 構文を使っちゃいかん。
ソースが見苦しくなる。

手続き的な構造の構築機能としては、
Haskell の do 構文は C 言語などに比べて遥かに不自由なのだから。

711
デフォルトの名無しさん[sage]   投稿日:2015/11/18 08:39:48  ID:yhwFYSiS.net(3)
main :: IO () の場合がまさにそうだけど、モナドM に対して M なんちゃらって
値を一つのリテラルで書くのが難しい場合に手続き的に do で
構成するような使い方にとどめておいたほうが良いのであって
手続き的にかけるぞやったーとか言ってると全体がIOモナドに
なちゃーうよ。

712
デフォルトの名無しさん[sage]   投稿日:2015/11/18 12:46:08  ID:CKQsS/J8.net(3)
>709
> 純粋な関数型の枠組みの内部で手続き的な構造をもたらすことが
> モナドを導入する意図の重要なひとつ
それってどのくらい信用していい?
それじゃあ、モナドを導入する意図のうち重要なものをすべて挙げることができる?
あるいは、モナドを導入する意図全体を簡潔に言える?
コメント2件

713
デフォルトの名無しさん[sage]   投稿日:2015/11/18 18:32:33  ID:yhwFYSiS.net(3)
>712
重要な理由の一つを挙げただけの人にどうして
「モナドを導入する意図のうち重要なものをすべて挙げることができる?」
と聞くのかさっぱりわからん。

というか「信じるかどうか」気にする前に君が読むべき論文は

Wadler Monad

でググれば一発目に出てくると思うんだが。あとはその論文でも
引用されてる Moggi 1989 とか。 Moggi 1989 はアイデアの宝庫だよ。
状態や継続が「モナドで表現した計算効果」とみなせることは
Moggiのアイデアだよ。
コメント2件

714
デフォルトの名無しさん[sage]   投稿日:2015/11/18 19:17:44  ID:YqJaO+rH.net
http://www.amazon.co.jp/dp/4535786674/
発売日 2015/12/14

こんなの今日見つけたんだけど、圏論、今年、流行ってるの?

日本人が書いてるから、言葉的に読みやすいと嬉しいけど。

715
デフォルトの名無しさん[sage]   投稿日:2015/11/18 20:53:20  ID:CKQsS/J8.net(3)
>713
> 重要な理由の一つを挙げただけの人にどうして
> 「モナドを導入する意図のうち重要なものをすべて挙げることができる?」
> と聞くのかさっぱりわからん。
めんどくさい人だね。一つ挙げた人が残りすべてを挙げることができるかもしらんし、
できんかもしらんじゃないか。なんで「と聞くのかさっぱりわからん」のかさっぱりわからん。
出来ないはずだがね、あなたにも

> Wadler Monad
> Moggi 1989 はアイデアの宝庫だよ
それはあなたたちの買いかぶりだよ

716
デフォルトの名無しさん[sage]   投稿日:2015/11/18 22:39:23  ID:yhwFYSiS.net(3)
↑なんでハスケルスレってこんな人ばっか湧くの?
コメント2件

717
デフォルトの名無しさん[sage]   投稿日:2015/11/18 22:54:25  ID:ELCanc9c.net
>709
よく分からんのだが、その構造というのは表現と同義?

単に手続き型言語のプログラムと似たような見た目にできるよって話なのか、
それとももっと深い意味(意義)があるのか。
コメント1件

718
デフォルトの名無しさん[sage]   投稿日:2015/11/18 22:57:14  ID:r+WUaKBg.net(3)
>716
しかもこういうのに限ってまともに勉強したことない感じなんだよなあ

Moggi1989をきちんと読んで理解した人間人が
>712みたいな間抜けな質問をするはずもなく。
コメント1件

719
デフォルトの名無しさん[sage]   投稿日:2015/11/18 23:01:07  ID:r+WUaKBg.net(3)
>717
モナドを使って計算効果の表示意味論を与えようという話なんで、
見た目がどうとかじゃなくて、まさに「意味」の話よ。
コメント2件

720
デフォルトの名無しさん[sage]   投稿日:2015/11/18 23:26:13  ID:CKQsS/J8.net(3)
>716 >718
腐るほど居る単なる文献学習生の一人(二人?)なのね?w
しかも今や相当古い文献

721
デフォルトの名無しさん[sage]   投稿日:2015/11/18 23:32:09  ID:r+WUaKBg.net(3)
うわあイタい

722
デフォルトの名無しさん[sage]   投稿日:2015/11/19 07:29:01  ID:lSpyFHbj.net
>719
計算効果の表示的意味論を「何に対して」与えるの?
手続き的な構造をもたらす対象は「何」?

両者の「何」は同じもの?
つまり、その「何か」はモナドによって計算効果の表示的意味論を与えられると、
構造が手続き的になるの?

構造の意味もいまいち分からんが・・・

723
デフォルトの名無しさん[sage]   投稿日:2015/11/19 10:52:43  ID:zQxckC7S.net(2)
質問が多くなるのは最初の質問がおかしいんだよ
おそらく質問の答えを知りたいのではなく論破して否定したいだけ
それなら単刀直入に否定から入る方が早い

否定から入るのを避けるのは非効率
明らかに生産性が下がっている

724
デフォルトの名無しさん[sage]   投稿日:2015/11/19 13:45:26  ID:0swJqKqT.net
関数型言語ってモジュール間の依存性高すぎない?

725
デフォルトの名無しさん[sage]   投稿日:2015/11/19 14:24:16  ID:/zyx7Wn8.net
大雑把な書き方をするねぇ

726
デフォルトの名無しさん[sage]   投稿日:2015/11/19 14:25:14  ID:zQxckC7S.net(2)
F#とC#のような言語非依存のモジュールシステムがあったらいいね

727
デフォルトの名無しさん[sage]   投稿日:2015/11/19 17:36:15  ID:vkUnAwZU.net
C言語出来るだけの素人がhaskell修めるまでどんくらい時間かかりますか?

728
デフォルトの名無しさん[sage]   投稿日:2015/11/19 20:54:12  ID:0e/5E7Hf.net(3)
修めるだけならチュートリアル読むだけなんだからまったく時間かからんだろ。
マスターする、という意味なら一般にそんな時間の見積もりは不可能だろ。
コメント1件

729
デフォルトの名無しさん[sage]   投稿日:2015/11/19 22:18:31  ID:sCZhhvVw.net(2)
>719 >728
もっとちゃんと答えられんのか
コメント2件

730
デフォルトの名無しさん[sage]   投稿日:2015/11/19 22:33:37  ID:0e/5E7Hf.net(3)
>729
「ちゃんと」答えてるじゃないか。
むしろ根拠もないのにこれ以上に具体的な答えを返す方がおかしいわ。
コメント1件

731
デフォルトの名無しさん[sage]   投稿日:2015/11/19 23:05:29  ID:sCZhhvVw.net(2)
>730
それは無能ってことよ
コメント2件

732
デフォルトの名無しさん[sage]   投稿日:2015/11/19 23:06:28  ID:NCXIzrQp.net
有能なら未来予測ができるのか

733
デフォルトの名無しさん[sage]   投稿日:2015/11/19 23:15:10  ID:uB3RBNvP.net
>729
きみ、このスレに頻繁に書き込んでるけど、なんでHaskellに執着してるの?

親でも殺されたの?

734
デフォルトの名無しさん[sage]   投稿日:2015/11/19 23:15:42  ID:0e/5E7Hf.net(3)
>731
はいはい。お前さんが答えてやりゃよかろ。無能じゃないんだったらな。

735
デフォルトの名無しさん[sage]   投稿日:2015/11/20 17:56:29  ID:hD02raLH.net
haskellでnumpyのようなライブラリーありますか?
コメント1件

736
デフォルトの名無しさん[sage]   投稿日:2015/11/20 19:48:44  ID:Ub4YKJzu.net
>731
あれ、返事待ってたんだけどな…
ほらー有能なんでしょ君? 早く答えてくれないと!
かなり待ってるんだけどなぁ。俺が
死ぬまでにちゃんと答えてくれるんだよね?
ねー早くスマートでクールな答えをよろしく頼むよ!

737
デフォルトの名無しさん[sage]   投稿日:2015/11/21 11:05:00  ID:74J1zl0I.net
Jカーブ底打ってからあと2年

738
デフォルトの名無しさん[sage]   投稿日:2015/11/22 13:17:23  ID:lKqXG5SA.net
>735
bindings-gsl じゃだめですか

739
デフォルトの名無しさん[sage]   投稿日:2015/11/25 00:31:18  ID:4BagtNs6.net
semantic versioningを厳密に順守するパッケージ間なら、ビルド後の依存関係を緩くしても良さそうなもんだけどな。
base_foo-1.0.0を利用するプログラムは、base_fooがsemantic versioningを満たす限り、
base_fooのバージョンが2未満ならバイナリレベルで互換性があると言えるはず。

740
デフォルトの名無しさん[sage]   投稿日:2015/11/25 00:46:08  ID:mSSfxExm.net
厳密に維持しているかどうかってのはどう判断するんや。
維持しているつもりが維持できてないってこともよくある話で、
そんなのをアテにするのが土台無理なんだってば。

741
デフォルトの名無しさん[sage]   投稿日:2015/11/25 00:54:14  ID:tNxrewhG.net
semanticsとなんの関係もないのになんでsemantic versioningっていうんだろう

742
デフォルトの名無しさん[sage]   投稿日:2015/11/25 21:52:40  ID:8QEKlgDl.net
ソースの意味が分かってないと順守できないし順守されているかどうか判断できないから

743
デフォルトの名無しさん[sage]   投稿日:2015/11/26 00:48:29  ID:EiQ95VPh.net
パッケージのインストールってなんでファイルを置くだけでOKにできないの
コメント1件

744
デフォルトの名無しさん[sage]   投稿日:2015/11/26 23:00:17  ID:caXSzhxT.net
>743
?どういう意味だろう

745
デフォルトの名無しさん[sage]   投稿日:2015/11/27 20:05:24  ID:eLJXztJb.net
Ambiguous!

746
デフォルトの名無しさん[sage]   投稿日:2015/11/28 11:22:10  ID:ADrw5NIB.net
諸君、議論したまえ
コメント1件

747
デフォルトの名無しさん[sage]   投稿日:2015/11/29 09:37:17  ID:9VwKMKnd.net
>746
またおまえか

748
デフォルトの名無しさん[sage]   投稿日:2015/11/29 10:55:13  ID:DI7OadCE.net
conduit と persist を連携させ、例えば上流から String 型のデータを受けて、
「persistを使って」データベースへデータを挿入する Sink を作るとする。
次のようにコネクションプールを使って簡単な例を作ってみたんだが、
この方法はやっぱりスジが悪いかな?
連携方法について他に良い案があれば教えてほしい。

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Ingredient
 name String
|]

sinkInsertion :: Sink String (ResourceT IO) ()
sinkInsertion = bracketP createPool deletePool insertRecord

createPool :: IO ConnectionPool
createPool = runNoLoggingT $ createMySQLPool 省略 1

deletePool :: ConnectionPool -> IO ()
deletePool = destroyAllResources

insertRecord :: ConnectionPool -> Sink String (ResourceT IO) ()
insertRecord pool = do
 liftIO $ runResourceT $ runSqlPool (runMigration migrateAll) pool
 let loop = do
    mname <- await
    case mname of
     Nothing -> return ()
     Just name -> (liftIO $ runResourceT $ runSqlPool (insert_ (Ingredient name)) pool) >> loop
 loop

main = runResourceT $ sourceList ["nasu", "tomato"] $$ sinkInsertion
コメント1件

749
デフォルトの名無しさん[sage]   投稿日:2015/12/01 00:26:02  ID:XiHhDJLB.net
template haskell つかってるひとはじめてみた

750
デフォルトの名無しさん[sage]   投稿日:2015/12/01 10:17:37  ID:pLCJABYC.net
そんなこというひとはじめてみた
実用だと使うよね?yesod某とかfile-embedとか

>748
むしろpersistとconduitの連携とか勉強になった
すっきりしていいと思う

751
デフォルトの名無しさん[sage]   投稿日:2015/12/02 02:05:09  ID:sE+ivAhG.net(2)
file-embedは便利だけどyesodとかhakyllとかそんな使うかなあ。
まあでもlensでお目にかかってるはずだとは思うけど。

752
デフォルトの名無しさん[sage]   投稿日:2015/12/02 12:18:37  ID:8wtTORdb.net
lens はいろんなチュートリアルみてもなにやってるか
わからなくて使ってない

753
デフォルトの名無しさん[sage]   投稿日:2015/12/02 17:37:47  ID:PbTtaUvu.net
Haskellをベースに創られたElmとかいうAltJS言語の話題はここでいいですか?

754
デフォルトの名無しさん[sage]   投稿日:2015/12/02 22:51:45  ID:sE+ivAhG.net(2)
簡単な文法の話以外ならElmスレ立てたほうがいいと思う

755
デフォルトの名無しさん[]   投稿日:2015/12/04 22:59:21  ID:Jt34pK2I.net
>713
これ読んでみるわ、サンキューモッギ

756
デフォルトの名無しさん[sage]   投稿日:2015/12/05 15:12:50  ID:r040mJaZ.net(3)
Monadクラスの中で特に汎用性の高いインスタンスを一つ選び
そのインスタンスだけでほぼ何でもできる、という方向に行かないのは何故なのかな
そうすれば苦労してMonadクラスを理解する必要もなくなるのに
コメント2件

757
592[sage]   投稿日:2015/12/05 17:54:28  ID:e0mSV6nD.net(2)
>756
きみがMonadクラスを理解するのに苦労した原因は
それぞれのインスタンスが個々の機能に特化ているからなの?

インスタンスが特化しているとクラスが理解しにくいのは何で?

意味が分からん

758
デフォルトの名無しさん[sage]   投稿日:2015/12/05 19:18:42  ID:r040mJaZ.net(3)
特化しすぎたら価値を理解するのに苦労するのは当たり前じゃないか
例えばアフリカのある国でしか使えない通貨とか
コメント1件

759
592[sage]   投稿日:2015/12/05 20:10:01  ID:e0mSV6nD.net(2)
>758
きみにとってアフリカの通貨(インスタンス)の価値は分からなくても
通貨(クラス)の価値は分かるよね

760
デフォルトの名無しさん[sage]   投稿日:2015/12/05 20:15:13  ID:xnZtirmK.net(2)
モナドは単なる、今のところなかなかの成功を納めているデザインパターンの一つに過ぎないとこのスレで教わった

761
デフォルトの名無しさん[sage]   投稿日:2015/12/05 20:17:20  ID:xnZtirmK.net(2)
あと、月を指せば指を認むって諺をさっきTwitterから学んだ

762
デフォルトの名無しさん[sage]   投稿日:2015/12/05 21:06:41  ID:GqrmhMyi.net
>756
>Monadクラスの中で特に汎用性の高いインスタンスを一つ選び
>そのインスタンスだけでほぼ何でもできる、という方向に行かないのは何故なのかな

なんでわざわざそんなモジュール性がクソになるようなことしなきゃいかんのw
コメント1件

763
デフォルトの名無しさん[sage]   投稿日:2015/12/05 21:17:53  ID:fWHJ2v3J.net
So you can think of lists as promises that
the next element will be delivered once it really has to be, and along with
it, the promise of the element after it.
読めないので翻訳お願いします

764
デフォルトの名無しさん[sage]   投稿日:2015/12/05 21:37:47  ID:r040mJaZ.net(3)
>762
特化してもモジュールが単純化される保証はない
ポイントカードのように特化して複雑化したモジュールが大量に作られる可能性がある

765
デフォルトの名無しさん[sage]   投稿日:2015/12/05 22:04:23  ID:/HX/hq4Y.net
promiseを日本語で理解してくると読めるようになると思う

766
761[]   投稿日:2015/12/06 08:58:48  ID:d9uqm994.net
すごいhaskell楽しく学ぼう持ってる人教えてください
205ページに日本語訳が載ってると思います
お願いします

767
デフォルトの名無しさん[sage]   投稿日:2015/12/06 15:02:16  ID:lk97yytv.net
モナド則をチェックする機能はなぜ作れないのか
コメント1件

768
デフォルトの名無しさん[sage]   投稿日:2015/12/06 15:05:47  ID:B69NHvUF.net
>767
一般に与えられた2つの値の等価性を決定する手段がないから(たとえば関数)

769
デフォルトの名無しさん[sage]   投稿日:2015/12/06 15:16:43  ID:43TPMysj.net(2)
そういうのはチェックではなく証明しないとだめだ。もちろんその証明は人間が書くのだが。

770
デフォルトの名無しさん[sage]   投稿日:2015/12/06 16:24:47  ID:rl6X8EeV.net
既存のインスタンスは証明済みだよな
既存のに制約を加えただけのインスタンスも証明不要

771
デフォルトの名無しさん[sage]   投稿日:2015/12/06 19:05:15  ID:43TPMysj.net(2)
mtlのListTがモナドではないと気付かれるまでに少し掛かったので油断は禁物だ

772
デフォルトの名無しさん[sage]   投稿日:2015/12/09 16:23:41  ID:KCuPtV0t.net
なんだと? 発案者は何らかの責任を取ったのか?
コメント1件

773
デフォルトの名無しさん[sage]   投稿日:2015/12/10 10:04:31  ID:be8IS9Hr.net
GHC 7.10.3 リリースおめ
[ANNOUNCE] Glasgow Haskell Compiler version 7.10.3
https://mail.haskell.org/pipermail/ghc-devs/2015-December/010736.html

次は 8.0.1?

774
デフォルトの名無しさん[sage]   投稿日:2015/12/10 10:15:13  ID:qPm1t7ac.net
>772
Cのクソ品質の乱数だって誰も責任とっとらんがな

775
デフォルトの名無しさん[sage]   投稿日:2015/12/10 10:39:08  ID:bjguJgYh.net
returnの命名者誰なんだろ

776
デフォルトの名無しさん[sage]   投稿日:2015/12/10 11:53:32  ID:b8dKvTYk.net
たとえば「絶対に儲かる」乱数だとか品質に言及していたら責任問題になるだろうが
作者が何も言ってない値札もついてないものは質が低くても別にいいんじゃないか

777
デフォルトの名無しさん[sage]   投稿日:2015/12/10 15:50:49  ID:C4TvgIE0.net(2)
名前なんて適当に別名つけたったらええやん。

778
デフォルトの名無しさん[sage]   投稿日:2015/12/10 17:03:21  ID:HOydu8dt.net
標準を軽視すれば他人に読みにくい糞コードの濫発を招くのではないか

779
デフォルトの名無しさん[sage]   投稿日:2015/12/10 17:11:09  ID:C4TvgIE0.net(2)
Haskell のコードなんて言語内 DSL の乱発じゃん。 別名くらいイマサラ
コメント1件

780
デフォルトの名無しさん[sage]   投稿日:2015/12/10 19:10:58  ID:97YX12O0.net
不満があるなら自分で言語を作ればいい
それもできないなら黙ってる事をお勧めする

781
デフォルトの名無しさん[sage]   投稿日:2015/12/10 19:37:06  ID:pF20NpG5.net
>779
それは言い得て妙だな。俺も使わせてもらおう。

782
デフォルトの名無しさん[sage]   投稿日:2015/12/10 20:07:15  ID:HRHtpj0X.net
本当の初心者には

IOモナドは型を合わせるパズルさえ解けたらそのご褒美に
純粋性を保ちながら入出力を許してくれる仕組みだと思え

って言ってる。
合わせ慣れるとほっといても意味がわかってくるんだよね
コメント1件

783
デフォルトの名無しさん[sage]   投稿日:2015/12/10 20:22:42  ID:IZmXUGd+.net
近くにHaskellに興味を持ってくれる初心者がいるなんて羨ましい

784
デフォルトの名無しさん[sage]   投稿日:2015/12/10 22:44:48  ID:KZYbcLbE.net
>782
どうも理解が全く違ったようだな。撤回するわ。やめとく。

785
デフォルトの名無しさん[sage]   投稿日:2015/12/11 10:18:36  ID:r5Q1R4hd.net
ハスケルって白鳥になりたいペンギンみたいな言語だな
コメント1件

786
デフォルトの名無しさん[sage]   投稿日:2015/12/11 19:58:31  ID:sot30U5t.net
Haskellは、海底から見上げたらペンギンも飛べることになるって言語
コメント2件

787
デフォルトの名無しさん[sage]   投稿日:2015/12/11 22:20:30  ID:85l8vb8h.net
Haskellを何かに例える奴はろくにHaskell使ってないだろw

788
デフォルトの名無しさん[sage]   投稿日:2015/12/11 22:24:19  ID:GOodMDFm.net
初心者に分かりやすい例えと熟練者に分かりやすい例えは違うし

789
デフォルトの名無しさん[sage]   投稿日:2015/12/12 13:37:18  ID:ujGm9ePq.net
>785
>786
これらの喩えは初心者に分かりやすいのですか?
それとも熟練者に分かりやすいのですか?

私には意味が分からないです。
コメント1件

790
デフォルトの名無しさん[sage]   投稿日:2015/12/13 00:08:50  ID:3pFOKkOt.net
>789
間を取って初心者にも熟練者にも意味不明な喩えにしてみました。
どちらにも「同じくらい」納得していただくことを目指した結果なので
何卒ご了承ください。

791
デフォルトの名無しさん[sage]   投稿日:2015/12/13 11:41:19  ID:Osvw0E0t.net
例え話の目的は、元ネタを知ってる奴なら言わなくても分かることを省略することだな
省略しても何も分かりやすくならない
ただ短くなるだけ

792
デフォルトの名無しさん[sage]   投稿日:2015/12/15 13:09:03  ID:iFi41cde.net
haskell勉強中です
H本にfoldlが無限リストに対して動作しないと書いてあるのですがfoldrで扱えてfoldlで扱えないとはどういうことですか
コメント1件

793
デフォルトの名無しさん[sage]   投稿日:2015/12/15 13:16:24  ID:sAET7hcQ.net
後のページを読めばわかるようになる
コメント1件

794
デフォルトの名無しさん[sage]   投稿日:2015/12/15 15:12:58  ID:HsnKelNC.net
>792
遅延評価だから

795
デフォルトの名無しさん[sage]   投稿日:2015/12/15 18:57:39  ID:QE2M/7jx.net
读书百遍、其意自见。

796
デフォルトの名無しさん[sage]   投稿日:2015/12/15 20:24:17  ID:lBHgLkLX.net
>793-794
続き読みました
foldl(&&)True(repeat False)だと((&&) ((&&) ((&&) True False)False)False)のように展開され、
foldr(&&)True(repeat False)だと((&&)False ((&&)False ((&&) False True)))のように展開されるので
(&&)の実装通り、"False _ = False"ということでfoldrではFalseが得られるということでした
頭から適用するかケツから適用するかで展開方法が違うからこんなことになってるんですね
ありがとうございました。

797
デフォルトの名無しさん[sage]   投稿日:2015/12/15 21:33:39  ID:X5Kj7v40.net
「選択と集中」で原発事業に盛大にぶっこんだ挙句不運にも
原発事故の風評被害wをうけて業績超悪化したのを「チャレンジ」で
切り抜けようとしてドブに沈んでいるけど、ハイリスク・ハイリターンてのは
そういうことだよね。

おつかれさん

798
デフォルトの名無しさん[]   投稿日:2015/12/18 23:30:03  ID:CNI5JGVG.net

799
デフォルトの名無しさん[sage]   投稿日:2015/12/19 08:03:47  ID:ZJ0XzZ1Z.net
すごいわかりにくいが、型に集中して値のことを忘れるって話をしてるんだよな
静的型でリスクが減ることはあっても増えることはないってのは本当か?という話

800
デフォルトの名無しさん[sage]   投稿日:2015/12/19 18:37:13  ID:154W1WqL.net
金が遊んでたのでゲームを買う代わりに型システム入門 −プログラミング言語と型の理論−

を買ってみたのですが、これ読むとHaskell力増しますかね?
コメント3件

801
デフォルトの名無しさん[sage]   投稿日:2015/12/19 18:55:01  ID:+WfqJ81y.net
>800
Haskell力の低い人と高い人で決定的に違うのは何でしょうか。
コメント1件

802
デフォルトの名無しさん[sage]   投稿日:2015/12/20 00:59:06  ID:nJz8/sCp.net
動的型で嬉しいことがあるとすれば(返り値の?)型の違う関数を許す事になるが果たして…

803
デフォルトの名無しさん[sage]   投稿日:2015/12/20 01:13:13  ID:AMk4fv31.net
コード弄りながら設計を考えていくタイプの物は動的型の方が楽かな

804
デフォルトの名無しさん[sage]   投稿日:2015/12/20 03:44:49  ID:PpeZ7QXn.net
>801
Haskell力が低い人
「読んだ方が良いか?」

Haskell力が高い人
「『ママッ子』なんだよ>800
 ビビったんだ…。甘ったれてんだ! わかるか? え?オレの言ってる事。
 『型』のせいじゃあねえ。心の奥のところでオメーにはビビリがあんだよ!
 オレたち強いHaskellerはな!
 そこら辺のナンパJavascripterや仲よしクラブで『読んだ方が良いか?』『読んだ方が良いか?』
 って訊いて回って仲間と心をなぐさめあってるような負け犬どもとはわけが違うんだからな。
『読んだ方が良いか?』…そんな言葉は使う必要がねーんだ。
 なぜならオレや、オレたちの仲間はその言葉を頭に思い浮かべた時には!
 実際に本を読んじまってもうすでに 終わってるからだッ!
 だから 使った事がねェ〜〜〜ッ。
 >800
 オマエもそうなるよなァ〜〜〜〜〜〜〜〜
 オレたちの仲間なら…わかるか? オレの言ってる事… え?
『読み終わった』なら 使ってもいいッ!」
コメント1件

805
デフォルトの名無しさん[sage]   投稿日:2015/12/20 12:57:25  ID:NTC3UnWc.net
>804
ほんこれ

806
デフォルトの名無しさん[sage]   投稿日:2015/12/21 08:53:41  ID:p6vwDy5Q.net
bottomって何だお

807
デフォルトの名無しさん[sage]   投稿日:2015/12/21 13:59:05  ID:UYX3g1H/.net
あらゆる部分関数を全関数にするための魔法のこと

808
デフォルトの名無しさん[sage]   投稿日:2015/12/21 15:13:18  ID:Nh3sqEqI.net
和の単位元bottom
積の単位元unit

809
デフォルトの名無しさん[]   投稿日:2015/12/21 21:20:25  ID:p/vkOJl0.net(2)
C から int 型の配列を Haskell に渡して
たとえば Haskell ですべての要素に 1 を足して
足された配列を C に返すってのをやりたいんだけど
いいサンプル知らない?

配列じゃなくて単独の int とか double とかはできるんだけどな
コメント1件

810
デフォルトの名無しさん[sage]   投稿日:2015/12/21 21:48:27  ID:ppP3iBcM.net
Cでやればよくない?

811
デフォルトの名無しさん[sage]   投稿日:2015/12/21 22:48:06  ID:p/vkOJl0.net(2)
そりゃ業務だったらそうするけどさ

できたら楽しいなって、それだけだよ

812
デフォルトの名無しさん[sage]   投稿日:2015/12/22 21:04:57  ID:RcXN8h3P.net
>809
FFIしたいということですか
コメント1件

813
デフォルトの名無しさん[sage]   投稿日:2015/12/22 22:08:30  ID:JyKdzAuM.net
本物のプログラマはHaskellを使う 日経ソフトウエア
第58回 Cの配列をHaskellで利用する 2013/08/07
http://itpro.nikkeibp.co.jp/article/COLUMN/20130806/496825/
コメント1件

814
デフォルトの名無しさん[sage]   投稿日:2015/12/22 22:44:22  ID:rB+vmYEN.net
>812
そういうことですね

>813
情報ありがとうです

とりあえず力技ではできたけど、あんまりスマートじゃないなー
俺の Haskell レベルだと、どうやってリストにすればいいか解らないw
http://pastebin.com/v9q509Pr

815
デフォルトの名無しさん[sage]   投稿日:2015/12/23 15:44:56  ID:2+dP2nJG.net(2)
ghc 7.10.3 の ghci 上での :sprint について

Prelude> let x = 1
Prelude> :sprint x
x = _
Prelude> x
1
Prelude> :sprint x
x = _

こうなるんだが、これが正常なの?
最後、x = 1 と表示されるのを期待したんだが。
コメント1件

816
デフォルトの名無しさん[sage]   投稿日:2015/12/23 20:34:05  ID:ar8RTNkN.net

817
デフォルトの名無しさん[sage]   投稿日:2015/12/23 20:49:10  ID:2+dP2nJG.net(2)
>816
なるほど

ありがと、助かったよ

818
はちみつ餃子 ◆8X2XSCHEME [sage]   投稿日:2015/12/24 02:55:04  ID:HopzupNL.net
>786
どこかで見たネタだと思ったらゆゆ式だった。

819
デフォルトの名無しさん[sage]   投稿日:2015/12/29 00:17:50  ID:9ZoBZ5vT.net
諸君、議論したまえ。
コメント1件

820
デフォルトの名無しさん[sage]   投稿日:2015/12/29 10:01:45  ID:RBH4v58J.net
>819
すっこんでろ

821
デフォルトの名無しさん[sage]   投稿日:2015/12/29 10:07:19  ID:zZSzcFIy.net(4)
H本でbracketOnErrorのとこまで読みました。
bracketとbracketOnErrorの使い分けどうやってますか?
onerrorの方が効率は良さそうですが。
コメント2件

822
デフォルトの名無しさん[sage]   投稿日:2015/12/29 10:39:50  ID:xUoFMoAl.net(3)
H本なんて固有名詞ネーヨカス
コメント2件

823
デフォルトの名無しさん[sage]   投稿日:2015/12/29 11:02:31  ID:zZSzcFIy.net(4)
>822
あなたがわからないだけでしょ

824
デフォルトの名無しさん[sage]   投稿日:2015/12/29 11:05:25  ID:xUoFMoAl.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する
コメント1件

825
デフォルトの名無しさん[sage]   投稿日:2015/12/29 11:21:31  ID:zZSzcFIy.net(4)
健全でない言葉が含まれているため表示しません 内容を確認する

826
デフォルトの名無しさん[sage]   投稿日:2015/12/29 11:24:08  ID:xUoFMoAl.net(3)
健全でない言葉が含まれているため表示しません 内容を確認する

827
デフォルトの名無しさん[sage]   投稿日:2015/12/29 11:39:12  ID:X0OP3kiA.net(2)
>821
その本でどのように説明されているのか私は知りませんので、
的外れなレスでしたらごめんなさい。

bracket と bracketOnError はそもそも役割が異なり、
その処理効率によって比較するものではありません。

bracket は第3引数のIOアクションの実行時に例外が発生しようがしまいが、
第2引数のIOアクションは実行されます。

一方、bracketOnError は第3引数のIOアクション実行時に例外が発生した場合のみ、
第2引数のIOアクションが実行されます。
(どちらの説明もライブラリドキュメントに書かれています)

なので、確保したリソースの第3引数のIOアクション後の解放を保証したいのならば、
bracketOnError は使えません。
例外が発生しなければ第2引数のIOアクションは実行されないので。


ちなみに、この2つの関数、中身はほとんど同じです。
http://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Exception.h...
ここの各関数のシグネチャの右端にソースへのリンク(Sourse)があるので、見てみてください。
どうでしょう、効率に差があるように見えるでしょうか。
コメント3件

828
デフォルトの名無しさん[sage]   投稿日:2015/12/29 12:10:34  ID:zZSzcFIy.net(4)
>827
ありがとうございます。
すみません。まだ初歩の学習中でbracketのソースは読めそうにないです…
bracketOnErrorでも第三引数に第二引数と同等のリソース開放のコードを書くことでこの2つの関数は代替可能だと思ったのですが間違っているでしょうか?
onerrorの方が効率が良いと思ったのは例外が発生しない場合第二引数の関数を呼び出すコストがかからないからと考えましたが大したコストじゃなさそうですね
コメント1件

829
デフォルトの名無しさん[sage]   投稿日:2015/12/29 13:40:10  ID:X0OP3kiA.net(2)
>828
たしかに bracketOnError の第2引数は、第3引数で例外が発生しない限り実行されません。
その意味では「例外の無い通常運転では第2引数を実行するコストはかからない」のでその分効率的でしょうね。

ただ問題は、そのような処理の流れで本当に大丈夫なの? と言うことです。
あなたが実現させたい処理の流れに合っているかどうか、それが最も大事です。
bracket と bracketOnError のどちらを使っても実現させたい処理に適合するのなら、
より効率的な方を選ぶのも手です(効率の他に、ソースがより読みやすい方を選ぶのも手)。

効率よりもまずは合っているかどうかを考えた方が良いと思います。
>827 で「役割が違う、効率で比較するものではない」と言ったのはそういう意味です。
合わないものを工夫して合わせるのはバグの元なので、
そういう工夫はそれしか手段がない場合のみやるべきだと私は思います。

もし bracketOnError の第3引数にリソース解法処理を「必ず行うように」書くのなら、
あなたがメリットだと感じている「例外がなければ第2引数を実行するコストがかからない」
というのは無くなり、処理的には bracket と「ほぼ」同等になりますが、
それなら bracket を使うべきだと私は思います。
同じ処理を実現するなら、手間がかかる bracketOnError より楽に bracket です。
コメント2件

830
デフォルトの名無しさん[sage]   投稿日:2015/12/30 04:17:15  ID:P/Z2Dori.net
bracketOnError の第一引数が例外となったらどうなりますか?

bracket AB共通後始末 $ bracketOnError planBwith後始末forB\AB共通後始末 planAwith後始末forA\AB共通後始末
こう書けばいいです?
コメント2件

831
デフォルトの名無しさん[sage]   投稿日:2015/12/30 12:39:36  ID:5ugZQDQL.net
教えて君にエサをやるからこうなる。 だからあれほどスルーといったのにな。

832
デフォルトの名無しさん[sage]   投稿日:2015/12/30 17:44:17  ID:SM7sbKvE.net
>830
bracketOnError の第1引数で例外が発生すれば、
その例外はそのまま bracketOnError の外に伝わります。

このことは、>827 で挙げたソースが読めなくても、
自分で実験して確認できます。
実際に第1引数で適当なが例外を発生させてみれば良いです。

「こう書けばいいです?」の部分は何を言いたいのかよく分かりません。
まずは落ち着いてください。
全角のバックスラッシュは何を意味するのわかりませんし、
そもそも btrcket や bracketInError の第1引数は第3引数よりも先に実行されます。
そこに後始末処理を書いてはいけません。

何を言いたいのかは分かりませんが、しかしこれも実験で簡単に確認できるはずです。
どちらの関数も引数はすべて IO モナドなので、print を適当に挟んで実行順などを調べられます。

質問の前に、まずは自分でやってみてください。

833
デフォルトの名無しさん[826]   投稿日:2015/12/31 07:48:53  ID:qqIJWikB.net
>829
結論としてbracketOnErrorとbracketは代替可能ですよね。

ちなみ>830は私じゃないのでw
コメント2件

834
デフォルトの名無しさん[sage]   投稿日:2015/12/31 10:26:45  ID:W7OP38Mu.net(2)
>833
おそらく、あなたの期待している処理に関してだけ言えば、両者は代替可能だと言ってしまっても、
実用上それほど間違っていはないと思われます。

歯切れが悪い言い方で申し訳ないです。
というのも、正確に言えば両者は代替できない(と思う)からです。
>829 でも同等性に関して「ほぼ」と断りました。

私が今ぱっと思いつく限りでは2つの異なる点があります。

ひとつは、bracketOnError の第3引数に(わざわざ)書いた開放処理の中で例外が起きれば、
その時点で bracketOnError の第2引数が実行されます。
第2引数でも開放処理が書かれていれば中途半端に二重に実行されます。
どう代替しますか?

もうひとつは外部例外への対処の仕方です(以後、簡単のため正確さは犠牲にします)。

両者の第1引数と第2引数では、外部例外がマスクされます。
一方、第3引数では外部例外のマスクが一時的に開放されます。
外部例外というのは他スレッドから現スレッドに投げられる例外の事だと今は思ってください。
これがマスクされているという事は、外部例外が投げられても処理を最後までやり切る、という事です。

したがって、bracket の第2引数に書いた開放処理と、bracketOnError の第3引数に書いた開放処理は、
外部例外への対応という点に関して異なります。
mask_ という関数を使って外部例外をマスクできますが、それで開放処理を書くのなら、
もうほとんど bracket の第2引数で開放処理を書くのと同義で、代替できると呼べるかどうか。


そもそも、代替できるかどうかに拘る理由が分かりません。
普通、bracketOnError を見たプログラマは、例外が発生しなければ第2引数は実行されない、
という前提でプログラムソースを読むはずです(ドキュメントにそう書かれているので)。
なので、第3引数に開放処理が書かれていれば混乱を生むだけだと思うのですが・・・
コメント1件

835
デフォルトの名無しさん[sage]   投稿日:2015/12/31 10:32:03  ID:W7OP38Mu.net(2)
>833
すいません、>834 で外部例外と言いましたが、言葉が間違っていました。

正しくは「非同期例外」です。

836
デフォルトの名無しさん[sage]   投稿日:2016/01/02 10:40:11  ID:GEI8yUNi.net(4)
persistent-sqlite パッケージの接続用関数のどれを使っても、
データベース名にURIが使えないんだが、なんで?

たとえば、withSqliteConn "file:test.db?mode=memory" とやっても、
この名前そのままのファイルがカレントディレクトリに作られてしまう。
withSqliteConn "file:///tmp/test.db" とやったらオープンできないと言われる。

ちなみに、sqlite-simple パッケージの接続用関数を試してみたら、
こちらではちゃんと前者はインメモリで名前付きデータベースが作られたし、
後者もちゃんと /tmp/test.db が作られた。

これは、persistent-sqlite パッケージのバグか仕様? それとも俺のやり方が悪い?

[環境]
OS : ArchLinux
ghc : 7.10.3
persistent-sqlite-2.2

837
デフォルトの名無しさん[sage]   投稿日:2016/01/02 13:02:28  ID:qABI05dX.net(2)
質問の仕方が悪い
バグだからお前は悪くないか、仕様だからお前が悪いの二択

838
デフォルトの名無しさん[sage]   投稿日:2016/01/02 14:01:08  ID:yZAYApNA.net
これが関数型界隈の人間は冷たいの正体か…
コメント1件

839
デフォルトの名無しさん[sage]   投稿日:2016/01/02 14:10:02  ID:3O/U03ws.net(2)
「名前そのままのファイル」が作られるんだから仕様だろ
URIを解釈せずにそのままファイル名にする、というのは
きちんと意味のある方針
コメント1件

840
デフォルトの名無しさん[sage]   投稿日:2016/01/02 14:32:31  ID:GEI8yUNi.net(4)
Sqliteの仕様としてURIが使え、インメモリで名前が使えるよ。
SqliteのC言語ライブラリでも、それをラップした他言語ライブラリでも、
Haskell の sqluie-simple でも問題なく仕様通りの使い方ができる。

だから、persistent-sqlite で使えないのが不思議なんだよ。

で、単に persistent-sqlite のバグなのか、
このライブラリに限りSqliteの仕様に反することが明文化されているのか、
それとも俺の使い方が悪い(どこかで設定できる?)のか、
と質問したんだが、どうだろうか。


>839
それがドキュメントに書かれていれば、なるほどと思う。
一応俺なりにドキュメントを精読したつもりなんだが、見当たらない。

841
デフォルトの名無しさん[sage]   投稿日:2016/01/02 14:47:45  ID:Z1J/2moe.net
関数型の切り口で語る奴はだいたいKだと思ってる

842
デフォルトの名無しさん[sage]   投稿日:2016/01/02 15:28:52  ID:3O/U03ws.net(2)
そもそもDatabase.Persist.Sql (withSqlConn) がそういう動作をする

persistentのバックエンドのひとつとしてsqliteが使えるというだけで、
sqliteの機能をまるのまま提供する義理があるわけじゃないからな
sqlite特有の仕様は全部切り捨ててるんじゃね

843
デフォルトの名無しさん[sage]   投稿日:2016/01/02 15:48:49  ID:GEI8yUNi.net(4)
じゃあ、Sqlite の大きな特徴のひとつであるインメモリはなんで使えるんだ?

withSqliteConn ":memory:" は普通に使えてるんだが。

844
デフォルトの名無しさん[sage]   投稿日:2016/01/02 15:51:15  ID:uD+WV8wT.net
毛の壁うざいな

845
デフォルトの名無しさん[sage]   投稿日:2016/01/02 16:02:15  ID:QMorx62m.net
もうブームは去った感じだけど、まだ元気にどこかで妄言吐き散らかしてるんだろうか

846
デフォルトの名無しさん[sage]   投稿日:2016/01/02 17:45:42  ID:qABI05dX.net(2)
>838
これ質問されてんじゃなくてURI使わせろって命令されてるだけだから
命令を無視されても冷たいとはいえない

847
デフォルトの名無しさん[sage]   投稿日:2016/01/02 23:33:46  ID:GEI8yUNi.net(4)
誰も知らないようだから、GitHub yessodweb/persistent の issues にあげてみるよ。

848
デフォルトの名無しさん[sage]   投稿日:2016/01/03 18:32:26  ID:6l5P920y.net(2)
C言語ライブラリでも the URI filename capability is disabled by default
って書いてあるね
コメント1件

849
デフォルトの名無しさん[sage]   投稿日:2016/01/03 20:43:59  ID:LkkfiKGZ.net
>848
そう、俺も GitHub の issues に投稿してから気づいた。
自分で Sqlite のサイトのリンクまで載せておきながらね。

すぐにゴメンナサイをしたけど、かなり恥ずかしいヤツになってしまった。
みんなにもゴメン、完全に俺の早とちりだった。

ただ、URI解釈機能の追加には作者も乗ってくれたみたい。

850
デフォルトの名無しさん[sage]   投稿日:2016/01/03 20:52:19  ID:6l5P920y.net(2)
sqlite-simple は direct-sqlite に依存する
direct-sqlite.cabal の cc-options の所には -DSQLITE_USE_URI と書いてある

persistent-sqlite.cabal の cc-options にはそれがない

851
デフォルトの名無しさん[sage]   投稿日:2016/01/04 01:57:02  ID:sSvUYJHW.net(2)
年始早々お邪魔します。
stylish haskellをインストールしてみたのですが
IDEの表示動作には何ら変化が無く
これを導入する事によって何が嬉しいのか解りません。
もし解説してるサイト等を知ってましたら教えて下さい。
コメント2件

852
デフォルトの名無しさん[sage]   投稿日:2016/01/04 13:18:37  ID:FL15/iqU.net
cabal test の結果を色分け表示するツールって無いかな?

853
デフォルトの名無しさん[sage]   投稿日:2016/01/04 19:09:54  ID:26vt+6G2.net
>851
前Vimから使ってたけど単なるコードの整形ツールだよ?そういうことではなく?

854
849[sage]   投稿日:2016/01/04 22:46:13  ID:sSvUYJHW.net(2)
>851
ありがとうございます。
単なるコードの整形ツールねのですね。
ハスケルはlet式の中で改行された名前の先頭位置によって
鰓が出たりするので重宝できるかもしれません。

855
デフォルトの名無しさん[sage]   投稿日:2016/01/05 01:43:11  ID:e1QBvQbc.net(3)
使い方どころか何のためのツールかも知らないでインストールしたのか
このスレに質問しにくる奴は総じてどこかおかしいな
まあ、まともな人間ならStack OverflowやTwitterで答えてもらってるからそれもそうか

856
デフォルトの名無しさん[sage]   投稿日:2016/01/05 05:45:19  ID:cUqgoqn1.net
総じてどこかおかしい奴用Haskell質問スレ設立の機運が高まる

857
デフォルトの名無しさん[sage]   投稿日:2016/01/05 08:41:47  ID:ikPXVG/Y.net
総じてっていうか英語読めない/読まない人たちだな

858
デフォルトの名無しさん[sage]   投稿日:2016/01/05 08:45:29  ID:DJzEWfiC.net
2chに書けばお人好しが教えてくれると思っている

859
デフォルトの名無しさん[sage]   投稿日:2016/01/05 09:27:48  ID:YDRwEOS9.net
ていうか、おかしいと批判することと隔離することを混同するなよ
批判は自由だが、隔離は自由ではないぞ

860
デフォルトの名無しさん[sage]   投稿日:2016/01/05 09:51:31  ID:tl8m+k9c.net
『ママッ子(マンモーニ)』なんだよペッシ!
 ビビったんだ…。甘ったれてんだ! わかるか? え?オレの言ってる事。

861
デフォルトの名無しさん[sage]   投稿日:2016/01/05 11:57:12  ID:4ajyxAFr.net(3)
口語的に書かれても意味が分かりかねますので
もう一度正しい文章構成で書いてもらえますか
コメント1件

862
デフォルトの名無しさん[sage]   投稿日:2016/01/05 17:46:40  ID:e1QBvQbc.net(3)
>861
意思疎通する気があるなら安価ぐらい付けたらどうかな
コメント1件

863
デフォルトの名無しさん[sage]   投稿日:2016/01/05 18:05:51  ID:4ajyxAFr.net(3)
>862
意思疎通する気は全くありませんでした
謹んでお詫び申し上げます
コメント1件

864
デフォルトの名無しさん[sage]   投稿日:2016/01/05 19:32:18  ID:e1QBvQbc.net(3)
>863
年始早々お邪魔しにきたわけだ、なるほど
コメント1件

865
デフォルトの名無しさん[sage]   投稿日:2016/01/05 20:11:41  ID:55Fn/q1S.net
『話せば分かる』なんて大ウソ!
正解は『離せば分かつ』
毛の壁

朦朧健

866
デフォルトの名無しさん[sage]   投稿日:2016/01/05 21:26:43  ID:4ajyxAFr.net(3)
>864
こちらの意図も伝わっていなかったようですが
それも含めて意思疎通する気が無い故仕方がないことと考えております
年始の戯れにお付き合いいただきありがとうございます

867
デフォルトの名無しさん[sage]   投稿日:2016/01/05 21:45:24  ID:HIgjIRNU.net
AdventCalender書いてない奴が居るせいでHaskellがランキングから外れてて草
総ストック数はそこそこあったのに

868
デフォルトの名無しさん[sage]   投稿日:2016/01/05 22:44:55  ID:+VJkCmAJ.net
ghc のコンパイルエラーの文って、いつも最初の数行しか役に立たないんだけど、
後ろの方の文が役に立った人っている?

たとえば、適当なファイルに次の2行を書いて、

import Control.Exception
main = try (return 0) >>= print

ghc-7.10.3 でコンパイルすると、エラーが2つ出る。
ひとつは try 関数のところで Exception e0 の e0 の型が曖昧だというエラー。
もうひとつは print のところでその型 e0 が Show のインスタンスではないというエラー。

どちらも、エラーの本質はエラー文の初めの2行で分かる。
その直後の Note: there are several potential instances: の提案が
極希に役立ったことがあったかもしれん。
だけど、最後の In the first argument of ‘(>>=)’, namely ‘try undefined’
の辺りが役に立ったことなんて一度もない。

型が合わないタイプのエラーも同じ。
expected な型と actual な型の情報は重要だけど、残りの情報は役に立たん。

でも、ghc の作者はそういった情報も役に立つと思ってるから出力してるんだと思う。
が、俺にはさっぱりわからん、どういう意図なんだろ。
コメント1件

869
デフォルトの名無しさん[sage]   投稿日:2016/01/06 05:13:36  ID:HV2EpPIp.net
総じてではなく丁寧語で書いてる奴約1名が本当に頭のおかしい奴ってだけだね
>821と同じ奴っぽいけど一瞬でサイコパスだと見ぬいた>822何者なんだ…

870
デフォルトの名無しさん[sage]   投稿日:2016/01/06 07:55:50  ID:GReAeoH6.net
>868
まあとりあえず言葉通りの意味がわかれば十分じゃないか
逆に何を言われても物足りないと思えば、言葉が何の役にも立たないのは当然だ

871
デフォルトの名無しさん[sage]   投稿日:2016/01/09 08:12:25  ID:nN+q48Tl.net
諸君、議論したまえ

872
デフォルトの名無しさん[sage]   投稿日:2016/01/09 09:51:25  ID:j1jPLBvu.net
保守

873
デフォルトの名無しさん[sage]   投稿日:2016/01/09 10:19:50  ID:BmIw5AdJ.net(2)
それはHaskellのコードをまともに書いたことがないからというだけでは……
似たような型の関数を長大に連鎖してる箇所でそれがなかったら手間もいいとこ
コメント1件

874
デフォルトの名無しさん[sage]   投稿日:2016/01/09 10:22:14  ID:BmIw5AdJ.net(2)
あ、しばしば予想外の箇所が示されるってのはあるけどな。
型推論が最終的に失敗した箇所とエンバグした箇所が違うことはわりとある

875
デフォルトの名無しさん[sage]   投稿日:2016/01/09 17:15:15  ID:CcDze1VM.net
>873
まともかどうかは分からんが、
確かに似たような型の関数を長大に連鎖するのは意図的に避けてる。
やっぱ、そこから逃げてちゃマズいか。

それがなかったらの「それ」が何を指しているのか曖昧だが、
最後の In the first argument of の件か?
それなら、エラーが検出された場所(行と列)が最初に示されるだろ。
それで分かるよね。

876
デフォルトの名無しさん[sage]   投稿日:2016/01/10 11:57:12  ID:wsJCRVkv.net
ghcの仕事は辻褄が合わないコードを探すことだ
役に立たないコードを探すことではない
役に立つなんて下手に断言して辻褄が合わなくなるより何も言わない方がましだ

877
デフォルトの名無しさん[]   投稿日:2016/01/11 22:38:48  ID:SN+G+m/4.net
毛の壁みたいな奴いるな

878
デフォルトの名無しさん[sage]   投稿日:2016/01/12 00:48:54  ID:cUmJzvMy.net
ghcをメイクするにはghcが要るんですか?
コメント1件

879
デフォルトの名無しさん[sage]   投稿日:2016/01/12 01:06:03  ID:KMQpPdRt.net(4)
>878
要ります
CコンパイラがCで書かれてるのと一緒です

880
デフォルトの名無しさん[sage]   投稿日:2016/01/12 08:27:15  ID:9LHzGZEP.net
バグったghcを直すためにバグったghcを使うんだよな…

881
デフォルトの名無しさん[sage]   投稿日:2016/01/12 11:56:28  ID:j0Q/nFNr.net
そういう場合、バグっていなかった最後のバージョンを特定して、それの次のバージョンのソースコード見直してリメイクして次のバージョンをリメイクしてって辿り直すんですか?
コメント1件

882
デフォルトの名無しさん[sage]   投稿日:2016/01/12 12:09:55  ID:ifvCKaAg.net
もしIDE使ったらエディタのバグやビルドツールのバグも不可避になるのかな

883
デフォルトの名無しさん[]   投稿日:2016/01/12 19:29:52  ID:gQfF03pT.net
Haskellは関数型言語ですから、コンパイルが通った時にはバグが無いことを保証されています。
従ってバグを持つghcは原理的に存在しません。

884
デフォルトの名無しさん[sage]   投稿日:2016/01/12 20:54:15  ID:+sXl4caO.net
でもHaskellコンパイラ第一号はC/C++なんかで書かれたんでしょ?
そこで埋め込まれた可能性がある
コメント1件

885
デフォルトの名無しさん[sage]   投稿日:2016/01/12 20:58:13  ID:RBb1nE9O.net
保証されてるのは型の整合性だけだろ

886
デフォルトの名無しさん[sage]   投稿日:2016/01/12 22:04:04  ID:KMQpPdRt.net(4)
>881
大抵は新規の拡張とか高度な最適化に関するエンバグなので
それを用いていないGHCを-O1程度でコンパイルするぶんには無問題

887
デフォルトの名無しさん[sage]   投稿日:2016/01/12 22:05:51  ID:KMQpPdRt.net(4)
あ、よく考えたらそうでもないか。隣家廻りとかもよく壊れてる気がしてきた。
だが、まあ別にGHC自身を普通にセルフコンパイルするのに支障はない。

888
デフォルトの名無しさん[sage]   投稿日:2016/01/12 22:11:51  ID:KMQpPdRt.net(4)
>884
Lazy MLという純粋かつ遅延評価なML方言で
GHCのプロトタイプが書かれて、それを使って
ブートストラップしたということらしい。

889
デフォルトの名無しさん[sage]   投稿日:2016/01/13 07:57:01  ID:oCkaPOn/.net
コンパイルの最終ラインはCでしょ、なあに少しくらいバグが入っていた方が気付けになる

890
デフォルトの名無しさん[]   投稿日:2016/01/13 20:45:24  ID:w9GbZ+Jw.net
Haskellは関数型言語なので並列性が最強です。
メニーコアの時代には全てのソフトウェアがHaskellで書かれるでしょう。
コメント1件

891
デフォルトの名無しさん[sage]   投稿日:2016/01/13 21:08:44  ID:3fMyO6UP.net
せやろか

892
デフォルトの名無しさん[sage]   投稿日:2016/01/13 21:26:21  ID:4r91zTEF.net
なるわけない、適材適所だよ
Haskell は強力な原語だけど万能でもなんでもない

893
デフォルトの名無しさん[sage]   投稿日:2016/01/13 22:42:46  ID:0P99nKsm.net
>890
rtsがcmmみたいなクソ言語つこうとる間は移植性皆無だし
Haskellがメニーコア時代を制するとか全くの寝言。

894
デフォルトの名無しさん[sage]   投稿日:2016/01/13 23:17:52  ID:J+RphLvP.net
シングルコア、メニー言語の時代がずっと続いたから
なんでも反対する人に未来を予想させたらメニーコア単一言語になる

895
デフォルトの名無しさん[sage]   投稿日:2016/01/14 08:43:44  ID:PREROaaL.net
cmmの移植性が皆無#とは

ともあれもうLLVM化がほぼ完了してるんでなあ

896
デフォルトの名無しさん[]   投稿日:2016/01/14 21:36:49  ID:lc/juWNa.net(2)
メニーコア時代のプロセッサはHaskellのために作られます。
従って移植性は必要ありません。
また、Haskellに対して最大の最適化がかけられるので、ただでさえ世界最高速のHaskellが
更に速くなります。

897
デフォルトの名無しさん[]   投稿日:2016/01/14 21:41:27  ID:lc/juWNa.net(2)
スーパーコンピューター京は、当初Cで書かれたジョブを投入していましたが、
あまりにも遅く実力を発揮できなかったそうです。
たまたまHaskellで書かれたコードを実行したところ素直にスケールし、同等のCプログラムに比べて
一万倍以上の速度をたたき出したそうです。
今では、京で実行されるプログラムの8割以上がHaskellで書かれるそうです。
この話を聞いた時、私はメニーコア時代にはHaskell以外すべて淘汰されると確信しました。

898
デフォルトの名無しさん[sage]   投稿日:2016/01/14 22:16:56  ID:cBi4ATG+.net
@各位 触るな

899
デフォルトの名無しさん[]   投稿日:2016/01/14 22:54:04  ID:o0uc+UVB.net
しれっとフォートラン無視されてて草

900
デフォルトの名無しさん[sage]   投稿日:2016/01/16 11:31:35  ID:uAWxWNtS.net
メモリさえあれば無限に近い桁数の計算ができるCOBOLがさいつよだって銀行の資料室窓際のおじいちゃんが泣きながらいってた

901
デフォルトの名無しさん[sage]   投稿日:2016/01/16 13:52:30  ID:B2ptzm1e.net
sparc向けのコード吐けるhaskellコンパイラって存在するの?
コメント3件

902
デフォルトの名無しさん[sage]   投稿日:2016/01/16 17:47:04  ID:KeKHWyn2.net(2)
>901
つくればあるよ

903
デフォルトの名無しさん[sage]   投稿日:2016/01/16 17:58:15  ID:0llXe6dZ.net(2)
さすがにその回答はないわ

904
デフォルトの名無しさん[sage]   投稿日:2016/01/16 18:02:56  ID:KeKHWyn2.net(2)
GHCのサイトになければないに決まってるんだし、
こういうしょうもないレスを期待されてたとしか思えないんだよね。

905
デフォルトの名無しさん[sage]   投稿日:2016/01/16 19:20:11  ID:pNi7JFmY.net
>901は反語だろ多分

906
デフォルトの名無しさん[sage]   投稿日:2016/01/16 19:28:23  ID:o1tKgFaF.net
SourceForgeやgithub、適当なコミュニティにあるかもしれないんだけどな
10年前なら公式サイト or SFにないなら諦める、だったけど今はどこで作られてるか分かったもんじゃない

907
デフォルトの名無しさん[sage]   投稿日:2016/01/16 20:48:22  ID:0sqpR6Ox.net
sparcマシン上でソースからコンパイラメイクすればよくね?

908
デフォルトの名無しさん[sage]   投稿日:2016/01/16 20:58:56  ID:0llXe6dZ.net(2)
ターゲット上でコンパイルすればそのターゲット向け実行ファイルが作られるすばらしいコンパイラのソースをお持ちの方がいるようです

909
デフォルトの名無しさん[sage]   投稿日:2016/01/16 21:06:56  ID:0C9LAeXO.net
Cを吐くjhcとか使えばいいよ
コメント1件

910
デフォルトの名無しさん[sage]   投稿日:2016/01/16 21:07:38  ID:xP+g/trL.net
sparcってアーキテクチャとしてどこが違うんだっけ?

911
デフォルトの名無しさん[sage]   投稿日:2016/01/17 13:57:54  ID:po5BkGJ7.net
Haskellのレベルでもまだ機械語が透けて見える奴と見えない奴がいるね

912
デフォルトの名無しさん[sage]   投稿日:2016/01/17 14:35:14  ID:Nzqff/kH.net
Haskellなんてそれこそ透け見えちゃいけない言語だしな
元の話だが、sparcクロスコンパイルもダメなんだけか?
今どき少ないがWSの並列のためにありそうなもんだが

913
デフォルトの名無しさん[sage]   投稿日:2016/01/17 16:43:00  ID:snuCDPAE.net
京でhaskellなんていう妄言に対するただのヤジだったのに、思いの外盛り上がってし待っている
コメント1件

914
デフォルトの名無しさん[sage]   投稿日:2016/01/17 16:47:33  ID:8TKcXYcp.net
京はやっぱりfortranですかね

915
デフォルトの名無しさん[sage]   投稿日:2016/01/17 18:30:04  ID:6Xbfm/TM.net
>909
あれはもう死んだでしょ
コメント1件

916
デフォルトの名無しさん[sage]   投稿日:2016/01/17 19:17:09  ID:EUfsW/B2.net
>913
質問の契機が思いの外しょうもなかった

HaskellでもFortranでもどっちでも良いが京では数学者が最適化しやすい方が良いんだろうな
どっちがいいかはプログラマ上がりじゃわかんねーや

917
デフォルトの名無しさん[sage]   投稿日:2016/01/18 07:26:30  ID:lC5RiWYz.net(2)
>915
別に死んでないよ
ajhcがコンパイルできなくなってるのは
単にApplicativeがMonadの上に追加されたのに
追従してないだけなんで簡単に直せるよ

918
デフォルトの名無しさん[sage]   投稿日:2016/01/18 08:10:47  ID:z+08kDV+.net
死んでるじゃん

919
デフォルトの名無しさん[sage]   投稿日:2016/01/18 08:26:38  ID:20Rww3ua.net
心室細動だよ。まだ死んでない

920
デフォルトの名無しさん[sage]   投稿日:2016/01/18 08:38:12  ID:lC5RiWYz.net(2)
その程度も自分で直せずに「死んでるじゃん」とか言ってるの……?
コメント1件

921
デフォルトの名無しさん[sage]   投稿日:2016/01/18 09:44:26  ID:2kgu3Wem.net
その程度の改修も公式に入らないほどにメンテが滞っているのならプロジェクトとしては死んでる、ってことだろ

922
デフォルトの名無しさん[sage]   投稿日:2016/01/18 11:20:01  ID:8cTkl+Hb.net
所詮研究のためのおもちゃなんだなあ

923
デフォルトの名無しさん[sage]   投稿日:2016/01/18 12:55:40  ID:tos9CkFO.net
じゃあ研究じゃなくて練習といえばいいだけ
練習もせずにぶっつけ本番なんてとんでもない

924
デフォルトの名無しさん[sage]   投稿日:2016/01/18 21:36:05  ID:JZfdalHf.net
>920
Monadがどうこう以前に、GCに関連した処理がどこか
おかしくて、しかもMさんが見てもFixできなかったアレ。

(Mさんも本業の片手間だったかもしれないので
本当はがんばればFixできる可能性はあるけど、
どうも boxing - unboxing の処理が非常に込み入ってるらしく
jhcにちょろっとスケッチしてある程度の事だけを
ヒントにやらないといけないらしく、結局中断してる)

925
デフォルトの名無しさん[sage]   投稿日:2016/01/19 00:53:18  ID:57+hGCwq.net
研究職以外はオモチャとしてしか扱えんわな
純粋関数の可能性を追求したり、副作用のない環境での理論証明ツールだったり
そんな学術以外への転用がベストではない言語、普通のPGには使う意味ないもの

926
デフォルトの名無しさん[sage]   投稿日:2016/01/19 02:31:06  ID:unNXfSBy.net
科学技術用ってFortran?

927
デフォルトの名無しさん[sage]   投稿日:2016/01/19 08:54:34  ID:PSMgNBFb.net
fortranスレで聞け

928
デフォルトの名無しさん[]   投稿日:2016/01/19 09:41:41  ID:N1YYkuEv.net
研究職は基本fortran,Mathematica,mapleから選ぶ感じ

929
デフォルトの名無しさん[sage]   投稿日:2016/01/19 09:45:48  ID:n8RJjF56.net(3)
数理ではHaskell便利なのになぁ

930
デフォルトの名無しさん[sage]   投稿日:2016/01/19 10:42:59  ID:n/8vNsiZ.net
一部のアルゴリズムの実装が簡単

931
デフォルトの名無しさん[sage]   投稿日:2016/01/19 15:53:22  ID:2890i3Ni.net(3)
局所的なアルゴリズムじゃなくて、もっと全体を支配するような仕組み
静的型付けとかデザインパターンとか
デザインパターンはたとえば非決定性やイテレータやモナドや非同期のようなもの
コメント1件

932
デフォルトの名無しさん[sage]   投稿日:2016/01/19 16:10:57  ID:u5xt7rMo.net
JavaとHaskellどっちが実行速いの?

933
デフォルトの名無しさん[sage]   投稿日:2016/01/19 18:57:29  ID:utvSG+ku.net
jhcの話してんのにHaskell=おもちゃと読み取ったアホがいるらしい

934
デフォルトの名無しさん[sage]   投稿日:2016/01/19 19:44:38  ID:2890i3Ni.net(3)
言語は二つ以上覚えるとよい
そのうち一つは玩具といわれても腹の立たない言語
C++, Java, Haskellから二つ選ぶなら重複の少ないものがよいからJavaは選ばない

935
デフォルトの名無しさん[sage]   投稿日:2016/01/19 19:47:55  ID:n8RJjF56.net(3)
>931含め何を言ってるのかサッパリ分からないのは関数型脳じゃないからなのか
誰か日本語で訳してくれい

936
デフォルトの名無しさん[sage]   投稿日:2016/01/19 20:35:11  ID:56LgXKla.net
誰かS式に訳して


937
デフォルトの名無しさん[]   投稿日:2016/01/19 20:43:40  ID:9Sv9SZsi.net
そうなんですよ。
Haskellを初めとする関数型言語は数学者にとって超絶便利。
しかしながら数学がわからない者にとっては難解なだけです。
まあ言ってみれば馬鹿には無理ってことなんですよ。
選ばれた天才が使ってこそ意味のある言語なんです。

938
デフォルトの名無しさん[sage]   投稿日:2016/01/19 20:49:29  ID:1uIbW5OB.net

939
デフォルトの名無しさん[sage]   投稿日:2016/01/19 21:02:43  ID:2890i3Ni.net(3)
デザパタが難しいのは、コードの中にパターン名が明記されている保証がないから
明記しないから正式名称が統一されている保証もない

940
デフォルトの名無しさん[sage]   投稿日:2016/01/19 21:34:03  ID:n8RJjF56.net(3)
>938
なるー、翻訳thx

941
デフォルトの名無しさん[sage]   投稿日:2016/01/20 07:09:49  ID:xfIx1JoD.net
安全工学の知見?

942
デフォルトの名無しさん[sage]   投稿日:2016/01/20 22:33:36  ID:zBNmSvu8.net(2)
>994
makiが馬鹿にしてる「安倍首相」って現世にいる安倍首相とは別の人間なんじゃないか、って思うときがある。
なんか自分が妄想してる間抜けの具現した影を殴り倒してはしゃいでる、みたいな。
奴が書き込んでるコメントを見てると根本的な事すら理解してないことが結構ある。

943
デフォルトの名無しさん[sage]   投稿日:2016/01/20 22:35:37  ID:zBNmSvu8.net(2)
スマン。誤爆したorz

944
デフォルトの名無しさん[]   投稿日:2016/01/21 20:24:13  ID:+cVcyY3w.net
バトルプログラマー☆マキの話ならココで合ってるぜ。

945
デフォルトの名無しさん[]   投稿日:2016/01/24 22:23:49  ID:1M5wgVFf.net(3)
HDBCのexecute関数ってどこで実装されているのでしょうか?
Statement.hsの34行目に型宣言は見つかったのですが、実態が見つかりません。
よろしくお願いします!
コメント2件

946
デフォルトの名無しさん[]   投稿日:2016/01/24 22:40:42  ID:1M5wgVFf.net(3)
x実態
o実体

947
デフォルトの名無しさん[]   投稿日:2016/01/24 22:42:43  ID:zJPsJxlD.net
>945
Haskellは停止の必要無しにネットワークのむこう側にでさえコードを移動できるのです。
計算の途中で性能の不足を感じたら、性能の高いマシンへイメージを転送し、実行を継続します。
ですから、実装がどこにあるかは問題ではないのです。
Haskellであること、そしてHaskellを使えることが重要なのです。
Haskell使いであることに誇りを持ちましょう。
コメント2件

948
943[]   投稿日:2016/01/24 23:37:58  ID:1M5wgVFf.net(3)
すみません、意味がわかりません。
僕が知りたいのはどのソースのどの行にexecuteの実装があるかです。
よろしくお願いします。
コメント1件

949
デフォルトの名無しさん[]   投稿日:2016/01/25 00:25:15  ID:+Q+z/Jp3.net
>945 >948
Javaで言うところのInterfaceみたいなもんだから
各データベース管理システムごとに実装が作られてる
sqlite3ならHDBC-sqlite3に
PostgreSQLならHDBC-postgresqlに
コメント1件

950
デフォルトの名無しさん[sage]   投稿日:2016/01/25 01:35:24  ID:PuP3t03Q.net
>947
こんなのに騙される奴がいるのか?
前向きな事を言っているから建設的な議論なんだろうみたいな考えの奴しか騙せないだろ

Haskellはおもちゃという批判の方がまだマシだ

951
デフォルトの名無しさん[sage]   投稿日:2016/01/25 07:13:34  ID:UErqEOmx.net
>947
OCamlスレに帰りたまへ

952
943[]   投稿日:2016/01/25 15:13:40  ID:jwcC6CKd.net
>949
なるほど!ありがとうございます!

953
デフォルトの名無しさん[sage]   投稿日:2016/01/25 20:55:40  ID:bhSAv5/D.net
このスレ、まだ関数型言語ブーム時のあれこれを引きずってて笑う

954
デフォルトの名無しさん[sage]   投稿日:2016/01/25 21:32:23  ID:FKcC8XYP.net
引きずってるのは変な虫だけですから

955
デフォルトの名無しさん[]   投稿日:2016/01/25 22:47:29  ID:mYLsxkwY.net
一部の奴が胡乱な書き込みをしているだけで、9割が現実を見ているよ

956
デフォルトの名無しさん[sage]   投稿日:2016/01/26 01:28:52  ID:fLwBjkWJ.net(2)
ジエネレーティブプログラミングみたいな表現力で考えると、スキャフォルドやテンプレートか、lispのマクロか、全てがs式(データ)か、haskellの遅延評価みたいな選択肢があって、
得手不得手含めて、どれが好きか勝手に選べみたいな感じ。
って、書いてて全く意味が分からないが。

957
デフォルトの名無しさん[sage]   投稿日:2016/01/26 01:30:15  ID:fLwBjkWJ.net(2)
型の表現力は考慮してなかった。

958
デフォルトの名無しさん[sage]   投稿日:2016/01/26 08:56:48  ID:9z2oQ6YS.net
>Javaで言うところのInterfaceみたいなもんだから

こマ?
コメント1件

959
デフォルトの名無しさん[sage]   投稿日:2016/01/26 09:22:36  ID:hH8elJ+8.net
>958
ざっくりしすぎだけどまあ、気持ちとしては近いんじゃね

960
デフォルトの名無しさん[]   投稿日:2016/01/27 20:33:39  ID:tY0EzgE5.net
わしも昔はHaskellerとして名を馳せたのじゃったがライブラリにArrowを受けてしまってな

961
デフォルトの名無しさん[sage]   投稿日:2016/01/28 03:10:29  ID:s/n+KVu9.net
後から実装できるのがinterfaceとは違う

962
デフォルトの名無しさん[sage]   投稿日:2016/01/28 10:55:25  ID:oB3jszBn.net
templateを教えたらHaskell並みに難しいのがバレるからinterfaceしか教えない現実

963
デフォルトの名無しさん[sage]   投稿日:2016/01/28 11:11:40  ID:tTuOSjjQ.net
重箱の隅をつついてどうでもいいことに華を咲かせるなぁ
言語違うんだから完全一致の概念にはならんだろ
ざっくりした気持ちで受け止めとけ

964
デフォルトの名無しさん[sage]   投稿日:2016/01/28 19:20:31  ID:V4rb6WtO.net
このスレにたどり着いたHaskell初心者が誤解してしまう恐れを取り除かないと

965
デフォルトの名無しさん[sage]   投稿日:2016/01/29 22:37:12  ID:V8UIRHzx.net
2ちゃんやってる段階で加齢臭漂うジジイしかいないこと確定なんで、意識高い(笑)Haskellワナビは
こんな痰壺のぞきに来ないやろ彡(゚)(゚)

966
デフォルトの名無しさん[sage]   投稿日:2016/01/30 08:45:57  ID:vmtmT3H6.net
3日に1回しか本気出さない怠け者でも通常の3倍以上生きてるだけでわりと有能だからね
若者に嫉妬されるのも仕方ない

967
デフォルトの名無しさん[sage]   投稿日:2016/01/31 04:05:38  ID:1wXDLlpg.net
すごいハスでさえなかなか読み切らない
できる人はあれ一日でおkなん?
コメント1件

968
デフォルトの名無しさん[sage]   投稿日:2016/01/31 09:28:31  ID:AEzrRz3r.net
>967
読み切るだけなら1日か、長くても数日でできるでしょう。

でも、理解して、納得して、自分の言葉で説明できるまでには
そうとう時間かかると思います。
1ヶ月やそこらでは無理な人は多いです。

がんばってください。

969
デフォルトの名無しさん[sage]   投稿日:2016/01/31 10:25:52  ID:XFfzw+ki.net
少しでも批判的な立場から見れば、全部読み切る必要がないのは明らかだけど
批判を封じると無駄が増えていく

970
デフォルトの名無しさん[sage]   投稿日:2016/02/01 06:10:51  ID:zz5N12rG.net
鈍感力とかいってた頃は鈍感だからいくら批判されてもOKだったけど今は批判NGなのかな

971
デフォルトの名無しさん[]   投稿日:2016/02/01 09:59:54  ID:CiTgPvzP.net
また胡乱な書き込みが増えてきた
コードをさらせ

972
デフォルトの名無しさん[sage]   投稿日:2016/02/01 21:19:05  ID:yGV1+rav.net
じゃあ、コードを晒そうか。

聞いてくれ、さっき遅延評価の凄さを目の当たりにしたんだ。

無限リスト [[a], [a,a], [a,a,a], ・・・] を作る関数
stepup x = iterate (x:) [x]

リストから最左の指定要素を取り除く関数
remove xs x = xs \\ [x]

ここまで準備したところで、下記の計算をしてみる。
let xs = repeat 'a'
in head $ foldl remove (stepup 'a') [xs, xs, xs]

結果は、無限ループに陥ることなく "a" だ。

すごくね?
コメント1件

973
デフォルトの名無しさん[sage]   投稿日:2016/02/01 21:26:58  ID:TMgHKDk0.net
>972
うんそうだね。

でも遅延評価ってのが何物なのかわかってくるとあんま驚かない。

974
デフォルトの名無しさん[sage]   投稿日:2016/02/01 23:05:53  ID:t43chpFC.net
yieldある言語だと無限要素の実現は容易だけど
それをリスト構造として扱えるって点では便利かもね

975
デフォルトの名無しさん[]   投稿日:2016/02/01 23:14:58  ID:Ciri+Qiy.net
遅延評価は並列処理をしようとすると驚き最小の原則を破る

976
デフォルトの名無しさん[sage]   投稿日:2016/02/01 23:47:41  ID:WxMLgo2+.net
遅延評価はノンプリエンプティブマルチタスクの親戚
タスクを遅延している

もしプリエンプティブならタスクが勝手に動き出すので無限ループを止められない
メニーコアとかも無限ループを止められない

977
デフォルトの名無しさん[sage]   投稿日:2016/02/02 02:33:42  ID:Dqi7KAqT.net
遅延のおかげでメモリ不足になってエラーになった

978
デフォルトの名無しさん[]   投稿日:2016/02/02 04:43:44  ID:xJAws4GV.net
ここから遅延評価の悪口を言っていこう

979
デフォルトの名無しさん[sage]   投稿日:2016/02/02 05:59:03  ID:JJLoMZID.net
どんなに素晴らしいプログラミング言語だろうと
コーディングする人間の質が悪ければ何の意味も価値もなさない

http://ideone.com/880zvK
コメント2件

980
デフォルトの名無しさん[sage]   投稿日:2016/02/02 10:15:13  ID:lBmePa6t.net(3)
https://paiza.io/projects/6tuAv6EyXxyMfm4QkzUopg

まあこの程度のものを>979みたいに書かれたらそりゃたまらんよな

981
デフォルトの名無しさん[sage]   投稿日:2016/02/02 18:57:44  ID:PRq2IyAN.net
ワンラインシェルスクリプトの俺スゲーみたいだな
悪いわけじゃないが、他者の可読性ってどうなんだ?

982
デフォルトの名無しさん[sage]   投稿日:2016/02/02 19:35:18  ID:uTTEQY4N.net(2)
>979
酷すぎて乾いた笑いが出るな
Sラン級糞コーダーに解答例書かせるとかPaiza大丈夫か

983
デフォルトの名無しさん[sage]   投稿日:2016/02/02 19:43:13  ID:24ytvjJT.net
このスレ、書いてないことまで透視能力使って読んでる奴いっぱいいるじゃん
それに比べたら書いてあることの可読性がどうなろうと透視するのは簡単だろ

984
デフォルトの名無しさん[sage]   投稿日:2016/02/02 19:49:12  ID:uTTEQY4N.net(2)
検索してみたらただの2chの回答者じゃん
流石に一般人晒すのはマズイよ

985
デフォルトの名無しさん[]   投稿日:2016/02/02 20:19:13  ID:qoaDQoLB.net(2)
instance Functor Tree where
fmap f EmptyTree = EmptyTree
fmap f (Node x left right) = Node (f x) (fmap f left) (fmap f right)

このコードで最初は(f x)なのに、あとの2つは(fmap f left)とfmapが先頭につくのはどうしてですか?
コメント1件

986
デフォルトの名無しさん[sage]   投稿日:2016/02/02 20:29:25  ID:lBmePa6t.net(3)
>985

1.つかないと型が合わないだろ

2.そもそも再帰的定義

「ある木に fmap f した結果は、根にfを適用し、葉の部分木にfmap fした木である」

が理解出来てるか?
コメント1件

987
デフォルトの名無しさん[]   投稿日:2016/02/02 20:44:20  ID:qoaDQoLB.net(2)
>986
>2.そもそも再帰的定義
>
>「ある木に fmap f した結果は、根にfを適用し、葉の部分木にfmap fした木である」
>
>が理解出来てるか?

すみません、理解できていないです。
なぜ葉は直接fを適用できないのでしょうか?
コメント2件

988
デフォルトの名無しさん[sage]   投稿日:2016/02/02 21:14:43  ID:lBmePa6t.net(3)
>987
たとえば整数の二分木(Tree Int)に
整数の偶奇性を判定する関数 even を fmap して
同じ形をしたブール値の二分木(Tree Bool)を得る場合を考えろ。

整数の(空でない)二分木は、根に値 x が収納され葉として部分木 left と right を持つので

Node x left right

という形をしている。
x の型は整数 Int で、 left と right の型は整数の二分木 Tree Int だ。
他方で、even の型は Int -> Bool なのだから、
even left とか even right という式は意味を成さない。
コメント1件

989
デフォルトの名無しさん[]   投稿日:2016/02/02 22:42:19  ID:x3VaMdqQ.net
Haskellは無限ループに陥りません。
だからこそコンパイルが通ればバグが無いことを保証できるのです。

990
デフォルトの名無しさん[sage]   投稿日:2016/02/03 00:23:47  ID:eYCB0y5I.net
バグの定義からはじめようか

991
デフォルトの名無しさん[sage]   投稿日:2016/02/03 01:05:28  ID:pvHSiWBf.net
>987
1. fが受け取るのは[xの型] (xは[Tree型]じゃない)
2. left と rightは[Tree型]
3. [Tree型]とfの仲介がfmap

おわかり?

992
デフォルトの名無しさん[sage]   投稿日:2016/02/03 03:37:57  ID:mzFRVKkI.net
ideoneでhaskellのサンプルコードが無限ループじゃなかったっけ?

993
デフォルトの名無しさん[]   投稿日:2016/02/03 04:12:58  ID:OD3iNzjF.net
Androidでお手軽にHaskellできるアプリ誰か頼む。C4droid並の品質で。ソースコードはAndroidのVimTouchで書くからIDEは要らないや

994
985[]   投稿日:2016/02/03 11:15:50  ID:B67PXnHg.net
>988, 989
理解できました!
わかりやすい説明ありがとうございます!
コメント1件

995
デフォルトの名無しさん[sage]   投稿日:2016/02/03 13:15:08  ID:KiXDjJxB.net
タブレットでコーディングする需要があるのか…
コメント1件

996
デフォルトの名無しさん[sage]   投稿日:2016/02/03 13:41:55  ID:vZagwsW/.net(2)
arm向けのコード吐けるhaskellコンパイラって存在するの?
と言ってみる

997
デフォルトの名無しさん[sage]   投稿日:2016/02/03 13:47:52  ID:WaqhOfMD.net(2)
ARMをターゲットにしたクロスコンパイラなGHCは普通に存在する

そのGHCでGHC自体をARM向けにコンパイルすれば
ARM計算機上でHaskell使った開発ができるはず

998
デフォルトの名無しさん[sage]   投稿日:2016/02/03 14:04:22  ID:uEOUJl1K.net
むしろプラットフォームに依存しないようなソフトしか書けないやろ
コメント1件

999
デフォルトの名無しさん[sage]   投稿日:2016/02/03 17:44:14  ID:vZagwsW/.net(2)
>901に被せただけで特に意味はなかったが、クロスコンパイル環境は普通にあるのな
Androidなら誰か暇人が作ってそうだけど、あっても古くてメンテされてないかな

>998
そのコメントは流石に的が外れすぎてる

1000
デフォルトの名無しさん[sage]   投稿日:2016/02/03 20:41:29  ID:WaqhOfMD.net(2)
というかそもそもGHCはLLVMに対応してるからな

1001
デフォルトの名無しさん[]   投稿日:2016/02/03 20:54:22  ID:jdFVwRiR.net
>995
キッズが空き時間にスマホにBluetoothキーボード繋いでCodeForcesやるだろ
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
実況 ◆ フジテレビ 83245 立てろ (635)フジ実況
実況 ◆ 日本テレビ 55037 (712)NTV実況
NHK総合を常に実況し続けるスレ 133397 桜エビ修正 (915)NHK実況
連続テレビ小説 ひよっこ★45 (571)NHK実況
羽鳥慎一モーニングショー★4 (215)テレ朝実況
実況 ◆ テレビ朝日 47703 大下さんぽ (44)テレ朝実況
実況 ◆ TBSテレビ 27574 (109)TBS実況
おはよう!時代劇 暴れん坊将軍4 #2(第3話)[字][再] (637)テレ朝実況
このスレッドが人気です(ニュース系)
【テレビ】<東野>「女子高校生ではサッカーと野球どっちが人気?」女子高校生「サッカーです」長嶋一茂「「下世話なこと言っていい?」 (880)音楽・芸能ニュース
【PTA】「男親のPTA活動禁止」の提案も 千葉・女児死体遺棄事件で波紋 (1000)ニュー速+
【世論調査】安倍内閣支持率60%と横ばい 失言・不祥事の影響軽微 [日経新聞]★4 (275)ニュー速+
【社会】「ひきこもり支援」業者のトラブル相次ぐ…3か月分の契約料570万円支払うも支援なし、自宅から無理やり連れ出され軟禁★4 (455)ニュー速+
【PTA】「男親のPTA活動禁止」の提案も 千葉・女児死体遺棄事件で波紋★2 (63)ニュー速+
【テレビ】<上沼恵美子>坂口杏里の行く末案じる「今、ここで間違えたらこの子、死ぬよ。放っておいたら」「大阪へおいで」 (208)音楽・芸能ニュース
【サッカー/新潮】J最年少ゴール「久保建英」、取材拒否に“過保護”批判 (489)音楽・芸能ニュース
【社会】「ひきこもり支援」業者のトラブル相次ぐ…3か月分の契約料570万円支払うも支援なし、自宅から無理やり連れ出され軟禁★3 (1000)ニュー速+
プログラム板の人気スレ
オブジェクト指向って自然な文法だな 3 (575)
Excel VBA 質問スレ Part47 (705)
ねねっちと一緒にプログラムを勉強するスレ第2話 (600)
C言語なら俺に聞け 139 (889)
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代 (150)
スレ立てるまでもない質問はここで 147匹目 (441)
【統計分析】機械学習・データマイニング15 (158)
推薦図書/必読書のためのスレッド 81 (905)
くだすれPython(超初心者用) その33 (351)
ふらっと C#,C♯,C#(初心者用) Part127 (408)
C++相談室 part130 (276)
Pythonのお勉強 Part52 (873)
Git 15 (672)
C#, C♯, C#相談室 Part94 (64)
Xamarin Part3 (845)
Visual Studio 2015 Part8 (715)
Swift part10 (462)
Visual Studio 2017 Part2 (139)
クラス名・変数名に迷ったら書き込むスレ。Part27 (948)
C# vs Java どっちが好き? その3 (212)
Java入門・初心者質問スレ Part.3 (140)
Ruby 初心者スレッド Part 59 (1000)
プログラミング言語 Rust 2 (817)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (643)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (636)
Androidプログラミング質問スレ revision53 (212)
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 (545)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)