関数型プログラミング言語Haskell Part34at TECH
関数型プログラミング言語Haskell Part34 - 暇つぶし2ch31:デフォルトの名無しさん
21/12/31 20:42:25.11 aP8qPSMg.net
>>30のこれ
iterator (0:1:xs) = 1 + (iterator xs)
内部で
1+1+1+1+...が積みあがって最後に計算されるの?

32:デフォルトの名無しさん
21/12/31 20:58:03.01 bqUePCKa.net
>>31
それは処理系のimplement依存だから一概には言えないけど多分stack上に(1+)関数が乗っていって最後に確定した0が入ってから計算しそうな気がする

33:デフォルトの名無しさん
21/12/31 21:10:21.51 aP8qPSMg.net
>>32
了解しました

34:デフォルトの名無しさん
22/01/02 20:44:02.99 OOMiLRw0.net
>>30ちょと改変
wc6 = let
iter n [] = z
iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs
iter n (x:xs) = iter n xs
in (iter 0) . (False :)
wcc = wc6 . map chkspand2
これのseq n'が効けば+1+1+1+1が積みあがらないはず

35:デフォルトの名無しさん
22/01/02 21:09:40.82 OOMiLRw0.net
ghciで確認
>>30はスタックオーバーフローで止まった
>>34は止まらないからctr-Cで止めた

36:デフォルトの名無しさん
22/01/03 00:17:58.15 eS7vipFo.net
OOPでも、整数を他のオブジェクトとは全然違う形式にしないと
計算が遅過ぎてダサくなるよね
逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか

37:デフォルトの名無しさん
22/01/03 08:08:25.82 hLrwvjQQ.net
まぁコレは趣味による
Haskellでは性能面より可読性を重視するからな
それも使う人次第だけど
>>34のようにすればメモリも時間も節約できるけど可読性は失われる
どこまで我慢するかだけどオレは計算時間もメモリも線形までなら我慢して可読性を重視する
>>34だと入力に比例して要求されるスタック量が増える
線形までならしょうがないと思う
どのみち入力が大きくなるにつれてシステムが大きくなるのは元々しょうがないんだしその時の比例定数の違いまでなら我慢する
今具体的にやりたいことがあってその線形オーダーの無駄すら許されない状況なら考えるけど

38:デフォルトの名無しさん
22/01/03 11:20:12.64 TEX8BSo6.net
>>37
今回のお題はワードカウント、ファイルサイズがギガになる場合を想定
スタックなりヒープなりを消費しない手法は?です
Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...)
他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か)

39:デフォルトの名無しさん
22/01/03 12:59:34.38 hLrwvjQQ.net
今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな
特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな
しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?)
個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる
数学的研究対象とかにするなら別だけど

40:デフォルトの名無しさん
22/01/03 15:29:08.17 TEX8BSo6.net
>>39
今回なにを確認したのか
それは、Cで組むような単純繰り返しを同じ感覚でヒャッハーとhaskellの遅延評価で行うと
ヤバイと言う教訓とそれを回避する手法

41:デフォルトの名無しさん
22/01/04 16:11:04.31 h755Av8k.net
Haskellを身に付けた人は他の言語も使えると予想しますが、いくつもの言語の中からHaskellを選んで
プログラムを書くのはどんな課題、問題を解決したいときなんでしょうか

42:デフォルトの名無しさん
22/01/04 16:44:18.80 HuVGMWib.net
課題が「ガベージをコレクトしたい」だけだったとしても
じゃあ静的型は不要だとかジェネリクスは不要だとはならない
だから課題と関係ない部分を作り込む

43:デフォルトの名無しさん
22/01/05 10:28:01.47 imDyM2+l.net
Twitterの検索で
@ohagiya @kenokabe
と入れると楽しいよな

44:デフォルトの名無しさん
22/01/11 17:47:50.88 rZde0CTm.net
>>43
ひどすぎるだろこれ
可哀想に

45:デフォルトの名無しさん
22/01/14 10:48:22.13 3PF6dXYX.net
最新の怪文書も読んだけどさ、毛の壁は毎回毎回威勢だけは良いんだよなw
たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前)
「ちくわはもう死に体」(7年前)とかさ。
死に体なのに、つい最近もブログで恨み節w
ネズミ一匹、始末できないなんてだらしがないな

46:デフォルトの名無しさん
22/01/15 18:49:30.83 chCIM2fB.net
質問です
array と List の性能の差がいまいちピンと来ません
何か「この例ではどう考えてもarray、ほらこんなに性能に差が出る」って例ご存知ないですか?

47:デフォルトの名無しさん
22/01/16 12:22:44.80 f2QwXzzi.net
質問です
何かの文章で
square x = x*x
print $ square $ square 3
のようなプログラムをHaskell は
square $ square 3
→ square ( square 3 )
→ ( square 3 ) * ( square 3 )
→ ( 3 * 3 ) * ( 3 * 3 )
のようになる
コレを避けるためにseqを使えばよいとあったのですが試しに
import Debug.Trace
square x = x * x
const3 = trace "*" 3
main = do
print
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ const3
みたいなプログラムで試してみました
もし説明通りならconst3が2^15回呼ばれて*がいっぱい出てきそうですが、やってみると*は一個しか出てきません
コレは何故ですか?
ちなみにghcです
ghcがconst3の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか?

48:デフォルトの名無しさん
22/01/16 13:40:56.61 rC9oNTrC.net
メモ化は独自実装ではなく仕様
何かの文章は嘘
でも騙されたことがないので被害が存在しないし、加害者も存在しない

49:デフォルトの名無しさん
22/01/16 14:36:08.72 f2QwXzzi.net
>>48
仕様なんですか?
Language Reportかなんかに書いてありますか?

50:デフォルトの名無しさん
22/01/16 14:39:15.35 f2QwXzzi.net
何かの文章は "ウォークスルー Haskell" というやつでした
URLリンク(walk.northcol.org)
3 ではなく 1 + 2 でやってました

51:デフォルトの名無しさん
22/01/16 18:39:45.50 ZlAL8rfa.net
seqだと結果はどうなるんですか?

52:デフォルトの名無しさん
22/01/16 18:54:16.95 f2QwXzzi.net
>>51
square x = x * x

square x = seq x $ x * x
にして明治的に“xを評価してからx*xを計算せよ”に変えるともちろん*ひとつです
それは納得いきます
ウォークスルーHaskellにもそうなると書いてあるしHaskell Language Report 2010にもseqで正格評価になると書いてあります
なのでコレは納得いくんですがseqなしの場合の動作が文書と異なるように見えます
もちろん参照透過性があるので一度計算した結果をメモ化して再利用しても同じ答えにならないといけないので答え自体は同じになるわけですけど
コレはたまたまGHCの開発者が優秀でHaskellの標準動作としては保証されない事までやってくれてるだけなのか、標準動作としてメモ化しないといけないことになってるのかどっちだろうと
今のところ今自分が勉強してるプログラムにはseq入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし

53:デフォルトの名無しさん
22/01/17 04:24:56.47 FNscPcIY.net
銀の弾丸のHaskellをIT企業が採用したら市場を席捲できるのでは???
実際そうなると思う?

54:デフォルトの名無しさん
22/01/17 13:17:04.94 3dpBVALW.net
Windows10にVSCode入れて、Haskellを遊ぼうとしたけど上手く入らない。
コマンドラインで細かく入れて遊ぶしかないかな。

55:デフォルトの名無しさん
22/01/18 00:23:47.53 1uCkeDxh.net
URLリンク(www.haskell.org)
>GHCup is an installer for the general purpose language Haskell.

56:デフォルトの名無しさん
22/01/27 08:50:29.18 NJ4yaxSd.net
URLリンク(qiita.com)
コメント欄ひどすぎだろ
@stken2050(これ岡部健)が非道いので皆さん通報してほしい

57:デフォルトの名無しさん
22/01/27 10:10:34.06 orDFdZXN.net
毛さんは昔から色々酷いが
>>56のコメ欄の流れだけでいうと単に@Zuishinが分が悪いわ
珍妙な独自用語は早めに芽を摘まないといけない

58:デフォルトの名無しさん
22/01/27 11:59:44.42 oUTYjCet.net
岡部さんこんにちは

59:デフォルトの名無しさん
22/01/27 12:03:44.88 eY59BLQP.net
URLリンク(twitter.com)
引用
「Linuxの元になったMINIXが復権中。期待。」という自称ギークとの話』の魚拓を取りました URLリンク(nmuta.dip.jp)
(deleted an unsolicited ad)

60:デフォルトの名無しさん
22/01/27 23:00:32.74 7u9WcLA6.net
そうじゃなくて、PHPやHaskellごときが偉そうにすんなって事だろ。
質問者が来たらお茶菓子くらい出せ。
底辺やマイナー言語はそうするべき。

61:デフォルトの名無しさん
22/01/28 01:07:24.72 dNnJMVwD.net
誰かをディスるよりも、こういう話の方が面白くない?
URLリンク(www.reddit.com)

62:デフォルトの名無しさん
22/01/28 09:50:56.34 F+QYYxM3.net
>>60
そもそも質問者が来たと思ってないんだろう
強いて言うなら「命令者」が来たと思われてるね

