- 1 名前:デフォルトの名無しさん [2015/04/09(木) 08:31:01.42 ID:4yjREsCN.net]
- 関数型プログラミング言語 Haskell について語るスレです。
,.-―: ̄`ー::::::::::、 /::::::::::::.::::::::::::::::::::::::::::`::、、 /::::::::::::::::::::::::::::::::::::::::::::::::::::::`、 l::::::::::::::::::::::::::::::::::::::::;':l:::::::::::\::l l:::::::::::::::::::::::::::::::::,,::::::::;-,:,::::::::::::::::l l::::::::::::::::,_,.::::,';::::::;:::::: :: l ::::::::::::::l l::::::::::/-/:::/-ニ,.::::/=,./::::::::::l ヽ:::: ´、ひ> ;: l .<ひ>' 、::::::::/ ヽ:::::  ̄ .)::; l  ̄ l::::/ < 毛の壁(岡部健)の話は禁止な 、:::::.. /:::; .,-、 l:::/、 ,―:::::::: ゝヽ- ー' 、 l::/,、ヽ l,、,、,,:、:: / ,--、,-.、_ l /::::::,、,、l l,、,、,、,、,、::、 `ー ̄-' /:::::::::::,、,、l l,、,、,、,、,、,、::ヽ /::::::::、,、,、,、,ノ:\ haskell.org (公式サイト) www.haskell.org/ 前スレ 関数型プログラミング言語Haskell Part27 peace.2ch.net/test/read.cgi/tech/1420718555/
- 860 名前:デフォルトの名無しさん mailto:sage [2015/07/07(火) 18:17:56.32 ID:Ra6qpxUV.net]
- Haskellは強制されても習得できない難しい言語だからこそ非人道的事案は少ない
それに比べて関数型という安易な言葉に苦しめられる人は多い
- 861 名前:デフォルトの名無しさん mailto:sage [2015/07/07(火) 20:57:42.46 ID:strljqHr.net]
- どこかのスレでツリートラバースするのに再帰を使うのは良くないマナーと書いたら、
末尾再帰と言われたのだが。
- 862 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 00:23:41.84 ID:D8OEoYJf.net]
- >> 850
なぜ良くないの?
- 863 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 00:43:21.45 ID:lu3S4Qgm.net]
- >>>845
OCaml版はloop_at_exit使ってるのがダメと指摘されますた>< Graphics.wait_next_eventかGraphics_js.loop使ってください
- 864 名前:デフォルトの名無しさん [2015/07/08(水) 01:57:29.30 ID:T1Ir4r2m.net]
- >>845
末尾再帰はあのコード例では関係なくて、イベントハンドラを経由したtrampolineになってるのでスタックオーバーフローしない、が正しそう。
- 865 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 03:26:31.55 ID:gcJIUX06.net]
- >>851
末尾再帰の最適化がかからない言語は使うべきではないともレスがあったな。
- 866 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 05:37:16.57 ID:D8OEoYJf.net]
- >> 854
よく分かりませんが、ところで、あなたにレスを見て気になって、調べて初めて知りました。 Haskellって末尾再帰の最適化って無いんだね。 ずっと勘違いしてた。気付かせてくれてありがとう。
- 867 名前:デフォルトの名無しさん [2015/07/08(水) 06:38:51.11 ID:k4MH4D3R.net]
- >>855
>Haskellって末尾再帰の最適化って無いんだね TCOが無いんじゃなくて、あくまでサンクの問題。
- 868 名前:デフォルトの名無しさん [2015/07/08(水) 07:15:31.29 ID:asOwE27P.net]
- parsecとtrifectaは比較するようなものじゃないよ
- 869 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 08:22:34.09 ID:SmYj13jC.net]
- >>857
kwsk
- 870 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 08:29:06.72 ID:gcJIUX06.net]
- >>855
そもそも最適化が無い言語とはC言語のことで、Cは使うなHaskellを使えと言う話だったのだが。
- 871 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 08:53:04.13 ID:Hcg+sLDh.net]
- Haskellでサンクをインライン展開する最適化ってできるんじゃねえの
サンクが末尾にあったらTCOと同じだろ
- 872 名前:デフォルトの名無しさん [2015/07/08(水) 09:03:37.61 ID:k4MH4D3R.net]
- >>860
できる。ghcなら-O2つければいい。
- 873 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 09:44:23.49 ID:gcJIUX06.net]
- そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループは
オフセットを指定してジャンプ程度の違いしかないので、インストラクションに 関しては大して違いが無いのだが。 どうもハスケラーは関係ないことを指摘して、「だから◯◯はダメだ」と言い出す 傾向が強い。
- 874 名前:デフォルトの名無しさん [2015/07/08(水) 10:56:59.54 ID:k4MH4D3R.net]
- そりゃTCO効いた後なら違いは殆どなくなるにきまってる。
- 875 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 11:02:57.48 ID:Mh0VppoT.net]
- 「そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループは
オフセットを指定してジャンプ程度の違いしかないので」 はあ???
- 876 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 11:10:43.42 ID:+0ZOrsx3.net]
- >>863
「TCO効いた後なら」同じだが、>>862 は「Cの関数呼び出し」と言ってるから Cも関数呼び出しもまったくわかってない。プログラムわからないんだったら出てくんな。
- 877 名前:デフォルトの名無しさん [2015/07/08(水) 11:28:35.90 ID:k4MH4D3R.net]
- >>865
まさかスタック積むことすらわかってないとかなんかね?
- 878 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 15:11:37.94 ID:TEEbED7E.net]
- 久しぶりにきたら荒れてるな
Haskellは破壊的代入をしようとすると面倒なのがつらい。 巨大な1次元配列の任意の場所を参照しながら大量に書き換える処理とか 純粋性を保ったままやろうとすると凄いことになる。 *例えば画像データの一部に別の画像をmixするとか
- 879 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 16:24:24.26 ID:Eo9ZYfU/.net]
- >>866
スタックに引数、戻り値と積んでからジャンプするんだから、アドレスを渡す 関数ならスタックは積む必要が無い。 再帰してるんだから。 ハスケラはどうも自分は天才で自分以外は全員馬鹿と思い込む傾向がある。
- 880 名前:デフォルトの名無しさん [2015/07/08(水) 16:25:04.00 ID:Fj3AV/LF.net]
- 相変わらず殺伐としている。
いつものマウンティング合戦。
- 881 名前:デフォルトの名無しさん [2015/07/08(水) 16:26:57.55 ID:Fj3AV/LF.net]
- 多分、ハスケラではなくオカマラーだよ。
なぜかオカマちゃんが出没するのだ。
- 882 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 16:51:49.63 ID:TEEbED7E.net]
- ハスケラと一緒に仕事したい(自社製品を一緒につくりたい)けど
怖い人多そうで誘いづらい
- 883 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:09:26.71 ID:F0vddBGo.net]
- 「Cも関数呼び出しもまったくわかってない。プログラムわからないんだったら出てくんな。」
「まさかスタック積むことすらわかってないとかなんかね? 」 毎日こんなこと言われると思う。
- 884 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:22:12.92 ID:TEEbED7E.net]
- なにそれ怖い
製品完成する前に心折られそう
- 885 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:24:08.22 ID:g9xxt+x4.net]
- 「そもそも、Cの関数呼び出しはアドレスを指定してジャンプ、ループはオフセットを指定してジャンプ程度の違いしかないので」 とか
「スタックに引数、戻り値と積んでからジャンプするんだから、アドレスを渡す関数ならスタックは積む必要が無い。再帰してるんだから。」とか (しかもTCOの話をしてるのに)、本当にCも関数呼び出しもわかってない知ったかぶりがHaskellerを中傷してるだけ。 それ以上でもそれ以下でもない。
- 886 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:29:09.36 ID:TEEbED7E.net]
- 穏やかなハスケラいないかな
簡単なプログラムができる程度の初心者でもいいんだけど 一緒に自社製品つくりたい (ただし売上あるまで一緒に無給)
- 887 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:33:01.82 ID:3bDYKzqv.net]
- >>874
どうもハスケラーは関係ないことを指摘して、「だから◯◯はダメだ」と言い出す 傾向が強い。
- 888 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:34:43.10 ID:3bDYKzqv.net]
- 最後には「Javaの話ししてるのにJavascriptと勘違いしている」などと言い出しそうだな。
- 889 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:37:24.50 ID:ikFma15C.net]
- わかってないから馬鹿にされてるんじゃなくて、
わかってないのに自覚せず威張ってるから馬鹿にされてるんだが…。 そういう奴がいて、間違いを指摘すると逆ギレされる職場とか絶対嫌。
- 890 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:39:55.04 ID:coR9sNH7.net]
- 末尾呼び出し最適化は再帰だけじゃないよ
- 891 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:46:11.37 ID:TEEbED7E.net]
- 馬鹿にするのも逆ギレもよくないとおもう
そしてこのスレが荒れるのも彼の呪いじゃないかとおもう もうそっとしておくのが一番いいとおもう
- 892 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:48:42.74 ID:3bDYKzqv.net]
- 「Cは再帰の最適化が無いから使うべきではない、Haskell使え」と言う話に、
Cは再帰の最適化が必要ないのに何言ってんの?と答えた。
- 893 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:54:30.07 ID:3bDYKzqv.net]
- Haskellの最適化って他の言語では必要ないものでしょ。
「遅延呼び出しによって必要のない計算を無くせるスゴイ!」 他の言語では最初から必要ない計算はしないからそんな最適化は必要ない。 自らゴミを持ち込んで 「ゴミを減らせたスゴイ!Cはゴミを減らせないから使うべきでない!」 とか言い出すのがハスケラー。
- 894 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 17:54:46.50 ID:jdKxxZpi.net]
- いろいろと誤解している気がする
- 895 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:02:40.05 ID:7bDc6WAX.net]
- まず、末尾再帰をループに変換する最適化は、CでもHaskellでも可能で、実際にGCCでもやってる。
それはさておき、Cではループを末尾再帰で書いたりしないから、そんな最適化はいらない、という意見もそれはそれでわかる。 末尾再帰使わないのに、末尾再帰最適化がないからダメ、なんて言ってる奴がいたらそいつがおかしいので具体的ソース希望。
- 896 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:11:09.96 ID:LC6Y88mm.net]
- 必死に藁人形作ってるだけだから構ったら駄目だよ
末尾再帰最適化を知ってて制御構文を知らないなんて そんな支離滅裂な馬鹿を前提としてる時点で察しろと
- 897 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:13:26.90 ID:7bDc6WAX.net]
- で、CでもHaskellでも、末尾呼び出し最適化されていない普通の関数呼び出しは、
戻り番地や、まだ使う変数をセーブしておくためにスタックを消費する。 (引数渡しにスタックを使うこともあるけど、そうでなくても) (再帰でも、再帰でなくても)末尾呼び出しの場合、そのセーブが不要なので、 ただのジャンプ(と引数のセット)だけに最適化できる。 この最適化は関数型言語の処理系では普通は実装されている。 Cでも全くできないことはないと思うが、いろいろ面倒そうなので やってるコンパイラは寡聞にして知らない。
- 898 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:14:38.28 ID:3bDYKzqv.net]
- >>884
変換する最適化という言い方が、ハスケラーっぽいなあ。 Cは積む必要のないものは積まないんだから。 スタックに何も積まなければループも関数呼び出しも大した違いは無い。 そういうわけでこれからは、最適化しないと使い物にならないHaskellと考えていただこう。
- 899 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:14:42.05 ID:7bDc6WAX.net]
- >>885 スマソ。何となくちゃんと説明しないと俺の気が済まなかった。
- 900 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:17:33.59 ID:7bDc6WAX.net]
- (末尾呼び出し最適化されていない)関数呼び出しでスタックに積むものはCでもHaskellでも同じ。
戻り番地と、生きている変数と、レジスタに入りきらない引数。
- 901 名前:デフォルトの名無しさん [2015/07/08(水) 18:27:23.28 ID:Fj3AV/LF.net]
- マウンティングする奴は、マウンティングすることが目的だから、生産性は
低い。学者さんに多いタイプ。アカハラ怖い。
- 902 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:27:27.64 ID:LC6Y88mm.net]
- >>887
???? Cもfastcallじゃない限り戻りアドレス積むよ
- 903 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:28:15.90 ID:LC6Y88mm.net]
- しまった同じやつだった…
- 904 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:39:15.89 ID:2M74HMLS.net]
- 馬鹿とは議論するな。傍目にはどちらが馬鹿か判りにくい
- 905 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 18:50:26.80 ID:7bDc6WAX.net]
- 本当に混乱してる人もいるかもしれないし、説明のまとめだけ…
884 :デフォルトの名無しさん:2015/07/08(水) 18:02:40.05 ID:7bDc6WAX まず、末尾再帰をループに変換する最適化は、CでもHaskellでも可能で、実際にGCCでもやってる。 それはさておき、Cではループを末尾再帰で書いたりしないから、そんな最適化はいらない、という意見もそれはそれでわかる。 末尾再帰使わないのに、末尾再帰最適化がないからダメ、なんて言ってる奴がいたらそいつがおかしいので具体的ソース希望。 886 :デフォルトの名無しさん:2015/07/08(水) 18:13:26.90 ID:7bDc6WAX で、CでもHaskellでも、末尾呼び出し最適化されていない普通の関数呼び出しは、 戻り番地や、まだ使う変数をセーブしておくためにスタックを消費する。 (引数渡しにスタックを使うこともあるけど、そうでなくても) (再帰でも、再帰でなくても)末尾呼び出しの場合、そのセーブが不要なので、 ただのジャンプ(と引数のセット)だけに最適化できる。 この最適化は関数型言語の処理系では普通は実装されている。 Cでも全くできないことはないと思うが、いろいろ面倒そうなので やってるコンパイラは寡聞にして知らない。 889 :デフォルトの名無しさん:2015/07/08(水) 18:17:33.59 ID:7bDc6WAX (末尾呼び出し最適化されていない)関数呼び出しでスタックに積むものはCでもHaskellでも同じ。 戻り番地と、生きている変数と、レジスタに入りきらない引数。 👀 Rock54: Caution(BBR-MD5:405b7f1af0f5a85b432d79fa769e9aeb)
- 906 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 19:00:46.58 ID:Hcg+sLDh.net]
- ループを無くす理由の一つはnullを無くしたかったから
nullは不要 → 初期化と代入の区別が必要 → 面倒だから代入も不要 → ループも不要
- 907 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 19:03:01.21 ID:7bDc6WAX.net]
- じゃあ、そもそもなんでループをわざわざ末尾再帰で書くの?という疑問は当然だけど、
ループで書くと破壊的代入が必要になるから、関数的に書くと自然に末尾再帰になる。 なので関数型プログラミングをするなら末尾再帰最適化は必須だし、 実際に(再帰以外の末尾呼び出しの最適化も)まともな処理系はみんな実装してる。 関数型言語では必須かつ簡単な最適化なので。
- 908 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 19:04:06.48 ID:7bDc6WAX.net]
- >>895 すまん前後した
- 909 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 20:23:51.51 ID:oVqSZ92L.net]
- >>886
vcは引数が全く同じ関数の末尾呼び出しをgotoにするよ。
- 910 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 20:46:18.84 ID:7bDc6WAX.net]
- >>898 「引数が全く同じ」ってことは、末尾再帰だよね?
末尾再帰は>>884にあるとおりGCCも(引数が違っても)最適化してる。 >>886は再帰以外の末尾呼び出しの話だった。 一続きだったんだが、独立して読むと明示されてないね。 >>894でまとめて読んでくれ。すまん。
- 911 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 22:36:48.90 ID:oVqSZ92L.net]
- >>899
いいや、tail callだよ。
- 912 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 22:53:06.86 ID:TEEbED7E.net]
- VSにHaskell用プラグインを組み込むプロジェクト進んでるのかな?
マジで早く使いたいんだけど
- 913 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 23:02:56.60 ID:zrPw7vNx.net]
- ここまでを簡単に解説すると、ハスケラはシッタカブラー。
- 914 名前:デフォルトの名無しさん mailto:sage [2015/07/08(水) 23:32:53.31 ID:oVqSZ92L.net]
- >>899
ほらよ。 int foo(char *, int); int bar(char *a, int b) { return foo(a + 10, b - 10); } _bar PROC ; COMDAT mov eax, DWORD PTR _b$[esp-4] add eax, -10 ; fffffff6H mov DWORD PTR _b$[esp-4], eax add DWORD PTR _a$[esp-4], 10 ; 0000000aH jmp _foo
- 915 名前:899 mailto:sage [2015/07/09(木) 05:48:11.05 ID:KPxfvpRW.net]
- >>903 おお! 「引数が全く同じ」って、値じゃなくて、数や型が同じってことね。サンクス。
逆に、なんで引数の数や型が同じじゃないといけないの? スタックポインタの調整が面倒だから?
- 916 名前:899 mailto:sage [2015/07/09(木) 05:57:34.42 ID:KPxfvpRW.net]
- いつのまにかGCCも末尾再帰じゃない末尾呼び出し最適化もやってた。引数の数や型が違っても。
Cでも需要があるのかな。 extern int foo(int); int bar(char *a) { return foo(10); } bar: .LFB0: .cfi_startproc movl $10, %edi jmp foo .cfi_endproc
- 917 名前:899 mailto:sage [2015/07/09(木) 06:13:19.89 ID:KPxfvpRW.net]
- www.drdobbs.com/tackling-c-tail-calls/184401756
にGCCがTCOする条件が解説されてた。Cだとややこしいけど需要はあるらしい。 連投&スレ違い失礼しますた。
- 918 名前:デフォルトの名無しさん mailto:sage [2015/07/09(木) 06:35:27.16 ID:OEKsJpEx.net]
- >>904
>「引数が全く同じ」って、値じゃなくて、数や型が同じってことね。サンクス。 再帰で値が同じならそれは無限再帰と呼ばれる。 >逆に、なんで引数の数や型が同じじゃないといけないの? スタックポインタの調整が面倒だから? 引数の個数はcalleeではわからないから、面倒ではなく、出来ない。
- 919 名前:デフォルトの名無しさん mailto:sage [2015/07/09(木) 08:19:53.49 ID:e+1UNYHr.net]
- >>907
>再帰で値が同じならそれは無限再帰と呼ばれる。 Cだと副作用でメモリの中身が変わってるかもしれない >引数の個数はcalleeではわからないから、面倒ではなく、出来ない。 Cだと同じ関数の型の見え方がcallerとcalleeで違ったりするからね。 >>906みたく条件緩和できるがなかなかややこしい
- 920 名前:デフォルトの名無しさん mailto:sage [2015/07/09(木) 09:12:59.14 ID:LXpNU/xq.net]
- >>901
VSの色んな機能を使えるなら欲しいけど、vimやemacsのプラグインと同じ事しか出来ないならいらん
- 921 名前:デフォルトの名無しさん mailto:sage [2015/07/09(木) 10:48:24.29 ID:h1Dw9jX8.net]
- デバッガ観点で言うと末尾呼び出しの最適化されると
バックトレースが不正確になるのでやっかい 大規模な開発ではあえて無効にされることもあるよ
- 922 名前:デフォルトの名無しさん mailto:sage [2015/07/09(木) 10:56:32.05 ID:sAbBvj66.net]
- >>909
使えないの・・・?(´・ω・`) 詳細しらないけどきっと使えるんじゃね? VSのデバッガ使いたい
- 923 名前:デフォルトの名無しさん [2015/07/10(金) 07:10:09.65 ID:0h1M+LeE.net]
- CSS使えない奴よりマシ
- 924 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 10:31:36.54 ID:j3g7NrlE.net]
- (A -> R) -> R は継続モナドになるわけだが、
R -> A や A -> R もモナドにできるの?
- 925 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 11:04:46.48 ID:XOUMSF+T.net]
- CSSいらない
>>913 m (r -> a) m (a -> r) モナドにしたったで
- 926 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 12:28:35.80 ID:j3g7NrlE.net]
- >>914
returnと>>=はそれぞれどうなるの?
- 927 名前:デフォルトの名無しさん [2015/07/10(金) 13:29:21.43 ID:NSmmAGhS.net]
- >>915
つうか (-> R A)と(-> A R)で普通に関数モナドな。 return = const (>>=) f g = ¥x -> g ( f x ) x
- 928 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 13:50:04.51 ID:j3g7NrlE.net]
- (-> R A)はそれで分かったが、
(-> A R)のreturnと>>=は?
- 929 名前:デフォルトの名無しさん [2015/07/10(金) 16:23:11.40 ID:NSmmAGhS.net]
- >>917
>(-> R A)はそれで分かったが、 >(-> A R)のreturnと>>=は? あたま大丈夫?
- 930 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 18:30:43.38 ID:j3g7NrlE.net]
- は?
- 931 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 19:04:13.42 ID:l6c5ofse.net]
- たしかにあたま大丈夫じゃないリスクはゼロではないが、自動車より安全だ
そして、自動車より安全と発言した人間が狂っていると断言できる者はあまり多くない
- 932 名前:デフォルトの名無しさん mailto:sage [2015/07/10(金) 23:42:39.10 ID:ucCSbhAH.net]
- >> 919
Rが具体的な型で、Aがなんでもいい型、って言いたいわけだね。 (A -> R) はモナドにならないよ。というか、Functor(共変関手)にならない。 代わりにContravariant(反変関手)になる。 newtype Op a b = Op { getOp :: b -> a } instance Contravariant (Op a) where contramap f g = Op (getOp g . f) (以上contravariantパッケージより) 共変関手にならない理由は、このサイトがわかりやすい。 kinokkory.hatenablog.com/entry/20131203/p1
- 933 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 09:25:20.24 ID:6sFnysGr.net]
- >>921
ありがと。 M(A)がモナドになる条件を簡単に言えるのかな?
- 934 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 09:30:00.73 ID:S9PAD2xf.net]
- Emacs使いはflycheckが便利そう
https://github.com/flycheck/flycheck 既出ならスマソ
- 935 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 09:42:11.42 ID:Yc/lws0v.net]
- Cloud Haskellというものを知ったのですが
こういったノード間通信ライブラリを使ってる方がいたら バリエーションや感触を教えてもらえないでしょうか もしくはベタに書いたほうがいいでしょうか
- 936 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 11:24:25.49 ID:aYDDmLdu.net]
- 単体のライブラリの質は人気に比例する気がする
でもフレームワークや統合環境は質より量でごまかせるから人気はどうでもいい
- 937 名前:922 mailto:sage [2015/07/11(土) 13:00:32.09 ID:6sFnysGr.net]
- >>921
教えてもらったサイトの「正の位置・負の位置」で解決しました
- 938 名前:デフォルトの名無しさん [2015/07/11(土) 15:05:57.90 ID:8xsgKabx.net]
- 岡部健の新作が来たゾ〜
- 939 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 15:12:01.82 ID:V/wpM/3h.net]
- あの人はなんでブログの記事まで作って個人に対して反論してるんだろうね
反論記事って言い合いを面白がってみてる人以外には何の得もない気がするんだけどなあ
- 940 名前:デフォルトの名無しさん [2015/07/11(土) 16:20:10.41 ID:obYDcaZK.net]
- Haskellは仕事で使える?
使えるとどうなる?教えて
- 941 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 16:44:05.06 ID:aYDDmLdu.net]
- もし仕事で使えると、無料で色々教えるのが勿体無くなる
- 942 名前:デフォルトの名無しさん [2015/07/11(土) 16:46:52.16 ID:obYDcaZK.net]
- どういう時に使う?教えて詳しく
- 943 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 20:42:56.70 ID:/RrsVJlS.net]
- そりゃ自分のタスクを自動化するのに使うんだろと
- 944 名前:デフォルトの名無しさん mailto:sage [2015/07/11(土) 22:25:31.98 ID:6sFnysGr.net]
- >>921
やっぱり自分はアホだった。全然分かっていなかった。 ファンクターにはなるがモナドにはならないものがあるはずだが、 その例が作れん
- 945 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 00:46:11.12 ID:KOjB2nQF.net]
- x^n+y^m=z^r 解は存在するか.だれも解けないといわれたビール予想
解けた方だけどうぞ ttp://blog.livedoor.jp/superprojectx/archives/1030198512.html
- 946 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 0
]
- [ここ壊れてます]
- 947 名前:z0K.net mailto: HaskellのガベコレシステムってJavaのそれよりかなりショボいらしいじゃん []
- [ここ壊れてます]
- 948 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 06:13:49.33 ID:/rMkRh/q.net]
- Haskell処理系のGCよく知らないけど、moving GCでも良いし
破壊的代入がなければwrite barrierもいらないから Haskellのほうが簡単というだけじゃなくて?>ガベコレ Javaは旧SunやIBMががんばった結果、細かい最適化はされてるだろうけど。
- 949 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 08:26:42.75 ID:zJqA9jr9.net]
- 科学的根拠もなくただショボいという意見は参考にならない
もうJavaは無視してC++のようにGCショボいけど速いやつを参考にしよう
- 950 名前:デフォルトの名無しさん [2015/07/12(日) 11:00:37.13 ID:AGKmbBWc.net]
- C++はGCショボいというよりない。。
ということでrustやろうぜ!
- 951 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 11:10:50.31 ID:s7w6GHZY.net]
- RustもGCないじゃん
- 952 名前:デフォルトの名無しさん [2015/07/12(日) 11:44:20.38 ID:fsP2XOSV.net]
- >>939
RCあるぞ。
- 953 名前:デフォルトの名無しさん [2015/07/12(日) 12:48:25.98 ID:KGquBeD3.net]
- Haskellでどんな作業を効率化できますか?
一例を教えて下さい
- 954 名前:デフォルトの名無しさん [2015/07/12(日) 12:52:34.01 ID:fsP2XOSV.net]
- 型のついた構文木の操作
- 955 名前:デフォルトの名無しさん [2015/07/12(日) 13:07:29.47 ID:KGquBeD3.net]
- お前らがこんなことやってるより
ストリーミングサイト作ったCavetube管理人のほうがすごいんだよなぁ
- 956 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 13:26:20.29 ID:kel+atw2.net]
- 誰々より誰々が凄いとかどーでもいいじゃん。
そんなの気にするより、そいつらのソース参考にするとかして Haskell を楽しんだ方が何倍も有意義だよ。
- 957 名前:デフォルトの名無しさん [2015/07/12(日) 13:33:21.56 ID:rAeLMId1.net]
- >>938
GCサポートは付いてるけどな。 RAIIで設計するとGCは遅くなるだけであまり意味ないから誰も使わないな。
- 958 名前:デフォルトの名無しさん [2015/07/12(日) 15:30:30.95 ID:ryFHmMNk.net]
- Cavetubeってなんですか
- 959 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 20:10:37.89 ID:abu6RaU0.net]
- 宣伝だろ
- 960 名前:デフォルトの名無しさん mailto:sage [2015/07/12(日) 20:16:28.54 ID:bkprvq+c.net]
- Darcsはなぜgitに敗れたのか
|

|