関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
関数型プログラミング言語Haskell Part33
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/10(月) 18:17:36.49ID:L6eYQqyh188デフォルトの名無しさん
2020/04/06(月) 03:19:32.28ID:2h0eofxY >>187
どういうこと?
どういうこと?
189デフォルトの名無しさん
2020/04/06(月) 04:59:07.56ID:qqlpdYMz どういうことなの…
190デフォルトの名無しさん
2020/04/06(月) 05:06:41.75ID:kxm5p/Vo むしろ>>188-189がどういうことなのかわからない
191デフォルトの名無しさん
2020/04/06(月) 09:29:24.23ID:H7siEM1Y CabalのドキュメントのSecure repository のところ、
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、
なにかしないといけないの?
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、
なにかしないといけないの?
192デフォルトの名無しさん
2020/04/06(月) 22:36:41.14ID:MPGLY2yf このスレにはHaskellerなんかいないということがよくわかるな
193デフォルトの名無しさん
2020/04/07(火) 07:33:13.33ID:UmG0jYGu 本当に言語に詳しい奴ってのはその言語の弱点をしっかりおさえてるもんよ。
194デフォルトの名無しさん
2020/04/07(火) 07:36:16.93ID:SJ9J2Mim ?
195デフォルトの名無しさん
2020/04/08(水) 08:37:32.33 IO がオルタナティヴになったのって最近なのか
Aizu Online Judge のGHCだとコンパイルエラーになる
Aizu Online Judge のGHCだとコンパイルエラーになる
196デフォルトの名無しさん
2020/04/08(水) 22:07:27.52 let [a,b,c,d] = bokunofunction in 〜
このリストってWHNFにならないのな
このリストってWHNFにならないのな
197デフォルトの名無しさん
2020/04/12(日) 14:46:14.07ID:qLx35nn/ 目的は二つ
式を評価し過ぎないこと
副作用を実行し過ぎないこと
手段はただ一つ
最外簡約
式を評価し過ぎないこと
副作用を実行し過ぎないこと
手段はただ一つ
最外簡約
198デフォルトの名無しさん
2020/04/12(日) 18:21:55.43ID:flKXD0mo haskellでコロナ感染シミュ作るやつ誰もおらんのか?
199デフォルトの名無しさん
2020/04/12(日) 19:41:52.11ID:EEQhx4+u codewarの問題をHaskellで解いてみてるんだけど
、12000msタイムアウト多発する
リスト内包表記とか再帰はHaskellerはあんまり使わないの?
nに含まれる素因数とかすぐタイムアウトする
、12000msタイムアウト多発する
リスト内包表記とか再帰はHaskellerはあんまり使わないの?
nに含まれる素因数とかすぐタイムアウトする
200デフォルトの名無しさん
2020/04/12(日) 21:46:48.73ID:ogEgOOCw201デフォルトの名無しさん
2020/04/12(日) 22:42:42.81 Haskell で競プロ辛い・・・
200000個の整数読み込んで処理するような問題だとMLEになりがちだ
本当にそんなに使ってるのかよ・・・疑わしいなぁ
ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの?
だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね
もしかして
GHC「記憶域ください」
競プロシステム「あなたは上限なのでもうあげません」
GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」
ではなくて
GHC「記憶域ください」
競プロシステム「どうぞどうぞ」
GHC「どうも」
競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」
GHC「えっ!!!!」
こうなんじゃないか?
ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
200000個の整数読み込んで処理するような問題だとMLEになりがちだ
本当にそんなに使ってるのかよ・・・疑わしいなぁ
ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの?
だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね
もしかして
GHC「記憶域ください」
競プロシステム「あなたは上限なのでもうあげません」
GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」
ではなくて
GHC「記憶域ください」
競プロシステム「どうぞどうぞ」
GHC「どうも」
競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」
GHC「えっ!!!!」
こうなんじゃないか?
ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
202デフォルトの名無しさん
2020/04/12(日) 23:16:24.10ID:DjxEmd7z Haskellで競プロやるテクをまとめた同人誌があったような
203デフォルトの名無しさん
2020/04/12(日) 23:19:22.76ID:BXIcY8lZ 薄い本があったのか…
204デフォルトの名無しさん
2020/04/13(月) 04:15:51.10ID:WjwyibsT mleってなに?
Maximum likelihood estimation しか思いつかん
Maximum likelihood estimation しか思いつかん
205デフォルトの名無しさん
2020/04/13(月) 06:08:11.82ID:Er/sUT94 ぼくもそれしか…
206デフォルトの名無しさん
2020/04/13(月) 06:56:02.05ID:rnoGia+U 競プロ mle でググってみた
MLE
メモリリミットエラー(Memory Limit Error)の略
提出したプログラムが許可された以上のメモリを使用したときに出る
(一部のコンテストで採用されている表現)
MLE
メモリリミットエラー(Memory Limit Error)の略
提出したプログラムが許可された以上のメモリを使用したときに出る
(一部のコンテストで採用されている表現)
207デフォルトの名無しさん
2020/04/13(月) 12:33:53.04ID:tr0y4100 >>201
とりあえずローカルでプロファイル取って実行してみると
スペースリークや大量のGCの原因が推定できるはず
(「Haskell プロファイラ」とかでぐぐって)
未評価のサンクが大量に積み上がっているとか、
イミュータブルな連結リストの使い方が悪くて
大量の一時リストを作ってしまっているとか
あたりじゃないかと想像してみる
とりあえずローカルでプロファイル取って実行してみると
スペースリークや大量のGCの原因が推定できるはず
(「Haskell プロファイラ」とかでぐぐって)
未評価のサンクが大量に積み上がっているとか、
イミュータブルな連結リストの使い方が悪くて
大量の一時リストを作ってしまっているとか
あたりじゃないかと想像してみる
208デフォルトの名無しさん
2020/04/13(月) 13:06:48.82ID:pEw+DEbK タイムアウトのやつ
この問題やってて
ttps://www.codewars.com/kata/54d496788776e49e6b00052f/train/haskell
通らないコードがこれ
sumOfDivided :: [Integer] -> [(Integer, Integer)]
sumOfDivided xs = map (\x -> (x,foldr (+) 0 (filter ((==0).(flip rem x) ) xs)) ) $ prime_factors ( product xs) 2
where
prime_factors 1 _ = []
prime_factors m n
| rem m n == 0 = n : (prime_factors (quot m n) $ n+1)
| otherwise = prime_factors m $ n+1
こういう感じでコード組み立てるんだけど、他の問題でもしょっちゅうタイムアウト起こしてる
応答の速いコードにするにはどんなふうに変えていけばいいかを知りたい
cで言うと値コピーしてソートしないでポインタでソートすると速いみたいな
この問題やってて
ttps://www.codewars.com/kata/54d496788776e49e6b00052f/train/haskell
通らないコードがこれ
sumOfDivided :: [Integer] -> [(Integer, Integer)]
sumOfDivided xs = map (\x -> (x,foldr (+) 0 (filter ((==0).(flip rem x) ) xs)) ) $ prime_factors ( product xs) 2
where
prime_factors 1 _ = []
prime_factors m n
| rem m n == 0 = n : (prime_factors (quot m n) $ n+1)
| otherwise = prime_factors m $ n+1
こういう感じでコード組み立てるんだけど、他の問題でもしょっちゅうタイムアウト起こしてる
応答の速いコードにするにはどんなふうに変えていけばいいかを知りたい
cで言うと値コピーしてソートしないでポインタでソートすると速いみたいな
209デフォルトの名無しさん
2020/04/13(月) 21:38:04.55ID:tr0y4100210デフォルトの名無しさん
2020/04/14(火) 00:39:23.37 できるだけリストを避けて
読み込みもByteString 版 getContents と readInt の組み合わせで高速化
そして困ったときの Data.Sequence 様やで!
C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった
制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな?
くぅ〜疲れましたw これにて AC です!
読み込みもByteString 版 getContents と readInt の組み合わせで高速化
そして困ったときの Data.Sequence 様やで!
C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった
制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな?
くぅ〜疲れましたw これにて AC です!
211デフォルトの名無しさん
2020/04/14(火) 01:34:33.76 >>208
prime_factorsだけど
quotRem なら一回で両方得られる
探索は3から+2ずつ探すべき
n が√m を超えてしまったら探索を打ち切るべき
リストの整数全部に出てくる素因数を予めリストアップしたいんだろうけど
そのprime_factorsだと絶対に素因数が存在しない、(2を除く)偶数空間と√mの後の空間をmに達するまで探していてとてもとても無駄
この無駄はmが大きいほど酷いことになるが、見事に君のコードはproductなんてしてmを巨大化させている
例えば、1000000 の素因数は少なくとも1000 以降は存在しないのに1001, 1002, 1003, ... , 999998, 999999, 1000000 まで探すところを想像してみて
一目気づいたのはそんなところかね。先ずはそこを直してから一局といったところか
prime_factorsだけど
quotRem なら一回で両方得られる
探索は3から+2ずつ探すべき
n が√m を超えてしまったら探索を打ち切るべき
リストの整数全部に出てくる素因数を予めリストアップしたいんだろうけど
そのprime_factorsだと絶対に素因数が存在しない、(2を除く)偶数空間と√mの後の空間をmに達するまで探していてとてもとても無駄
この無駄はmが大きいほど酷いことになるが、見事に君のコードはproductなんてしてmを巨大化させている
例えば、1000000 の素因数は少なくとも1000 以降は存在しないのに1001, 1002, 1003, ... , 999998, 999999, 1000000 まで探すところを想像してみて
一目気づいたのはそんなところかね。先ずはそこを直してから一局といったところか
212デフォルトの名無しさん
2020/04/14(火) 01:52:08.41 >>207
まあ最終手段はそうなるんでしょうね
しかし早すぎる段階での最適化はたいてい悪手って言われてるし
その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて
いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
まあ最終手段はそうなるんでしょうね
しかし早すぎる段階での最適化はたいてい悪手って言われてるし
その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて
いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
213デフォルトの名無しさん
2020/04/14(火) 01:54:06.60 あ、いや、あれこれ作戦変えるヒントを得る為にプロファイリングするのか・・・
やっぱり手を出してみるか
やっぱり手を出してみるか
214デフォルトの名無しさん
2020/04/14(火) 10:48:29.31ID:Ez55nAck 異世界人「アルゴリズムをあれこれ変える」
主人公「言語をあれこれ変えてみよう」
主人公「言語をあれこれ変えてみよう」
215デフォルトの名無しさん
2020/04/14(火) 11:07:53.93ID:aAi/G6aw 時間とメモリ両面のcomplexity考えるのは最適化以前の話
216デフォルトの名無しさん
2020/04/15(水) 17:46:40.69ID:/WUIZ9Nz >>211
39の素因数って3,13よね?
√39が6くらいだから探索区間は√mじゃ不十分かなって
でも確かに偶数はいらないから2:[3,5..]でいいね
全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った
リストは早くするなら使わない方針なのね
Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
39の素因数って3,13よね?
√39が6くらいだから探索区間は√mじゃ不十分かなって
でも確かに偶数はいらないから2:[3,5..]でいいね
全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った
リストは早くするなら使わない方針なのね
Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
217デフォルトの名無しさん
2020/04/15(水) 17:47:28.61ID:/WUIZ9Nz お礼書き忘れたすみません
回答ありがとうございますなんとか通ってもらいます
回答ありがとうございますなんとか通ってもらいます
218デフォルトの名無しさん
2020/04/15(水) 19:54:09.51ID:JKZ0KcR7 >>216
なんの話かよく知らないけど39を素因数分解してるのなら、
約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ
√39以下の数字調べればオッケー
なんの話かよく知らないけど39を素因数分解してるのなら、
約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ
√39以下の数字調べればオッケー
219デフォルトの名無しさん
2020/04/15(水) 19:55:22.34ID:JKZ0KcR7 間違えた
「素因数分解してるのなら」じゃなくて「素数判定してるのなら」だった
「素因数分解してるのなら」じゃなくて「素数判定してるのなら」だった
220デフォルトの名無しさん
2020/04/16(木) 01:02:59.81ID:6p+dWGIK >>208
計算速度や使用メモリ量以前に、解が正しくないよ。
試しに sumOfDivided [8] やってみ。
もう少し言うと、prime_factors 関数がおかしい。
関数名に相応しくない計算をしていられる。
まずは、必要な個数の正しい素数列を作ることを考えた方がいいと思うぞ。
計算速度や使用メモリ量以前に、解が正しくないよ。
試しに sumOfDivided [8] やってみ。
もう少し言うと、prime_factors 関数がおかしい。
関数名に相応しくない計算をしていられる。
まずは、必要な個数の正しい素数列を作ることを考えた方がいいと思うぞ。
221デフォルトの名無しさん
2020/04/16(木) 01:13:24.21 >>216
あ、説明で嘘を吐いてしまった。確かに√m以降に素因数は存在しないは偽だった
それでも尚、√で打ち切っていい手筋は揺るがない。
√39より前の3を発見して、39 `quot` 3 (=13) に対して再帰的に同じことをする
ただし割ることを試すのは今割り切れた素数からね(同じ素数で複数回われることもある)。
もう一回3で割ろうとして失敗し、次は√13 を超えるので打ち切って、13 は素数と判定してリストに加える
だから結果として、√m 以降の素因数を取りこぼすことはない
あ、説明で嘘を吐いてしまった。確かに√m以降に素因数は存在しないは偽だった
それでも尚、√で打ち切っていい手筋は揺るがない。
√39より前の3を発見して、39 `quot` 3 (=13) に対して再帰的に同じことをする
ただし割ることを試すのは今割り切れた素数からね(同じ素数で複数回われることもある)。
もう一回3で割ろうとして失敗し、次は√13 を超えるので打ち切って、13 は素数と判定してリストに加える
だから結果として、√m 以降の素因数を取りこぼすことはない
222デフォルトの名無しさん
2020/04/16(木) 09:43:04.65ID:xRrLSzP4 >>221
素数系のアルゴリズムは手続き的にはよく知られたものが色々あるけど
それをHaskellっぽく(宣言的に)定義しろって言われると割と悩む
STMonadとか使えば手続き的な実装はできるけど何かに負けた気分になる
素数系のアルゴリズムは手続き的にはよく知られたものが色々あるけど
それをHaskellっぽく(宣言的に)定義しろって言われると割と悩む
STMonadとか使えば手続き的な実装はできるけど何かに負けた気分になる
223デフォルトの名無しさん
2020/04/16(木) 12:23:07.85ID:DtoAMVDb 速度あげようと思ったら、どうのように計算するかということに介入する必要があるから手続き的になるのはしょうがないのでは
224デフォルトの名無しさん
2020/04/16(木) 14:44:08.63ID:ta7mONc0 魔法を使える主人公がなぜか銃を乱射するというマナー違反
を許せない真面目系脇役の魅力
を許せない真面目系脇役の魅力
225デフォルトの名無しさん
2020/04/17(金) 17:52:04.90 騎士道はCで書くなど、汚い真似をして勝つことを認めていない
226デフォルトの名無しさん
2020/04/17(金) 18:51:48.64ID:Tw57yEwr ごきげんよう、高貴なるhaskellプログラマの皆様方
今日も可憐におプログラミングですことよ
ほほほ
今日も可憐におプログラミングですことよ
ほほほ
227デフォルトの名無しさん
2020/04/17(金) 23:16:02.21ID:kOeZUqy9 haskellマスターすると新型コロナにかからないってよ
228デフォルトの名無しさん
2020/04/18(土) 03:43:48.65ID:ehKqAcW4 コロナ菌に強い言語なん?
229デフォルトの名無しさん
2020/04/18(土) 11:31:33.48ID:v8V9P+IO C言語プログラムなどを実行すると電磁波の影響で身体への副作用が発生するからな
副作用を抑え人間本来の自然な免疫力を高めるのがhaskell
副作用を抑え人間本来の自然な免疫力を高めるのがhaskell
230デフォルトの名無しさん
2020/04/18(土) 12:26:02.03ID:kkncOpcu haskellマスターで彼女ができました!
231デフォルトの名無しさん
2020/04/18(土) 13:41:19.98ID:urv0mT/N >>229
我慢できずにモナドに手を出して感染する事例が後を立たない
モナドは自粛すべきと何度も言われているのに
屁理屈をこねて手を出す者が多すぎる
本当にHaskellに副作用がないのだと詭弁を弄せずごり押しするのならば
絶対にモナドをやるべきではないと言われている
我慢できずにモナドに手を出して感染する事例が後を立たない
モナドは自粛すべきと何度も言われているのに
屁理屈をこねて手を出す者が多すぎる
本当にHaskellに副作用がないのだと詭弁を弄せずごり押しするのならば
絶対にモナドをやるべきではないと言われている
232デフォルトの名無しさん
2020/04/18(土) 19:32:57.82ID:DCiZBX2v モナドを「やる」ってなんだよw
モナドを禁止薬物か何かと勘違いしてるのか?
すべての人間は二分される
すなわち「モナドである」人間と、そうでない人間、だ
俺はモナド
お前はモナドではない
「上」で待ってるで
モナドを禁止薬物か何かと勘違いしてるのか?
すべての人間は二分される
すなわち「モナドである」人間と、そうでない人間、だ
俺はモナド
お前はモナドではない
「上」で待ってるで
233デフォルトの名無しさん
2020/04/18(土) 20:20:58.00ID:aIlZnP1D おれモナド使いだけど、おまえ俺に使われてんのか
234デフォルトの名無しさん
2020/04/18(土) 20:52:26.11 C言語プログラムなどを実行するとストレスの影響で毛髪への副作用が発生するからな
脱毛を抑え人間本来の自然な論理を書けるのがhaskell
脱毛を抑え人間本来の自然な論理を書けるのがhaskell
235デフォルトの名無しさん
2020/04/18(土) 22:32:39.62ID:DCiZBX2v >>233
モナドに使われてるやつほど、自分はモナドを使ってると勘違いするよなw
モナドに使われてるやつほど、自分はモナドを使ってると勘違いするよなw
236デフォルトの名無しさん
2020/04/18(土) 23:24:30.65ID:jMxNMUbH モナドを使う時、モナドもまたあなたを使っているのだ
237デフォルトの名無しさん
2020/04/19(日) 01:35:32.46ID:WM8Q0HWB [状態モナド](https://wiki.haskell.org/State_Monad)を
[随伴](https://en.wikipedia.org/wiki/Adjoint_functors) on Rails
に乗せてみる。
``` code
type W x a b = (a, x) -> (b, x)
type S x a b = a -> x -> (b, x)
in_away :: W x c d -> W x b c -> W x a b -> W x a d
in_away cd bc ab = cd . bc . ab
in_home :: S x c d -> S x b c -> S x a b -> S x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = (.)
to_home = curry
to_away = uncurry
```
`to_home`が[記事](https://en.wikipedia.org/wiki/Adjoint_functors)での`Phi`
に、`ext`が[Kleisliのスター](https://en.wikipedia.org/wiki/Kleisli_category)
に対応する。`in_away`は通常の関数の合成で、`in_home`はそれを黒魔術に
翻訳している。
[継続モナド](https://wiki.haskell.org/Continuation)も随伴で書ける。
[随伴](https://en.wikipedia.org/wiki/Adjoint_functors) on Rails
に乗せてみる。
``` code
type W x a b = (a, x) -> (b, x)
type S x a b = a -> x -> (b, x)
in_away :: W x c d -> W x b c -> W x a b -> W x a d
in_away cd bc ab = cd . bc . ab
in_home :: S x c d -> S x b c -> S x a b -> S x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = (.)
to_home = curry
to_away = uncurry
```
`to_home`が[記事](https://en.wikipedia.org/wiki/Adjoint_functors)での`Phi`
に、`ext`が[Kleisliのスター](https://en.wikipedia.org/wiki/Kleisli_category)
に対応する。`in_away`は通常の関数の合成で、`in_home`はそれを黒魔術に
翻訳している。
[継続モナド](https://wiki.haskell.org/Continuation)も随伴で書ける。
238デフォルトの名無しさん
2020/04/19(日) 01:36:44.08ID:WM8Q0HWB ``` code
type O x a b = (b -> x) -> a -> x
type C x a b = a -> (b -> x) -> x
in_away :: O x c d -> O x b c -> O x a b -> O x a d
in_away cd bc ab = cd %.% bc %.% ab where (%.%) = flip (.)
in_home :: C x c d -> C x b c -> C x a b -> C x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = flip (.)
to_home = flip
to_away = flip
```
厳密には、`flip`は随伴ではないが、`Set^op (a, b)`と`Set (b, a)`が集合
として同型になることを使うと、実質的な随伴の役割を果たす。
type O x a b = (b -> x) -> a -> x
type C x a b = a -> (b -> x) -> x
in_away :: O x c d -> O x b c -> O x a b -> O x a d
in_away cd bc ab = cd %.% bc %.% ab where (%.%) = flip (.)
in_home :: C x c d -> C x b c -> C x a b -> C x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = flip (.)
to_home = flip
to_away = flip
```
厳密には、`flip`は随伴ではないが、`Set^op (a, b)`と`Set (b, a)`が集合
として同型になることを使うと、実質的な随伴の役割を果たす。
239デフォルトの名無しさん
2020/04/19(日) 23:13:07.04ID:hRJ8C0Os その話題は伸びない。このスレにはHaskellerいないからコード貼ったって誰も読めないし圏論を理解してるやつなんかいないから
240デフォルトの名無しさん
2020/04/20(月) 03:13:59.48 Haskeller 戻ってきて
241デフォルトの名無しさん
2020/04/20(月) 04:21:55.04ID:VYi0JRSU エアプしかいないの?
242デフォルトの名無しさん
2020/04/20(月) 12:33:40.11ID:KoBCLV49 ここには数学とプログラミング両方できる人がいるようだからお聞きしたいのだけど
プログラミングのクロージャーってトポロジーのクロージャーから引っ張ってきた用語なの?トポロジーの方の定義を眺めてみてもイマイチつながりが理解出来なくて
プログラミングのクロージャーってトポロジーのクロージャーから引っ張ってきた用語なの?トポロジーの方の定義を眺めてみてもイマイチつながりが理解出来なくて
243デフォルトの名無しさん
2020/04/20(月) 12:39:30.50ID:PYrLoVAx まったく別
244デフォルトの名無しさん
2020/04/20(月) 12:40:47.15ID:gGVXVDIS 量子化とかもおいおいって思う
245デフォルトの名無しさん
2020/04/20(月) 13:57:45.52ID:a2Vdb5nD 全く別なんすね
ありがとうございます
ありがとうございます
246デフォルトの名無しさん
2020/04/20(月) 21:31:54.79ID:CMTCfm7W 別でもあるし同じでもある
具体的には
具体的には
247デフォルトの名無しさん
2020/04/21(火) 00:24:43.90ID:dIhpNk/e 量化子を量子化!
248デフォルトの名無しさん
2020/04/21(火) 01:33:16.33ID:iOWmjrKd そう言えば、佐野量子化って子もいたな
249デフォルトの名無しさん
2020/04/21(火) 21:16:16.93ID:JxCMv4cD この言語って純粋に理論的な側面に興味を感じてしまって、アプリ制作進まなくなるわ
250デフォルトの名無しさん
2020/04/23(木) 00:29:18.48ID:wNzYQ5IM それよりメモリ管理の理論に興味を感じないか
static変数のようなものを使えばメモリ管理と無縁のアプリ製作ができるのだが
static変数のようなものを使えばメモリ管理と無縁のアプリ製作ができるのだが
251デフォルトの名無しさん
2020/04/23(木) 02:23:16.94ID:mBUbZ8gm 何を言ってるんだ
252デフォルトの名無しさん
2020/04/23(木) 03:15:59.03 メモリ管理に興味を感じないか? → メモリ管理と無縁の〜ができるのだ
??????
メモリ管理するんじゃなかったのか?
??????
メモリ管理するんじゃなかったのか?
253デフォルトの名無しさん
2020/04/23(木) 07:00:20.01ID:eoS2PMe8 staticおじさん来てんね
254デフォルトの名無しさん
2020/04/23(木) 13:10:01.98ID:rjrgI3oq 10年以上前から同じ会話してるだろ
免疫がつくまで繰り返すんだぜこれ
免疫がつくまで繰り返すんだぜこれ
255デフォルトの名無しさん
2020/04/23(木) 21:43:23.72 Haskellスレって荒らされてるの?
256デフォルトの名無しさん
2020/04/23(木) 22:27:14.34ID:mBUbZ8gm これが平常運転
257デフォルトの名無しさん
2020/04/24(金) 01:31:48.04ID:Zatb8XkV 低俗なねらーにはHaskellはら難しすぎたんや…
258デフォルトの名無しさん
2020/04/24(金) 23:19:15.10ID:FUZNUOcv メモリ管理の様な世俗的な因習に捕らわれず神の領域を安らかたらしめん為の関数型言語では無かったか
259デフォルトの名無しさん
2020/04/25(土) 01:04:25.27ID:7jpIjPuc 現実のハスケラ達は評価順やサンク潰しの制御のテクニックを競ってマウンティングし合ってるよ
260デフォルトの名無しさん
2020/04/25(土) 01:48:47.32ID:n1+IBCwB くだらない事をダベってるくらいなら、Polysemyの基礎でも勉強してろ
https://sir4ur0n.github.io/
https://sir4ur0n.github.io/
261デフォルトの名無しさん
2020/04/25(土) 04:06:57.78 それを知るとどんな良い事があるのか、学習の動機づけをください
262デフォルトの名無しさん
2020/04/25(土) 05:14:26.69ID:n1+IBCwB 簡単に言えば、安全で明確でテストしやすいプログラムが書ける。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>260 の記事だ。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>260 の記事だ。
263デフォルトの名無しさん
2020/04/25(土) 08:08:07.66 目を通しました(理解できたとは言ってない)
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
264デフォルトの名無しさん
2020/04/25(土) 10:58:51.70ID:n1+IBCwB >>263
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
265デフォルトの名無しさん
2020/04/25(土) 12:04:03.93 真のリファクタリングは、設計しなおしてソースコードも書き直す事が含まれるとすると
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
266デフォルトの名無しさん
2020/04/25(土) 12:44:25.69ID:d+Khct7b 現実問題として純粋関数だけじゃ成り立たないからね
267デフォルトの名無しさん
2020/04/25(土) 13:20:46.87ID:n1+IBCwB >>265
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
268デフォルトの名無しさん
2020/04/25(土) 17:18:59.24ID:zjFjVVvP Polysemyってはじめてきいた
Extensible effectsとは別もの?
Extensible effectsとは別もの?
269デフォルトの名無しさん
2020/04/25(土) 18:29:06.56ID:n1+IBCwB270デフォルトの名無しさん
2020/04/26(日) 08:52:10.51ID:K9Hk9jTV IOは副作用じゃなくて作用だからハスケルは副作用が無いんだなんていってるやつ初めて見たんだけど
271デフォルトの名無しさん
2020/04/26(日) 09:58:35.47ID:igL2TSix あらかじめ宣言した型に従う作用じゃなくて
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
272デフォルトの名無しさん
2020/04/26(日) 10:22:30.54ID:FBxVgLTh273デフォルトの名無しさん
2020/04/26(日) 11:39:57.10ID:K9Hk9jTV ブログを観る限り素人の書いたクソ記事だな
読む価値なし
読む価値なし
274デフォルトの名無しさん
2020/04/26(日) 14:00:45.22ID:igL2TSix この毒舌が日本の平常運転
275デフォルトの名無しさん
2020/04/26(日) 14:32:48.40ID:jQbFLCNe Haskellの玄人って研究者とか?
276デフォルトの名無しさん
2020/04/26(日) 17:02:22.77ID:i7pDRaTP このスレ住人のことだよ
277デフォルトの名無しさん
2020/04/27(月) 14:12:58.96ID:AM55pzUu 「Prelude>:browse」の実行結果をテキストファイルにリダイレクトする方法
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
https://stackoverflow.com/questions/14688119/redirecting-haskell-ghci-output-to-text-file
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
https://stackoverflow.com/questions/14688119/redirecting-haskell-ghci-output-to-text-file
278デフォルトの名無しさん
2020/04/27(月) 17:47:14.78ID:AOepTdHn このスレで延々と副作用やモナドの話ばかりされてるのなんか既視感があると思ったら、物理学板の相対論スレでポアンカレ群やリーマン幾何の話は一切せず
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
279デフォルトの名無しさん
2020/04/27(月) 17:48:43.80ID:l27UEbbh 相対性理論も量子力学もどっちも間違ってる
280デフォルトの名無しさん
2020/04/27(月) 18:04:41.79ID:3bdWQ9Vo まあ副作用やモナドに関する理解の甘さは初心者にありがちだからな
281デフォルトの名無しさん
2020/04/27(月) 19:40:47.96 最新 stack で 7.8.4 をセットアップしようとしたら realgcc.exe を使おうとしてコケる
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
282デフォルトの名無しさん
2020/04/27(月) 21:15:06.74ID:6TeRc6dT 静的型付けの話は一切せず
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
283デフォルトの名無しさん
2020/04/27(月) 22:39:13.77 相対論スレもHaskellスレ同様に荒らされてるの?
284デフォルトの名無しさん
2020/04/28(火) 00:09:34.24ID:Bz0WEXXQ >>281
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
285デフォルトの名無しさん
2020/04/28(火) 00:20:49.19ID:fQrwEc0Y Haskellは何でああも副作用を嫌うの?
286デフォルトの名無しさん
2020/04/28(火) 00:24:10.18ID:6HXykM7G >>285
だから嫌ってない…
だから嫌ってない…
287デフォルトの名無しさん
2020/04/28(火) 01:57:21.75ID:zsCbc70d■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★3 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 【ネトウヨ終了】大人気ユーチューバー「高市早苗のことをまともだと思うやつは私のコンテンツにさわらないでください」 [339712612]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 外務局長「中国さんごめんなさぁ...」小野田「中国なんかどうでもいいっ!」高市「首脳会談したい」マスコミ「立憲が悪いっ!!」 [237216734]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- アジフライ←不味くね?