63:デフォルトの名無しさん
22/02/01 14:44:50.86 VXi8EI6O.net
Qiitaの運営どうなってんのこれ
URLリンク(qiita.com)

64:デフォルトの名無しさん
22/02/01 15:19:04.39 rr+/bjEX.net
URLリンク(twitter.com)
(deleted an unsolicited ad)

65:デフォルトの名無しさん
22/02/01 18:35:16.11 e9RXuv9o.net
>>56
どいつも誰だか知らんしどーでも良いが
見た感じ、@Zuishinの記事は確かにしょぼい記事だが、@stken2050の反論にも無理があるな
@Zuishinに関しては、大きな主張をしている割に根拠がかなりしょぼいせいで、記事として価値が低くなっているように思える
対する@stken2050の反論だが、「排他的ではないので反対ではない!」云々は無理がありすぎ
「反対」という自然言語の単語が元々ガバガバなのは誰だって知ってるんだから、それに対して自分で勝手に厳密な定義を与えて、その定義に基づいて矛盾を指摘したって、そりゃ「日本語わかりますか」言われるわ
さらに@stken2050の反論ではwikipediaと異なる高階関数の定義を使っているが、それならwikipedia以上に信憑性の高いソース出して、英語版wikipediaに書かれている高階関数の定義に疑問を呈するのが筋
それをしてないせいで論理的にぶっ飛んで見える

66:デフォルトの名無しさん
22/02/02 12:32:50.68 4gWS4lIC.net
>>63
無事、記事が凍結されたね

67:デフォルトの名無しさん
22/02/04 08:30:39.02 iaw7RH3I.net
完全に荒らしやろあれ

68:デフォルトの名無しさん
22/02/08 08:58:59.73 t2yWr+Jt.net
Haskellって日本人に受けそうで実際一時期話題になったけど
結局下火になっちゃったね
なんでだろう

69:デフォルトの名無しさん
22/02/08 12:34:20.88 iTFetD6R.net
haskellでしばらく何かを学んだら、元いたところに帰っていくんじゃないかな

70:デフォルトの名無しさん
22/02/09 10:14:27.54 9eeUOmy1.net
型とGCが下火になったから
型無しならPython
GC無しならRustに行く

71:デフォルトの名無しさん
22/02/09 10:49:56.61 Lp+6eS6t.net
型下火になることなんてある?

72:デフォルトの名無しさん
22/02/09 13:51:00.40 LMpY9ePh.net
>>70の中では下火になったんだろ

73:デフォルトの名無しさん
22/02/09 14:32:04.90 4IAm5Mq6.net
両方なしならどこへ行けばいい?

74:デフォルトの名無しさん
22/02/09 16:30:45.01 tjRbJd/i.net
両方ないならAPIと言語が無関係なクラウドみたいな感じになりそう

75:デフォルトの名無しさん
22/02/09 19:00:25.72 /Rs/AQCx.net
Cじゃだめなん?
あと、型なしじゃなくて、動的型で良ければ、
Objective-Cがかなり自由度高かった気がする。

76:デフォルトの名無しさん
22/02/10 14:08:35.36 Rx8BtNec.net
単純に難しいからだろ
元の言語仕様はシンプルなのに、ソフトウェア工学的なノウハウに基づいてOOPと同等以上の実装を実現しようとすると、とたんに大量のGHC拡張と難解な型が出てきてわけわからんくなる

77:デフォルトの名無しさん
22/02/10 17:05:47.42 0/0SR33O.net
lensの型とか複雑すぎる

78:デフォルトの名無しさん
22/02/11 01:01:15.27 oG7lMZNP.net
setterの存在自体がマナー違反ということにすればある意味単純なんだよ
マナー違反したせいで複雑すぎるのは自己責任、言語のせいにするなってね

79:デフォルトの名無しさん
22/02/12 14:38:21.43 3EVMkjej.net
岡部健

80:デフォルトの名無しさん
22/02/12 14:59:18.26 MmDcA0PA.net
>>79
こいつに“H“はムリ(爆)
“三擦り半“で昇天するよw

81:デフォルトの名無しさん
22/02/13 02:50:13.95 gJE3VDE6.net
GHC方言とかの知識が豊富な奴ってどちらかといえば反抗的な性格だと思う
それなのに、オリジナルの仕様への忠誠心が高ければ高いほど有能みたいな誤解がある
その上更にいかにも忠誠心なさそうなキャラまで作られてるし

82:デフォルトの名無しさん
22/02/14 11:54:21.19 4AqyxcJv.net
最近数値計算の勉強してるんですけど、よく最近高速フーリエ変換を用いた乗算の高速化なんて話が出てきます
サイズの大きい整数の掛け算とかを高速化する手法で桁数n同士の乗算のコストをn log(n)に抑えるのだとか
これGHCのInteger型の乗算には応用されてますかね?
やっぱりそこまで速さに拘りたいならご自分でのスタンス?
GHCのソースが読めるほどのスキルはないのでよくわからない
そもそもGHCのソースってどこに転がってます?

83:デフォルトの名無しさん
22/02/14 20:10:36.04 TSLH56nb.net
>>82
ghc haskell ソース でググれば見つかる

84:デフォルトの名無しさん
22/02/14 20:56:01.04 uQiQyHca.net
ソースを1行も読まなくても分かることがいくつかある
IntとIntegerの二刀流ができるなら三刀流もできること
第二第三の型を追加するだけのためにコンパイラをコンパイルするのは無意味過ぎること

85:デフォルトの名無しさん
22/02/14 21:36:02.36 4AqyxcJv.net
>>82
見つからないorz
>>83
ちょっと数値計算の練習したいんですよ
例えば円周率10万桁とか
さすがに10万桁とかだとghcはデフォルトでは対応してくれないのかなと
仮にできるにしても10万桁×10万桁の計算で桁数^2オーダーで計算したのではその一個の掛け算で何年もかかってしまうことになりかねません
ただのarrayやlistなら10万要素位は扱ってくれそうですけど
ただHaskellでその手の大量データを扱うのは色々難しい問題があるらしいと言う話は聞いてたので今までは「そういうのはHaskellは向かない、そういう時はC」とか使い分けてました
しかしやはりHaskellでできないのは面白くないのでHaskellでもそういうでかいデータを扱えるスキルを身につけたいなぁというのもあります
まぁまだFFTでの掛け算プログラム勉強し始めたばっかりなので先は長そうですけど
とりあえず[Double]のFFTと逆FFT作ったとこまではやったんです
でもそこまで作って「アレ?もしかしてこんなの自作しなくてもそもそもHaskellのIntegerが最初からFFTで掛け算してるとかあるかも?GHCの開発者メチャメチャ優秀っぽいし」と思った次第

86:デフォルトの名無しさん
22/02/14 21:36:29.77 4AqyxcJv.net
あら、アンカー一個ずれ

87:デフォルトの名無しさん
22/02/14 21:54:21.41 BjFXlOcH.net
GMP使ってるかもしれないし使ってないかもしれないらしい[1]
GMP使ってるならFFTベースのSchonhage-Strassenが働くしGMP使いたいならライブラリ[2]がある
[1]URLリンク(stackoverflow.com)
[2]URLリンク(hackage.haskell.org)

88:デフォルトの名無しさん
22/02/14 23:13:34.14 4AqyxcJv.net
>>87
おお、thx
なるほどGMPというのを使ってるんですね
--Stack excangeより
GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits.
GMPではSchonhage-Strassenを使用しているようですが、小数点以下が何万桁もあるような数字を扱うようになるまでは、このようなことはないようです。
--wikiより
GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。
基本算術型としてフルワードを使う。
オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。
----
要するに自分でわざわざSchonhage-Strassenのアルゴリズム実装しなくてもそもそもintegerで実装済みという事ですね
そうじゃないかと思ったw
そりゃそうでしょうねぇ、こんな優秀なソフトが数値計算理論の最新の成果取り入れてないわけがないw
10万桁とかIntegerで扱えるのかな?
実はData.FixedにあるFixed aで100桁くらいは余裕というのは確認済みなんです
週末にでも桁数増やして実験してみます
ありがとうございました

89:デフォルトの名無しさん
22/02/15 00:40:37.96 2crEr/EW.net
Haskellの多倍長計算、昔は大変だったけど今はよくなった、みたいな記事が10年前くらいに書かれてた
URLリンク(tanakh.jp)

90:デフォルトの名無しさん
22/02/15 19:39:32.71 ujR6VeHM.net
>>89
おお、先人がいたww
いや〜Haskellって速さ求めるならあんまりいい選択肢ではなさそうですけどやっぱり挑戦してみたくなりますね
その人のページのリンク先がすごく参考になりました
ようやくChudnovskyの公式とかいうのがなんで最速なのかわかりました
収束速度そのものはどう考えてもAGMの方が早いのになんでChudnovskyの方が早いんだと
Binary Splittingという技使ってまとめて計算していく方法があるんですね
ちょっと感動しました
まぁともかくInteger型の計算で10億桁くらいまで実用的な?速度で計算できるもんなんですね
ボチボチやってみます

91:デフォルトの名無しさん
22/03/28 00:29:30.89 dN2icdd7.net
Haskell昔は日本でも人気あったのにどうしてこうなった

92:デフォルトの名無しさん
22/03/28 00:37:16.39 NMG6YJEi.net
人気ないって事?
そりゃそうでしょ?
お世辞にも使いやすいとは言えない

93:デフォルトの名無しさん
22/03/28 17:03:01.17 o+cr0I/L.net
>>92
使いにくいと感じるところを教えてください

94:デフォルトの名無しさん
22/03/28 18:04:03.42 kSkV8rOb.net
文字列操作のパッケージを作っている。
1文字づつ評価して処理するのは出来るけど
ループで実現しようとすると、上手くいかない。
[Char]型とString型で混ぜて作ったせいか
ボトムアップ方式で作るのが間違えなのか。
まだまだ初心者の愚痴。

95:デフォルトの名無しさん
22/04/07 21:21:24.28 v9cHeTKb.net
Stringは[Char]の別名だが

96:デフォルトの名無しさん
22/04/08 04:13:38.57 ZfK1p/yR.net
Haskell-jp slackってどうなの?

97:デフォルトの名無しさん
22/04/08 13:18:29.82 7u/c8YSR.net
とりあえず入ってみたら?

98:デフォルトの名無しさん
22/05/25 23:07:08.21 HGLTMsh1.net
>>91
純粋関数型といいつつ実際にはそうではないし
結局はモナドも使わなきゃ実用的なものは作れない
よく例題に上がるようなシンプルな書き方すると遅いし
Lispでも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される
そうこうしているうちにどんどん人は離れていったよ
理念が現実に負けたのだと思う・・

99:デフォルトの名無しさん
22/05/25 23:31:09.11 HGLTMsh1.net
あとそうだ
なによりもデバッグがあまりに困難すぎるし
デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば
作業環境が悪いのがまるで改善されないから嫌になる

100:デフォルトの名無しさん
22/05/27 23:36:10.66 IybSybG6.net
型はコンパイル時にしか存在しない
モナドクラスもコンパイル時にしか使わない
実行時に使われているのはモナドのインスタンスのみ
そのインスタンスは任意の言語で再発明できる
どの言語でデバッグしても困難は同じ
結局は再発明をやらなきゃ実用的な知識が身につかない

101:デフォルトの名無しさん
22/05/27 23:58:56.33 IeVDSTdQ.net
今だにprintfデバッグに頼ってるなんてHaskellくらいのものかもね・・

102:デフォルトの名無しさん
22/05/28 00:21:10.26 1xwNIN3l.net
Cのライブラリに丸投げする効率化を考えれば
デバッグの効率化にはこだわらない方が丸投げしやすい

103:デフォルトの名無しさん
22/07/18 03:26:49.61 zDzunRmU.net
なんでここまで人気なくなったんだろうな

104:デフォルトの名無しさん
22/07/18 14:14:58.82 IRYfc5Qz.net
声の大きい人たちが使わなくなっただけでは

105:デフォルトの名無しさん
22/07/19 17:39:52.93 6V/PH7AR.net
個人が言語を自作できるレベルになってる説
団体は必須ではない

106:デフォルトの名無しさん
22/08/07 20:06:46.56 My+goEll.net
ハマりました
次のコード通らん理由が分からん
import Data.Ratio
[[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ a*p+b*r, a*q+b*s], [c*p+d*r],[c*q+d*s]]
i [[ a,b],[c,d]] = [[d,-b],[-c,a]]
a :: [[Rational ]]
b:: [[Rational ]]
a = [[1%1,99],[0,100]]
b = [[100,0],[-99,1]]
main = do
mapM_ print $ [ a, b , i a , i b]
print $ (( i b ) *** ( i a ) ) *** b
実行時エラーで
prog: prog.hs:4:1-79: Non-exhaustive patterns in function
になる
一項目のprintの出力
[[1 % 1,99 % 1],[0 % 1,100 % 1]]
[[100 % 1,0 % 1],[(-99) % 1,1 % 1]]
[[100 % 1,(-99) % 1],[0 % 1,1 % 1]]
[[1 % 1,0 % 1],[99 % 1,100 % 1]]
を見てもどう見てもパターンマッチしてるのに?
何故?

107:デフォルトの名無しさん
22/08/08 19:26:19.73 NwZYLTPj.net
>>106
リストの長さがマッチしてない
長さが2でないリストをどこで作ったのかはソースを読めば分かる
***は長さが3のリストを返す

108:デフォルトの名無しさん
22/08/09 10:46:53.89 VUIfOlq+.net
>>107
あ、ホントだ
コピペミスかなんかか
thx

109:デフォルトの名無しさん
22/08/11 18:04:41.32 9dSVJvSP.net
おまいらこのクソ暑い夏をどうにかするCOOLなコードをHaskellで簡潔に書けんのか?

110:デフォルトの名無しさん
[ここ壊れてます] .net
URLリンク(hackage.haskell.org)

listen ~(w, a) = (w, (a, w))
この~はどういう文法なの?

111:デフォルトの名無しさん
22/08/25 21:14:39.81 +PRPT5FW.net
URLリンク(www.sampou.org)

112:デフォルトの名無しさん
22/08/25 21:15:08.79 3SQ1xNiu.net
stack でwxHaskell インストールしようとしたんだが、
> stack install wxHaskell
とすると
Unknown package: wxhaskell
とでてインストールできない。
StackだとwxHaskellインストールできないの?んなわけないと思うんだが。
公式見てもstackの場合の方法が書いてない。

113:デフォルトの名無しさん
22/08/29 23:25:47.74 mJ1Da6QY.net
stackage に入っていないからじゃないかな?
最近アップデートされていないし
並行処理も問題ありそうだし…
stack と GUI で検索したらこんな記事があった
URLリンク(www.stackbuilders.com)

114:デフォルトの名無しさん
22/08/30 19:30:33.33 XzDfLd3k.net
みんな中央集権クラウドに騙されてる

115:デフォルトの名無しさん
22/09/10 21:18:15.99 Jyomj+F3.net
ボトルネックは事実上バグと変わらないから
結局パフォーマンスを考えると
Haskellはバグが混入しやすい言語と言える
しかも入出力は正しいから解決がクッソ厄介で実用性はない

116:デフォルトの名無しさん
22/09/10 23:20:56.83 6vG8VA3K.net
ロマン思考言語_

117:デフォルトの名無しさん
22/09/11 00:14:39.94 HO9VQuZG.net
まあ合ってるな

118:デフォルトの名無しさん
22/09/20 01:04:13.74 zJWv8hkC.net
ghci --show-options | wc -l
Output: 1200

119:デフォルトの名無しさん
22/09/24 01:20:51.22 v6+/ywPo.net
書き込んでいた専門家たちが書き込みをやめたので下火になっている感が出ているわけですね。

120:デフォルトの名無しさん
22/09/24 02:26:09.94 vtJ0GRzX.net
イヤ、でも実際した火なんじゃない?
やっぱりHaskellで“性能”と“可読性”の両立を図るのはかなり難しい
やっぱり言語の生い立ちというか、性格というか、性能面、特に速度面の性能面はどうしても優先順位が低い、しかし実務上はもちろんそこは最重要factorだからそこがでないとした火になるのもやむを得ないかと

121:デフォルトの名無しさん
22/09/24 03:13:03.66 v6+/ywPo.net
仕組みはわからんが計画的だろ。
言い換えると、騒ぐ奴らがうざいから騒がなくなるまで下火なんだろう。

122:デフォルトの名無しさん
22/09/24 03:21:31.25 cIbikbIQ.net
てか元々世界のメジャーな言語に躍り出ようというつもりなんかHaskellコミュニティにはないのかもね
Haskellコミュニティなんて学者の集合体でしょ?
実務になんか元々興味ないんじゃない?

123:デフォルトの名無しさん
[ここ壊れてます] .net
StackでGUIプログラミングしたいのですが、stackでインストールできるライブラリで
おすすめのものはありますか。

124:デフォルトの名無しさん
22/09/27 18:16:48.82 2m9lsdvh.net
haskellで作ったチェスゲームありますか
コマとボードはきれいなグラフィックで
マウスでコマを動かすチェス

125:デフォルトの名無しさん
[ここ壊れてます] .net
来年のRustがこの状態。

126:デフォルトの名無しさん
22/09/27 19:55:55.43 CVmtKHy4.net
Haskellに飛びつく層は
Rustには飛びつかんよね
Rustには面白みが無い

127:デフォルトの名無しさん
22/09/27 20:30:27.34 Ctbd02WQ.net
とにもかくにももう少しHaskellは速度性能を出すための方法の標準化について詰めてほしい
Haskell2010の文章のメモ化の部分の詰めがダメすぎる
実情のGHCとかで提供されてるものと差がありすぎて意味がわからん
GHCでの研究成果をもっと標準仕様に取り入れてほしい
何をどうやったら確実にドレコレはメモ化されるかハッキリ文書化してほしい

128:デフォルトの名無しさん
22/09/28 02:23:18.14 4krAnsc6.net
整理する気がないからな
どんどんカオスになって行く

129:デフォルトの名無しさん
[ここ壊れてます] .net
いまだにGHCというとGuarded Horn Clausesの方のGHCを先に思い出す

130:デフォルトの名無しさん
22/10/01 19:53:52.72 7gwAD0df.net
1番実用的な関数型言語やその影響が強い言語って何になるの?

131:デフォルトの名無しさん
22/10/01 20:00:27.14 IQLzQmPp.net
Cじゃね

132:デフォルトの名無しさん
22/10/01 22:58:35.36 76wmMtDf.net
標準規格を一番忠実に実装した奴が優勝みたいな考え方は全然数学的ではない

133:デフォルトの名無しさん
22/10/03 18:02:59.08 LGdcguEE.net
lisp系やocamlとか。

134:デフォルトの名無しさん
22/10/04 08:48:04.42 S20URLlI.net
ルールがない状態からルールが守られている状態へ誘導するか
何もしてないのに持続するルールを拾い集めるかの違い

135:デフォルトの名無しさん
22/10/07 20:15:05.17 xpYSJYo6.net
F#では。

136:デフォルトの名無しさん
22/10/07 20:28:34.11 lAeL408c.net
Erlang

137:デフォルトの名無しさん
22/10/14 22:28:23.68 GVf4qcGD.net
ラムダや <- や case で束縛される変数の値は二回以上計算されない
seqは計算のタイミングを変える効果しかない
難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない

138:デフォルトの名無しさん
22/10/14 23:54:06.57 91YiMGAd.net
でもhaskell 2010 reportには評価順を変える方法はseqしか規定されていない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない

139:デフォルトの名無しさん
22/10/15 08:05:01.19 /BlEbfcm.net
>>138
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと
個人の感想を排除するべきという思想はどこにも規定されてないでしょ

140:デフォルトの名無しさん
22/10/15 09:49:59.76 fUoifk8c.net
メモ化に関しては俺も>>138と同じような感想持ってるな

141:デフォルトの名無しさん
22/10/15 10:11:19.74 /BlEbfcm.net
ある人の感想が別の人の感想と同じになる保証はどこにもない
保証がなくても特に問題ないと判明したならそれでいい

142:デフォルトの名無しさん
22/10/15 10:19:45.48 +yYiQ+MP.net
一番嫌なのはネットに転がってるすごいスッキリしたプログラムがあって「おお、すげぇ」と思っても結局それはGHCのメモ化の恩恵でしかなくHaskell本来のそれではないので別の処理系では通用しないものであったりする事
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね

143:デフォルトの名無しさん
22/10/15 11:46:05.26 fUoifk8c.net
まあ実際のところメモ化を考え出したら
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり

144:デフォルトの名無しさん
22/10/15 15:59:55.52 /BlEbfcm.net
LispとHaskellの違いで重要なのは
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ
そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない

145:デフォルトの名無しさん
22/11/03 00:12:52.63 A4mGU1Ql.net
GHCがデファクトだしこだわりがなければ他のコンパイラを使うこともないでしょ
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い

146:デフォルトの名無しさん
22/11/03 01:14:31.73 +2fbLBnA.net
Symbolicsが失敗した事例を思い出す
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった

147:デフォルトの名無しさん
22/11/03 06:02:33.84 A4mGU1Ql.net
静的な型付けによる頑健性だとrustがあるしなぁ

148:デフォルトの名無しさん
22/11/03 11:53:42.15 k32TY8HF.net
結局のところHaskellの言語策定をしてるコミュニティは学者さんのコミュニティで実用的な性能を向上させる事にそもそも興味ないから実務面での有用性を期待するのは無理やね

149:デフォルトの名無しさん
22/11/04 01:33:00.25 ggdePY4U.net
まあそうだろうな

150:デフォルトの名無しさん
22/11/05 10:09:23.49 nyx0vuE5.net
>>142 の指摘って他の言語のGCにもそのまま当てはまると思う。

151:デフォルトの名無しさん
22/11/06 14:53:18.67 p6fV7yyc.net
Haskellで開発している会社ってどこがあるの?
検索するとHERPやTuruCapitalしか出てこない…

152:デフォルトの名無しさん
22/11/06 16:00:47.05 8Hp8Ymz2.net
GHC9.4.3 リリース

153:デフォルトの名無しさん
22/11/06 16:35:55.22 MgGeIf3l.net
Haskell wikiに載ってるやつ見るに、部分的にHaskellを使うって感じかなぁ

154:デフォルトの名無しさん
22/11/06 18:08:25.72 SOHxH3HV.net
>>151
一時期富士通が募集してたことがあったような
もうないからやめたのだろうけど

155:デフォルトの名無しさん
22/11/06 19:47:21.37 p6fV7yyc.net
あと朝日ネットの募集要項はHaskellがありました
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)

156:デフォルトの名無しさん
22/11/07 00:00:47.60 35GjxAYG.net
facebookも使ってた気がする。

157:デフォルトの名無しさん
22/11/07 00:41:59.56 aVSF4vDw.net
Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
あえてHaskellを使う意味がない、みたいな…

158:デフォルトの名無しさん
22/11/07 11:14:09.19 uMWKgAVp.net
オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない

159:デフォルトの名無しさん
22/11/07 12:17:58.82 y2qdzeiV.net
>>157
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか

160:デフォルトの名無しさん
22/11/07 12:18:26.38 y2qdzeiV.net
誤操作スマソ

161:デフォルトの名無しさん
22/11/08 09:36:33.50 VjMrXhSs.net
消費者目線ではGHCはフリーソフトだからコストが高いとは言えない
コストという物差しが万能ではない具体例がいま出た

162:デフォルトの名無しさん
22/11/09 01:51:03.18 3Bh922De.net
まあ学者さんたちのお遊びだからね・・

163:デフォルトの名無しさん
22/11/09 10:38:48.12 wL144bz5.net
どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない

164:デフォルトの名無しさん
22/12/02 14:29:56.51 fOU9+Fqp.net
Haskellまだイキテル?

165:デフォルトの名無しさん
22/12/03 12:50:06.92 HJhX36nM.net
無生物であることは保証する
何も実験してないのに保証することを数学的と言えないこともない

166:デフォルトの名無しさん
22/12/12 16:34:32.76 Yq3RU8vo.net
Unreal Verse
URLリンク(simon.peytonjones.org)
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか

167:デフォルトの名無しさん
22/12/13 21:33:17.94 s5AI7uvQ.net
ちょっとやってみるかと思ったら
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし

168:デフォルトの名無しさん
22/12/15 08:50:05.16 hYy+q+Gy.net
>>166
10年越しのビジョン実現で胸熱
URLリンク(pc.watch.impress.co.jp)
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。
それにしてもSPJを引き抜くなんてゲーム業界はすごい

169:デフォルトの名無しさん
22/12/15 11:15:36.01 3Q63kYiw.net
いや15年越し
URLリンク(game.watch.impress.co.jp)
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。

170:デフォルトの名無しさん
22/12/17 23:16:08.75 7V76W+iX.net
HaskellでWebシステムのバックエンドを開発したときのメモリ使用量は
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?

171:デフォルトの名無しさん
22/12/23 15:37:27.80 Rf1vHPUu.net
サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?

172:デフォルトの名無しさん
22/12/23 20:44:32.65 Gou4DLut.net
>>171
明示的に変換しなきゃいけないのは事実だがその原因はC言語じゃない
言語と無関係だからこそHaskell2010でもC言語でも同じデータ構造が使える
>>170
データだけ見ればメモリ使用量を同じにすることは可能

173:デフォルトの名無しさん
22/12/29 17:00:27.04 ZBF5EoRT.net
モノイド、関手は習得できたけど
自然変換で躓いてる

174:デフォルトの名無しさん
22/12/29 23:24:37.93 pM4wQIt0.net
今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい

175:デフォルトの名無しさん
22/12/30 12:18:58.51 /hxsvxNk.net
ところでwxHaskellが流行らないのはなぜ?
wxが流行ってないからかな?

176:デフォルトの名無しさん
22/12/30 13:53:40.82 FXsz7+hW.net
本当に必要なのはドリルの大量生産ではなくドリルでもなく穴だからかな

177:デフォルトの名無しさん
22/12/30 19:21:21.60 dTZ5gB6H.net
Haskellはすでに見放されてる感ある

178:デフォルトの名無しさん
23/01/02 01:15:52.75 jETc9FsM.net
>>177
そうなの?それは実務的な意味で?

179:デフォルトの名無しさん
23/01/02 03:01:15.30 /m9PT5PE.net
ステマが酷すぎた。

180:デフォルトの名無しさん
23/01/02 03:01:59.29 /m9PT5PE.net
言いなおそう。
某出版社のステマが酷すぎた。

181:デフォルトの名無しさん
23/01/03 00:10:20.46 7mh2KVDC.net
見放されるようになったのは、
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。

182:デフォルトの名無しさん
23/01/03 04:29:29.65 yYGSV1g6.net
技術評論社のせいでは?

183:デフォルトの名無しさん
23/01/04 05:08:58.65 peYJ5uzH.net
メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい

184:デフォルトの名無しさん
23/01/04 18:10:50.86 HUTbVNXS.net
PureScriptに移行しようぜ
正格評価で使いやすいし

185:デフォルトの名無しさん
23/01/05 03:59:19.12 PBBtO4Nd.net
しかし無限数列とか表現できなくなるのがなぁ

186:デフォルトの名無しさん
23/01/05 12:24:48.41 dQdtWkz5.net
あんなもの現実には扱えないからな
適当な数値を上限にしとけばいいだけ

187:デフォルトの名無しさん
23/01/05 13:19:36.00 PBBtO4Nd.net
イヤ、“表現できる”ってとこに意味があるんだよ

188:デフォルトの名無しさん
23/01/05 14:40:58.83 dQdtWkz5.net
その割にデメリットの方が大きすぎる
やはりいらないよ

189:デフォルトの名無しさん
23/01/14 23:43:44.49 vLwyb8f9.net
PureScriptと被ってるかな?
[GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](URLリンク(discourse.haskell.org))

190:デフォルトの名無しさん
23/01/17 00:55:50.42 zIKNxshB.net
無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある

191:デフォルトの名無しさん
23/01/17 01:31:37.81 PP1OxyD+.net
生物学関係ないな

192:デフォルトの名無しさん
23/01/17 03:13:49.00 zIKNxshB.net
言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう

193:デフォルトの名無しさん
23/01/17 08:07:29.90 Inpyi8aQ.net
無意味な比喩表現

194:デフォルトの名無しさん
23/01/19 01:20:46.84 cE+DUb2P.net
クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした

195:デフォルトの名無しさん
23/01/19 07:47:39.45 7wHhBGeN.net
意味不明
もう少し文章を書く練習をしろ

196:デフォルトの名無しさん
23/01/19 17:42:25.26 ugYwIpAQ.net
嘘を書くのをやめろって言われない努力はしてる
現に、嘘だと言われない

197:デフォルトの名無しさん
23/01/19 20:45:58.03 LuniV29G.net
間違ってさえいない文章
真偽以前に中身がない

198:デフォルトの名無しさん
23/01/19 20:49:17.03 LuniV29G.net
それっぽいだけで少し読めば大したことすら書かれてないのがわかる

199:デフォルトの名無しさん
23/01/19 21:18:32.97 ugYwIpAQ.net
「わかる」と「意味不明」は矛盾しそう
どっちかが嘘ついるのでは

200:デフォルトの名無しさん
23/01/19 21:33:25.41 QROh3L3M.net
>>199
お前読解力もないのか
もうこのスレ来るなよ

201:デフォルトの名無しさん
23/01/19 21:38:24.06 CHvJHSS4.net
お前も反応すんなよ

202:デフォルトの名無しさん
23/01/20 01:52:23.49 jpIFaaML.net
いくら話題がないからって

203:デフォルトの名無しさん
23/01/21 13:30:02.33 ms4pFp6J.net
職業倫理が苦手です

204:デフォルトの名無しさん
23/01/21 16:31:20.60 c9rqNig0.net
スレチ

205:デフォルトの名無しさん
23/01/29 20:58:33.14 3238s/rq.net
教科書の通りなのになんでエラーになるんだろう?
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)

206:デフォルトの名無しさん
23/01/30 02:11:06.80 jVdK8GQm.net
>>205
fork (f, g) h = (f h, g h)
では?

207:デフォルトの名無しさん
23/01/30 04:31:24.57 KsiNNj/4.net
>>206
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL

208:デフォルトの名無しさん
23/02/01 14:35:45.13 RAEJFXsc.net
Haskell使い(でLinux使い)の皆さんってxmonad使ってますか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
 where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?

209:デフォルトの名無しさん
23/02/17 00:17:58.82 x2uQcODA.net
ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ

210:デフォルトの名無しさん
23/02/18 07:53:47.68 pwjCq/Fb.net
>>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)

211:デフォルトの名無しさん
23/02/23 22:53:40.11 3VcdShfb.net
すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)

212:デフォルトの名無しさん
23/02/24 02:14:24.44 PIH/rCf2.net
>>211
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。
型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。

213:デフォルトの名無しさん
23/02/25 11:21:45.77 h/PI1ikt.net
>>212
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree

214:デフォルトの名無しさん
23/04/29 14:07:24.45 AoTbqg9O.net
マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
URLリンク(qiita.com)
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?

215:デフォルトの名無しさん
23/05/01 00:30:45.06 PDTetkfq.net
>>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician

216:デフォルトの名無しさん
23/05/03 20:58:10.10 ioA1phJ7.net
>>214
英語で調べてもそんな話出てきたことはないな。

217:デフォルトの名無しさん
23/05/03 21:14:18.69 ioA1phJ7.net
これにもそんなストーリー書いてない
URLリンク(pdfs.semanticscholar.org)

218:デフォルトの名無しさん
23/06/09 14:58:05.85 GYy2ex4t.net
lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
URLリンク(en.m.wikipedia.org)

219:デフォルトの名無しさん
23/06/20 00:30:03.89 qm9+2t5E.net
do 記法でのメモ化について質問です
例えば

do
let x <- someComplexExpression
print $ f x
print $ g x

のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します

220:デフォルトの名無しさん
23/06/25 14:24:09.04 H+Ij4nqZ.net
質問にさせていただきます
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )

221:デフォルトの名無しさん
23/06/25 14:24:14.71 H+Ij4nqZ.net
以下のようなerror が出てきます
prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します

222:デフォルトの名無しさん
23/06/25 14:43:47.12 H+Ij4nqZ.net
すいません、最後の行間違って修正前のやつコピペしました
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します

223:デフォルトの名無しさん
23/06/25 15:08:12.64 CDxt6lPg.net
型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。

224:デフォルトの名無しさん
23/06/25 15:23:50.61 CDxt6lPg.net
なんか Bard とかにつっこんでも情報得られるかも

225:デフォルトの名無しさん
23/06/25 17:33:31.79 OvK+yilq.net
ありがとうございます
現在まだ調べてる最中なんですけど
URLリンク(stackoverflow.com)
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら

226:デフォルトの名無しさん
23/07/03 23:45:49.20 QPaqlNti.net
値とmoduleどっちも含んだdata作ればいいのでは

227:デフォルトの名無しさん
23/07/04 00:24:50.19 +0TfLuMN.net
>>226
こういうやつですね
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1
でもコレだと例えば
x = FF 2 7
y = FF 4 7
x + y
のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと

228:デフォルトの名無しさん
23/07/04 11:11:04.93 rN492ZrW.net
この記事では剰余環を作っているみたいだけど、参考にならないかな
URLリンク(qiita.com)

229:デフォルトの名無しさん
23/07/06 01:04:07.84 sds/6LG1.net
みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
URLリンク(ideone.com)

230:デフォルトの名無しさん
23/08/05 13:07:07.29 1IOAcn45.net
hage

231:デフォルトの名無しさん
23/09/04 14:41:20.09 FcZAE9nJ.net
haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの

232:デフォルトの名無しさん
23/09/16 21:21:50.35 6682wM15.net
数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?

233:デフォルトの名無しさん
23/09/16 21:25:49.38 6682wM15.net
等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが

一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?

234:デフォルトの名無しさん
23/09/16 23:06:28.20 XG1/1lYn.net
順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?

逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?

235:デフォルトの名無しさん
23/09/16 23:13:33.62 6682wM15.net
数学的概念として等価だったりどちらが特殊とか言えないのは納得しています

ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です

236:デフォルトの名無しさん
23/09/17 02:24:17.53 yNwKlKA6.net
データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様

237:デフォルトの名無しさん
23/09/17 02:39:39.55 XqeO/FaW.net
組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる

238:デフォルトの名無しさん
23/09/17 23:47:13.96 70jB6wMR.net
初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな

239:デフォルトの名無しさん
23/09/18 10:00:00.93 E5yF50jH.net
俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない

240:デフォルトの名無しさん
23/09/19 19:53:05.75 QCYT99dv.net
unixのtouchを実現したいのですが

{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString

main = do
touchFile "hoge.txt"

touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?

241:デフォルトの名無しさん
23/09/19 19:54:00.31 QCYT99dv.net
unixのtouchを実現したいのですが

{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString

main = do
touchFile "hoge.txt"

touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?

242:デフォルトの名無しさん
23/09/19 19:58:16.28 QCYT99dv.net
すみません、書き込むボタンの反応がなかったので連投になってしまいました

243:デフォルトの名無しさん
23/09/19 20:14:24.31 a563RtWW.net
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ

244:デフォルトの名無しさん
23/09/19 20:14:45.64 a563RtWW.net
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ

245:デフォルトの名無しさん
23/09/19 20:18:27.88 a563RtWW.net
ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね

246:デフォルトの名無しさん
23/09/20 08:38:40.03 I55f6i4N.net
for i in * ; do touch anotherdir/$i ; done

247:デフォルトの名無しさん
23/09/20 08:53:25.46 I55f6i4N.net
>>246(bash)でお茶を濁した
perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う
正規表現とグロブ、ファイル入出力はできた
他に何かあるかな

248:デフォルトの名無しさん
23/09/22 12:15:07.45 NjV4q9P3.net
数値のリストl=[1,10,3]みたいなのを
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs

249:デフォルトの名無しさん
23/09/22 13:06:36.18 8SLDLfd5.net
URLリンク(jutememo.blogspot.com)

250:デフォルトの名無しさん
23/09/22 14:01:02.50 NjV4q9P3.net
putStrLn $ intercalate " " $ map show l
これでいけました

251:デフォルトの名無しさん
23/09/22 14:01:12.58 W8j4O+ex.net
泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな

252:デフォルトの名無しさん
23/09/27 15:30:51.70 9Ywamwi5.net
{-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ

253:デフォルトの名無しさん
23/09/27 17:59:16.99 k7PwLxD8.net
readが定義されたモジュールは別のLANGUAGEってこと?

254:デフォルトの名無しさん
23/10/11 15:16:15.28 1pnnvG+R.net
groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした

255:デフォルトの名無しさん
23/10/11 17:39:54.48 Fikp0OWy.net
>>254
import Data.Function
groupBy ((==) `on` snd)

結局かっこは使うのだけど、これがあなたの求めるものでしょうか

256:デフォルトの名無しさん
23/10/11 22:05:36.63 1pnnvG+R.net
括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!

257:デフォルトの名無しさん
23/10/18 05:38:40.90 vCrdR6l9.net
QuickCheckを勉強しているんですが
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい

prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True

258:デフォルトの名無しさん
23/11/16 18:41:54.01 wXoixzgD.net
岡部健、復活したよ!
エックス内を
“Ken140291“
で探してみて下さい。
最近登録したばかりの様です。

259:デフォルトの名無しさん
23/11/18 16:03:54.22 sLhTkQlu.net
自分で書き込んでいるのでは・・・。

260:デフォルトの名無しさん
23/11/19 15:31:44.23 /inwpH7b.net
>>248
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK

261:デフォルトの名無しさん
23/11/20 09:46:08.35 sZ0M6Dsh.net
>260 打ち間違えた!
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。

262:デフォルトの名無しさん
23/11/20 14:32:44.66 4MiKC4cJ.net
>>258
ぎゃははははははは

263:デフォルトの名無しさん
23/11/20 21:45:30.49 Jf1v4QK8.net
URLリンク(github.com)
> Unkown(気づいてない)
ウンコウンわろた。

264:デフォルトの名無しさん
23/11/20 23:57:47.37 N43MAaAU.net
スレチ

265:デフォルトの名無しさん
23/11/21 12:01:48.14 MS7pneIs.net
毛の壁くん復活してたのか!!

266:デフォルトの名無しさん
23/11/21 12:21:46.16 W0g+S6dW.net
URLリンク(archive.md)
毛の壁(岡部健)についてはここが詳しい

267:デフォルトの名無しさん
23/11/22 15:27:17.26 1OepVPCl.net
こんなコードがあるのですが
cumsum k = unfoldr next . (,) 0
where
next :: (Int, [Int]) -> Maybe (Int, (Int, [Int]))
next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs))
next _ = Nothing
acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?

268:デフォルトの名無しさん
23/11/22 16:31:30.12 PuIW3qrN.net
>>267
パターンガードかな
URLリンク(ja.wikipedia.org)(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

269:デフォルトの名無しさん
23/11/23 07:24:43.49 WRBO39fy.net
<-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました

270:デフォルトの名無しさん
23/11/24 17:42:26.91 V3Fz2AWZ.net
毛の壁のTwitterの新しいアカウントは
Ken140291
FPFSstutorial
leadmove3648637
です!!

271:デフォルトの名無しさん
23/12/04 12:27:24.28 GjmDAseS.net
>>270
ぎゃっはっはっはっはw

272:デフォルトの名無しさん
24/01/01 20:17:21.69 DcfOChZv.net
mapAccumL/Rの使いどころがよくわからないのですが
どういう時に使うとかの指針ってありますか?

273:デフォルトの名無しさん
24/01/09 22:50:44.14 3mg8b04T.net
ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください

274:デフォルトの名無しさん
24/01/12 10:55:28.35 cAhPSGjh.net
オワコン

275:デフォルトの名無しさん
24/02/29 01:38:01.78 d2gqoSk4.net
windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな

276:デフォルトの名無しさん
24/03/03 23:47:35.89 9XAeTkis.net
モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果

何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。

って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、

モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。

という結論に至った。

アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。

それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)

そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。

277:デフォルトの名無しさん
24/03/04 00:46:59.53 XMYw3zR0.net
箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する
そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド
ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな

278:デフォルトの名無しさん
24/03/04 01:02:22.82 vyClhVzf.net
ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)
そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。

279:デフォルトの名無しさん
24/03/04 01:22:40.61 XMYw3zR0.net
doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される
外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ
数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな

280:デフォルトの名無しさん
24/03/06 10:29:39.18 Yy7OLBEk.net
なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが

281:デフォルトの名無しさん
24/03/06 15:29:14.97 soRPwZI7.net
「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること

282:デフォルトの名無しさん
24/04/10 04:46:37.45 +L19CyUd.net
WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる

283:デフォルトの名無しさん
24/04/13 09:43:59.70 p3ysjEUv.net
rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな

284:デフォルトの名無しさん
24/04/13 10:37:58.47 VEwLcqlL.net
idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り

285:デフォルトの名無しさん
24/04/13 22:46:49.50 p3ysjEUv.net
色々知らないのがあった、ありがとう
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね

286:デフォルトの名無しさん
24/04/14 08:32:57.22 ZXz6cRZI.net
IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。
let x = 0 in return (x + 1) >>= x -> print x
こうすると変数xはシャドーイングによって同名の別の変数が生成される。
getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。

287:デフォルトの名無しさん
24/05/17 10:56:06.61 kEVlBeR0.net
参照カウントは0になれば即座にデストラクタを呼び出す
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと

288:デフォルトの名無しさん
24/05/18 22:55:12.58 HEnIptqp.net
cabalのバージョン上がってたので
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな

289:デフォルトの名無しさん
24/06/11 20:46:47.08 zqrBHeqN.net
IOモナドを拡張して、副作用をDBだけに限定したモナドとか作れないの?

290:デフォルトの名無しさん
24/06/20 02:22:58.45 s4SRXQdp.net
いつの間にかHaskellがC#より速くなってた…。
URLリンク(nshinchan01.hateblo.jp)

291:デフォルトの名無しさん
24/06/23 11:34:59.09 1+Xj+JzS.net
すみません
GHCのWindows11対応についての質問ですが
「9.2」以前のGHCはWindows11をサポートしていないとの事ですが

URLリンク(gitlab.haskell.org)

これはプログラムコンパイルをして
アプリケーションを生成できないだけで
コンソール内での実行や学習をする分には
「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。

ライブラリが9.0に対応していない物があり確認したいです。

292:デフォルトの名無しさん
24/06/23 21:13:21.29 1+Xj+JzS.net
度々すみません。
GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所
問題なくコンソールから実行して
結果のデータファイル生成できました。
取り敢えずはこれでやってみます。

293:デフォルトの名無しさん
24/07/03 21:32:31.40 FVo2vRsM.net
Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、
そもそもvalue -> value関数がいらなくない?
わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?

294:デフォルトの名無しさん
24/07/03 23:29:27.98 XPii5wC3.net
何を言っとるんじゃw

295:デフォルトの名無しさん
24/07/04 00:05:21.90 CIK9cQRa.net
computationにしたら理論的にカプセル化されるから、例えばT computationで専用に作った関数はU computationでは使いまわしできない。
だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。
でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず
U computationの関数として使えるようになったらもっと使いやすくなると思う。
というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。

296:デフォルトの名無しさん
24/07/04 14:17:13.04 PVQ//B0J.net
>>295
君の言うcomputationってどういう定義?

297:デフォルトの名無しさん
24/07/04 19:36:46.28 CIK9cQRa.net
しらんがな。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。
自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。
たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。
そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。
逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。

298:デフォルトの名無しさん
24/07/04 23:38:08.08 iUDrYol2.net
>>297
computationはvalueの一つ
`5 + 3`がcomputation
`Just 8`もcomputation

299:デフォルトの名無しさん
24/07/05 00:05:27.16 b38yqPqv.net
>>298
computationがvalueの一つだったら
概念的に computation ⊆ value
になるけど。
少なくとも拡張しているのだから
computation ⊇ value
にならないとおかしくない?

`5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。
計算して8(=5+3)を導いたなら8はcomputationだと思うが。
たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。

300:デフォルトの名無しさん
24/07/05 00:53:37.68 DkqpNxkH.net
>>299
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?

`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して

301:デフォルトの名無しさん
24/07/05 02:03:56.64 b38yqPqv.net
やっぱりHaskellスレにcomputationネタわかる人いたんだね。

>>300
>OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
ここは納得。

>導き出された結果と導き出す計算を区別して

なにか f: value -> computation型の関数を念頭に置いて
`f ()`はcomputationと言っているのでは?

意図を勘違いしているかもしれないですが、computationはあくまで導き出された結果でしょう。
それと、関数の返り値を導き出す計算をするにあたって出てくる効果を定義に含めようとしているように感じたのですが、
それはあくまで value -> computation型の関数を計算することに付随する性質であって
computation概念そのものじゃないと思うのですが。
あくまでcomputation概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。
そう考えると何か不都合な例とかあります?

302:デフォルトの名無しさん
24/07/25 23:56:39.51 zdgCFOr2.net
stateやioモナドってHaskell以外でも使われてるの?
maybeやeitherは関数型でない言語でも同等のものがあるから分かるけど、stateやioはいまいち便利そうな感じがしない

303:デフォルトの名無しさん
24/07/26 05:41:42.96 JmafwQnp.net
>>302
それはそうで、IOモナドは他の言語例えばC言語系列だとhoge();の";"部分を数学的に表現しただけだから。
見た目だけなら

x = x + 1;
printf("%d\n", x);



return (x + 1) >>= \x -> print x

do形式に直して

x <- return (x + 1)
print x

ただ、x <- の部分は同名の別の変数をシャドーイングしてるので、厳密にメモリの動作まで合わせるならIORefを使う。

Haskellから見たらメモリもIO処理(ファイル処理含む)も等しく外部への入出力という扱い。

だから、実用としては意味が無い。
一見複数行に見えるコードがその気になれば全部一行に出来るという感動はあるが、それだけだ。

Haskellを仲立ちにして数学とプログラミング言語の関係を研究したりには便利。

逆に自力でIOモナドをPythonなどの適当な言語で実装して全てのコードを関数っぽく書ける。
(Pythonだと演算子の自作が出来ないのでf = (>>=)みたいな事になる)

Haskellは便利だから使うものじゃない。
美しいから使うものだ。

あ、でも腐っても最新版は実行速度が結構上がってる(C#/Java並み)ので、選択肢から外される理由も減ってきた気がする。

304:デフォルトの名無しさん
24/07/26 05:47:41.29 JmafwQnp.net
そこまで気づくと、Gtk2hsとかWin32とかのC/C++からのラッパーライブラリを関数型言語っぽくない!って拒否する気持ちが分からなくなる。

305:デフォルトの名無しさん
24/07/26 06:16:02.54 JmafwQnp.net
あ、IOモナドの利点一応あった。
入力関数が他の関数の引数になったり、他の関数に関数合成出来ない。
Pythonのprint(input())みたいなコードや、len(input())みたいなコードは無理。
ここをしっかり分けることで、そういう変な使い方でのエラーは出ない。

もっと広い視点で言えば、入出力がIOモナドという型で分かれているのでネストの深いループの中でも入出力時に型を意識する必要があるので、そういうバグが大分減る。

手続き型関数型関係なく、ネストの深いループの中のデータが今どんな状態かを頭の中で把握出来る人はそう多くない。

だから、デバッグ時に解きほぐしていくんだが、関数型の方が切り分けしやすいかも?

306:デフォルトの名無しさん
24/07/26 06:20:50.81 EERDttnJ.net
Halkellのその先が見たい?
Rustにその答えが全て詰まっている

307:デフォルトの名無しさん
24/07/26 08:11:21.54 3P5OnSpM.net
どなたか教えてください。
数学の構成や命題の証明に使うならば、HaskellとOCamlはどちらがよいでしょうか。

308:デフォルトの名無しさん
24/07/26 12:15:47.14 f34zQmtT.net
Rustは、メモリが見えすぎるのがイヤだー
大したもの書かないから、GCありでお願いしたい

309:デフォルトの名無しさん
24/07/26 17:24:09.33 HoH4md/R.net
>>307
漠然としすぎ
やり直し

310:デフォルトの名無しさん
24/07/26 17:58:43.47 dth0vnjc.net
数学の構成?

311:デフォルトの名無しさん
24/07/27 00:29:15.86 r3Qeb3es.net
>>307
Coqという証明支援プログラミング言語をお使い下さい。

Haskellでも型プログラミングでゴリゴリ自力で命題の証明出来るそうですが、ある程度自動化されている専用言語の方が良いでしょう。
Coqはその中でも日本語情報が多いです。

312:デフォルトの名無しさん
24/07/27 00:43:27.29 r3Qeb3es.net
>>306
実用言語、特に組み込み分野を置き換えるのに期待されてる。
特集記事が無くてもお題スレ見たいな、Rustで問題を解こう的な連載が続いてる辺り、
特にinterfaceの編集陣の熱量は感じる。

Haskellも先駆者の記事によればWeb向けとしては神言語だそうだ。
ただ、周辺環境が未整備なだけで。
(なので、自分で全部作るという茨の道を進む「覚悟」が必要だとか)
未だにそうではないことを祈るが…。

313:デフォルトの名無しさん
24/07/27 00:53:19.48 r3Qeb3es.net
>>307
数の構成の方は、代数的型と基本的な方だと(一部)derivingで自動生成してもらえるから、Haskellはとても楽。
print関数で表示する部分だけでも自動生成してもらう価値はある。
(Read,Enum,Ordで生成されるのは確認済み)

data Nat = Zero | Succ Nat deriving (Show)

連続関数はPCそのものの限界で無理。
代数的型でメモリの続く限りの範囲なら少数も作れるかもしれない。
(その前にリストなり何なりで10進数位取り記法を導入しないと、Natは無限進数なので小数点第1位が1万とか、無限に桁上がりしない構造になる)

314:デフォルトの名無しさん
24/07/27 13:46:44.73 f/jP9uGd.net
>>307
結局こいつがなんの返信もしてない時点で適当に書き込んでたってことがわかるよ
真面目に相手をしないほうがいい

315:デフォルトの名無しさん
24/07/27 16:19:23.58 Z663WedI.net
>>313
ありがとうございます。

316:デフォルトの名無しさん
24/07/27 17:29:46.87 sW1zoNGb.net
>>311-313と>>314は同一人物だよ
騙されないで

317:デフォルトの名無しさん
24/07/27 21:26:10.11 wvv58UYW.net
知ってた

318:デフォルトの名無しさん
24/07/27 23:34:35.07 r3Qeb3es.net
>>316
他人を語ったつもりもないけどね?(ID見れば分かるんだし)
ちなみに>303-305も私だ。

1日2-3回くらいしか見に来ないから、書き込めることはまとめて書き込んだ結果です。

319:デフォルトの名無しさん
24/08/01 12:24:32.72 XzWUPxYY.net
プロセッサメーカはAIブームと見るやこぞってAI処理特化プロセッサの開発競争
関数型言語に特徴的な処理に特化したプロセッサは誰も作ってくれない

320:デフォルトの名無しさん
24/08/01 16:36:21.75 rWBa8MOA.net
それ必要か?

321:デフォルトの名無しさん
24/08/04 23:21:47.06 y1wQ9MUm.net
>>319
スタックコンピューターは、Lispの時にぽしゃった。

322:デフォルトの名無しさん
24/08/05 21:33:27.17 FcOscapW.net
日本企業がLisp専用マシン作ったが第五世代コンピュータプロジェクトが💩で何らまともな成果をあげられなかったからね。

323:デフォルトの名無しさん
24/08/11 17:42:41.08 7wNJGHOt.net
麓から山頂を目指す
foldl: 徒歩で登り切ったら滑り台で向こう側へ降りてゴンドラで再び山頂へ戻りゴール
foldr: ゴンドラでいきなり山頂へ。そこから向こうの麓まで滑り台で降り、そこから山頂へ徒歩で戻る。但しある場合は滑り台を途中で降りてそこから山頂へ徒歩で戻ってゴールにしてもよい
こういうこと?

324:デフォルトの名無しさん
24/08/12 21:44:35.95 EAbaqMlq.net
Preludeのライブラリドキュメントのページが最新のChromeでよく応答なしになるんですが!
現代PCでもプチフリを起こすページとか凄いですね!(怒)

325:デフォルトの名無しさん
24/08/13 01:44:03.00 3Ko8/FbA.net
>>324
hoogle使いんさい。

326:デフォルトの名無しさん
24/08/13 01:45:16.10 3Ko8/FbA.net
>>323
foldl = 末尾再帰を高階関数化
foldr = 普通の再帰を高階関数化

327:デフォルトの名無しさん
24/08/15 10:15:40.11 oieuoNWz.net
yesod を導入しようとして調べているのですが、今は stack 前提で cabal での利用は考えられていないのでしょうか?
導入記事では cabal の記述がありますが、
yesod init すると stack new 使えと表示が出ます。

328:デフォルトの名無しさん
24/08/15 10:30:38.08 oieuoNWz.net
yesod-bin 1.6.2.3 です

329:デフォルトの名無しさん
24/08/19 21:35:37.73 CkMOJkdv.net
rambda.jsのfold相当の関数を教えてください

330:デフォルトの名無しさん
24/08/24 05:56:24.20 WHJg2+SV.net
今ってghcupの時代じゃないの?
久しぶりにHaskell書こうと戻ってきた浦島太郎がstackを最新にしようと思ったら
ghcupとか紹介されてミーハーだから飛びついたわ

331:デフォルトの名無しさん
24/08/24 07:38:35.09 E4GXjFrz.net
Gカップ、ハアーハアー

332:デフォルトの名無しさん
24/08/28 21:41:00.96 HNkudrYA.net
Youtubeでしばらくの間丁寧にHaskellを解説していた人が
ある日「やってらんね、俺はもうHaskellでプログラミングしない」と宣言してHaskellから離れたのを見て
所詮その程度の言語なんだなとガッカリした

333:デフォルトの名無しさん
24/08/28 23:56:40.97 FNkSebMV.net
>>332
Haskellはモナドの実証言語という側面が強いから、モナドは結局よくわからないものという結論に達した今では話題もないし、Haskellで視聴回数稼げないんじゃない。

334:デフォルトの名無しさん
24/08/29 12:50:10.24 D5XAFbVY.net
自作ライブラリの(+)とPrelude.+が被って、Prelude.+使いたい時一々修飾するの面倒くさいしコードも汚くなります
被った時はデフォルトでPrelude.+を使うよって指定することはできないのですか?

335:デフォルトの名無しさん
24/08/29 12:53:31.30 1jszJs3n.net
>>332
+1

336:デフォルトの名無しさん
24/08/29 12:54:42.14 1jszJs3n.net
>>334
自作の方を修飾

337:デフォルトの名無しさん
24/08/29 14:06:11.00 gtm/5H5m.net
>>334
両方使う予定があるのに、何故わざわざ同じ記号にしたのか…。
自分は自作の方を(.+)とか、微妙に変えてる。

338:デフォルトの名無しさん
24/08/29 14:06:50.30 gtm/5H5m.net
使用例:
1 .+ 1
>2

339:デフォルトの名無しさん
24/08/29 16:27:15.59 Nq0HdWD9.net
やだやだ!修飾したくない!
どっちの+か特定して自動的に選択してよう!

340:デフォルトの名無しさん
24/08/29 16:57:49.70 YXIyrRhD.net
何の自作型だか知らんがSemigroup実装して(<>)にでもすれば

341:デフォルトの名無しさん
24/08/29 17:40:12.63 aIGVGYPU.net
就職しろよ

342:デフォルトの名無しさん
24/08/29 20:48:46.38 gtm/5H5m.net
>>339
独自の(+)を自動で使い分けてもらうにはNum型クラスのインスタンスにする必要があるけど、それでも見分けるには型が違わないといけない。
独自の(+)は、独自の型を受け取りますか?
そうじゃないとPreludeの(+)と判別する術がないけど。

343:デフォルトの名無しさん
24/08/29 20:51:12.20 gtm/5H5m.net
あ、できれば型宣言を見せて貰えるとアドバイスしやすい。

344:デフォルトの名無しさん
24/08/31 21:17:53.38 XbdVGeAf.net
ワカランドとして .+. と .-. と .*. を定義することにしました。しかし本質的に解決するにはNumクラスのインスタンス宣言するらしいですね。
しかし独自型同士の+と-、Rationalとの*、Rationalとの/はできますが、
独自型同士の*、独自型同士の/は定義不可能です。
従ってNumクラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。

345:デフォルトの名無しさん
24/09/03 18:48:39.95 yXFMfbtr.net
もしかしてData.Mapって遅い?
一日中検索かけてるような処理なら、もうMapを卒業するべきときか・・・

346:デフォルトの名無しさん
24/09/04 00:16:15.77 r/FGXedG.net
Data.Mapというより、リストが遅い。
とりあえずコンパイルの際にghc -O2とかghc -O3とかの最適化掛けてみる。
それでもなお速さを求めるなら、ByteStringとか使うと良い。
もしくは、正格評価版HaskellことIdris 2やRustに乗り換える。
(Idris1と2で互換性が無いらしく、別言語扱いされてる)
Haskellで速さを求めるとバッドノウハウが増えて本末転倒になる。
(そこまで苦労するなら素直に速い言語覚えた方が楽。それでも9.10.1はC#並みにはなった?かな?)

347:デフォルトの名無しさん
24/09/04 15:29:34.52 ZA+d8/X/.net
リストが遅い、しかし多くのデータ構造の構築はリストから(fromList)。
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか

348:デフォルトの名無しさん
24/09/04 16:12:14.21 LSV34QaC.net
lisp系言語はリストの操作が速いのに…

349:デフォルトの名無しさん
24/09/04 22:00:37.92 r/FGXedG.net
>>347
そういう事。
そして、そういう事を考えさせる時点でどうなの?ってのもある。
文法好きだし、普段使いで困らないけど、速さ求めるなら他の言語使うよねって。

350:デフォルトの名無しさん
24/09/04 22:22:04.95 r/FGXedG.net
>>348
遅延評価だからってのも地味に大きい。
自分はプログラミング言語「数学」の(未完全な)実装として見てるので、遅延評価じゃないと困るが。

351:デフォルトの名無しさん
24/09/05 00:27:39.10 mpd8c2G1.net
普段使いって何してんの
エロ画像収集とか?

352:デフォルトの名無しさん
24/09/05 04:50:37.33 l0HQxOqp.net
PythonやPerlの代わりにテキスト処理に使ってる。

353:デフォルトの名無しさん
24/09/05 18:56:54.85 k3Tfomjz.net
>>351
それ面白いと思って書き込んでんの?

354:デフォルトの名無しさん
24/09/06 09:50:34.80 zzPaKLb6.net
ブラウザでリンク画像が URLリンク(host)
みたいになってて最終的に jpg が表示されてるんだけど
URLリンク(host) をブラウザで開いても
jpg じゃなくて jpg ファイルのイメージがテキストファイルみたく表示される
こういうのは hoge.php の造りが悪い(たぶんhttpヘッダーが可笑しい)んだろうけど
じゃあなんで元頁では画像が表示されてたのかとか疑問は残る
それはともかく欲しいのは jpg ファイルなので
ブラウザに頼らずダウンローダーを描いた

355:デフォルトの名無しさん
24/09/06 09:52:13.17 zzPaKLb6.net
補足
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ

356:デフォルトの名無しさん
24/09/07 19:33:25.03 9PXNQc4Q.net
長大な処理となる関数を実行途中にRAM使用量が嵩んでいくとします
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれOSが『君にはもうRAM貸せないよ』と言ってくるでしょうが、ランタイムシステムは
①その時になってようやく解放できる場所がないか探し出す
  ①-i 今必要な最低限の確保ができたら即そこに記録して終わり
  ①-ii 強制的にminorGCを発動して、即そこに記録して終わり
  ①-iii 強制的にMajorGCを発動して、即そこに記録して終わり
  ①-iv 強制的にBlockingMajorGCを発動して、即そこに記録して終わり
  ①-v もはや解放できる場所は見つからないと判断したら例外終了
②何もせず例外終了する
③その他
どれですか?

357:デフォルトの名無しさん
24/09/07 19:35:13.52 9PXNQc4Q.net
文字化けしちゃいました。文字化けした?は1、2,3だと思ってください

358:デフォルトの名無しさん
24/09/08 00:17:59.58 m7MeNrY2.net
loop s なんちゃらかんちゃら
= do
 let final_score = long_thunk_score + s
   s' = sをなんちゃらかんちゃら
 modify' $ Data.Map.Strict.insert key final_score
 unsafePerformIO ( evaluate $ rnf final_score ) `seq` loop s' なんちゃらかんちゃら
このStateモナドは、final_scoreは状態Mapへ挿入される時はWHNFでしょうが、直後の行で完全に評価されています
この事はマップに挿入されたfinal_scoreへ影響を与えますか?
つまりマップへ挿入済みのサンクとしての値を後からUnsafePerformIOとevaluateとrnfを組み合わせて狙ったタイミングでRNF化できますか?

359:デフォルトの名無しさん
24/09/09 11:45:42.71 CQiqzRbc.net
>>356
黙って動いてるフリをする

360:デフォルトの名無しさん
24/09/26 23:16:42.97 eAiUCVhs.net
この言語まだ息してるのか?

361:デフォルトの名無しさん
24/09/27 00:41:23.43 ppX7mFe8.net
おまいらは圏論はちゃんとマスターしたか?
最近圏論のお勉強流行ってないみたいだが

362:デフォルトの名無しさん
24/09/28 08:56:06.97 boijaUwp.net
そもそもHaskellに圏論必要ないよ

363:デフォルトの名無しさん
24/09/28 11:20:55.86 szplrxFB.net
背景の理論を理解してないとbrainf*ckと同列のクソパズル言語にしか見えない

364:デフォルトの名無しさん
24/09/28 11:30:45.96 D4fCa7Ze.net
米田の何ちゃらの辺りで心が折れて終了

365:デフォルトの名無しさん
24/09/28 11:48:20.49 M6f6jLKS.net
>>363
> brainf*ckと同列のクソパズル言語
話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ
しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ

366:デフォルトの名無しさん
24/09/28 20:40:40.54 SDDTPU1M.net
>>361
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。
んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。
モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。
受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)

367:デフォルトの名無しさん
24/09/29 07:33:19.55 bBvJfaeS.net
ラムダと束縛変数をマスターしなければdo記法もマスターできないのを
すっかり忘れるぐらいポイントフリーが普及してるでしょ

368:デフォルトの名無しさん
24/09/29 08:45:10.72 3/NLN/+f.net
コーダーが数学の学習に使える時間なんて限られている
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない

369:デフォルトの名無しさん
24/09/29 09:32:49.44 twIz68VA.net
難解な数学を攻略できるなら
日本ではコーダーにはならないよな

370:デフォルトの名無しさん
24/09/29 10:15:01.09 AteoOTMZ.net
業界入るのに難解数学不要
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど

371:デフォルトの名無しさん
24/09/29 11:01:25.51 bBvJfaeS.net
人工的なルールに依存するのがクソパズルだが
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね

372:デフォルトの名無しさん
24/09/29 20:36:16.00 JU2vTa1F.net
圏論が全てのプログラミング言語の裏で動いてるとか適当なこと書くなよ

373:デフォルトの名無しさん
24/09/30 00:30:17.34 Kh4w53R0.net
>>368
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。
そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)
高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)
自分に投資できないと淘汰されるぞ。

374:デフォルトの名無しさん
24/09/30 00:59:39.85 Kh4w53R0.net
>>372
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)


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