X



関数型プログラミング言語Haskell Part33
レス数が950を超えています。1000を超えると書き込みができなくなります。
0851デフォルトの名無しさん
垢版 |
2021/07/01(木) 18:53:55.58ID:dccggDtp
ghciでimportを複数すると、プロンプトが
Prelude Data.Monoid Data.Traversable Data.Foldable>
と長くなってしまうので、importしたの表示しないようにするにはどうしたらいいのですか?
0854デフォルトの名無しさん
垢版 |
2021/07/02(金) 03:41:23.49ID:aoQxpJoS
>>849
ghciのコマンドライン引数に、使用したいパッケージを指定するものがなかったっけ?
baseパッケージ以外はちゃんと引数で明示しないとghci上で使えなかったような気がする。
0855デフォルトの名無しさん
垢版 |
2021/07/10(土) 00:45:51.28ID:FlY7oUIG
すいません
質問させて下さい
Ghc.Types というのを眺めてたんですが
謎の#が入ってるコンストラクターがいっぱい見えます

data {-# CTYPE "HsInt" #-} Int = I# Int#
data {-# CTYPE "HsDouble" #-} Double = D# Double#
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))

などなど
なんですかコレ?
一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません
もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
0857デフォルトの名無しさん
垢版 |
2021/07/10(土) 09:09:34.41ID:Qo9dk8cs
>>856
なるほど
まだよくわかってないですけどunboxed typeというやつなんですね
後半もどなたか分かりませんか?
実は事情で“多倍長の浮動小数点”を自作したいのです
そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります
どこかに参考にできるライブラリ転がってませんか?
性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
0863デフォルトの名無しさん
垢版 |
2021/07/11(日) 06:49:31.34
リストのシャッフルは、2値ランダムと分割統治法で構成できるという境地に至った
0865デフォルトの名無しさん
垢版 |
2021/07/16(金) 17:38:36.16
あののののの! なんで型コンストラクタ名が被ったらいけないんですか!
型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
0866デフォルトの名無しさん
垢版 |
2021/07/16(金) 23:35:14.79
Esqueleto では SELECT 〜 FROM ONLY an_table 〜 みたいに ONLY を付けることで継承テーブルを対称から外すように指示することはできないんですか?
生SQLを書くしかありませんか?
0867デフォルトの名無しさん
垢版 |
2021/07/17(土) 15:02:59.17ID:eTC1af8g
>>864
ちょまどは鳳唐好きだって言ってた
0868デフォルトの名無しさん
垢版 |
2021/07/17(土) 17:39:27.65ID:44fEdIj7
私は、MBAを取るために、ハワイにある伝統的なビジネススクールに通っていたとき、どこかの大企業で
働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。
ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから
ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。
とんだお笑い草だと思った。
講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63

彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。
安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は
たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、
素晴らしいビジネススキルのある人はほとんどいなかったということだ。
彼らのほとんどは給料なしで生きていけなかった。
ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
0870デフォルトの名無しさん
垢版 |
2021/07/18(日) 08:48:06.51ID:p5uFvWrN
まあ、生きていけないぞー死ぬぞーってのが机上の空論の中でも最悪の論だよな
実際には死なない人が多い
0871デフォルトの名無しさん
垢版 |
2021/07/18(日) 22:53:21.56
すいません、僕がスレを軽率に上げてしまったばっかりにワードサラダBOTの餌食なってしまうとは・・・
0874デフォルトの名無しさん
垢版 |
2021/07/26(月) 04:08:52.62ID:FlIQ/SVE
ttps://cognicull.com/ja
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
0875デフォルトの名無しさん
垢版 |
2021/07/26(月) 12:01:28.04ID:nPPC7Onz
>>874
うーん、書きたいプログラムの内容によるとしか言えないかな
こうしたことがわからないとHaskellのプログラムが書けないということはない
そのあたりはObjective-Cと同じ
0878デフォルトの名無しさん
垢版 |
2021/07/27(火) 15:27:28.97ID:6BJr6nx6
>>874
フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う
利用者も然りなのはむしろ良い傾向
他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
0880デフォルトの名無しさん
垢版 |
2021/07/30(金) 13:54:44.53ID:kX7UidPf
>>874
Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
0881デフォルトの名無しさん
垢版 |
2021/07/30(金) 14:32:21.44ID:yBIo03BR
すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
0882デフォルトの名無しさん
垢版 |
2021/08/02(月) 07:34:32.07ID:Rllz2LO9
例えばOOPの継承関係を否定する
否定するなら対案を出せと言われる
この過程は数学ではないけど結果的には半順序関係とか圏とか出てくる
0883デフォルトの名無しさん
垢版 |
2021/08/16(月) 04:30:28.47ID:aZY1/RTa
純粋関数型でキャッシュは実装可能?

例えばOOPでは計算に時間がかかる値はキャッシュしておいて次の読み取りで
キャッシュから返すという事ができる。
このキャッシュの管理をOOPらしいカプセル化によってまともに実装できる
0885デフォルトの名無しさん
垢版 |
2021/08/18(水) 20:19:16.73ID:MamsdVYI
>>66
オブジェクト指向プログラミングにおける Smalltalk 的な位置づけに来るんじゃないかな。

ガッチガチだから強制的に「その概念」に染まれる。
0886デフォルトの名無しさん
垢版 |
2021/08/19(木) 00:24:27.59ID:anV9aH6F
低級言語でインタプリタを作れそうなシェルスクリプト的な位置づけだよ
単一の高級言語を強制されない
0887デフォルトの名無しさん
垢版 |
2021/08/19(木) 16:00:36.29ID:IKqVi/r3
関数型言語ってリストとかツリーみたいな再帰的なデータ構造扱うのは得意だけど
有向・無向グラフ(のアルゴリズム)扱うの難しくない?
0888デフォルトの名無しさん
垢版 |
2021/08/19(木) 18:40:13.11ID:JntO5v5E
>>887
難しいと感じるかどうかは本人の気持ちなので何とも言えません。

ただ、haskellでのグラフ理論の扱いに関しては、
カジュアルな解説もフォーマルな論文もたくさんあります。
ライブラリもあります。

扱ったことはないけど、何となくイメージだけで
難しそうだ、
haskellの苦手分野だと思っているのであれば、
自分に読めそうな記事にいくつかトライしてみてはどうでしょうか。
0889デフォルトの名無しさん
垢版 |
2021/08/19(木) 21:01:34.14ID:anV9aH6F
>>887
Erlangのようなメッセージ送信を考えればわかるが
メモリを共有していない相手にも送れるデータ構造が得意

メッセージとして文字列ばかり使ってるとカプセル化も型情報も無駄になる
だから文字列に似ているが異なるデータ構造が役に立つ
0890デフォルトの名無しさん
垢版 |
2021/08/25(水) 21:36:21.14ID:NimliznV
Applicativeの(*>)演算って何の意味があるの?
第一引数はどうせ捨てられるんでしょ。
0891デフォルトの名無しさん
垢版 |
2021/08/25(水) 23:09:37.51ID:SkXNk2uR
確かに左辺 :: f aで言うところのa型の値は捨てるが
Maybeとか[]みたいな直和型でどの値コンストラクタを使って構築されたかの情報は影響するよ
0892デフォルトの名無しさん
垢版 |
2021/08/26(木) 21:35:42.38ID:Wv9PZvrP
>>891
それは第1引数をパターンマッチすることで、たとえ第2引数が同じ値でも、
(*>)の計算結果を変えられることに意味があるってこと?

Sum型やProduct型もApplicativeのインスタンスになってるけど、
これらだと(*>)には意味がない?
(当然(<*>)など他の演算には意味があると思うけど)
0894デフォルトの名無しさん
垢版 |
2021/09/01(水) 17:56:43.60
ぼくようメモ:
OpenSUSE でPostgreSQLを使用した開発をしていてstack buildで
postgresql-libpq パッケージを途中にビルドする際
pg_config が無いと言われコケることがある

背景: OpenSUSE は postgres-devel から pg_config を削除した。我々は libpq.pc を代わりに使うべきである。
ソース: https://redmine.lighttpd.net/issues/2965

解決法:

stack build --flag postgresql-libpq:use-pkg-config
としてビルドする
0895デフォルトの名無しさん
垢版 |
2021/09/08(水) 22:14:55.40
そうか!Trueskill のHaskell実装がなくて論文読んで自分で実装する力がなくても
Haskellから実行時にbash 呼び出してPython3 のTrueskillライブラリに標準入力でPythonコードを流し込んで
演算結果を文字列で貰ってきて、それをParserCombinatorで作った字句解析器で読み取ってHaskellのデータに戻せばいいじゃん
あたいったら天才ね!
0897デフォルトの名無しさん
垢版 |
2021/09/10(金) 01:55:27.29ID:bkZL74IR
関数定義の左辺の部分的で、関数名と仮引数名の後の | と = の間の部分って何て名称だっけ?

f x y | x < y = ...

これの x < y の部分。
あるいは関数定義をこう書く方法の呼び方とか。

この文法や制限などをネットで調べたいんだけど、
名称が思い出せず検索に難儀してる。
できれば英語でお願い。
0900デフォルトの名無しさん
垢版 |
2021/09/22(水) 10:43:55.15ID:02VLVXq+
パターンの質問です

Rational型の数が平方数であるかどうか判定するプログラムで

isSquare r = r >= 0 && r == ( sqrtR r )^2
sqrtI = truncate . sqrt . fromInteger
sqrtR r = let
( a, b ) = ( numerator r, denominator r )
in ( sqrtI a ) % ( sqrtI b )

というのを書きました
もちろんこれはうまくいきます

しかし numerator, denominator をいちいち取り出すのが鬱陶しいので

sqrtR ( a :% b ) = ( sqrtI a ) % ( sqrtI b ) ------- @

と書きたかったのですがうまくいきません
0901デフォルトの名無しさん
垢版 |
2021/09/22(水) 10:44:01.62ID:02VLVXq+
ネットで調べると

{-# LANGUAGE PatternSynonyms, ViewPatterns #-}

numDenum :: Integral a => Ratio a -> (a,a)
numDenum x = ( numerator x, denominator x )

pattern ( :% ) :: Integral a => a -> a -> Ratio a
pattern a :% b <- ( numDenum -> ( a,b ) )
where a :% b = a % b

というおまじないがstack exchangeで見つかってコレつけるとうまく行きました
うまくいったんですがサッパリわかりません
コレ何者ですか?
そもそも@はなんでうまく動かないんですか?
0902デフォルトの名無しさん
垢版 |
2021/09/22(水) 11:58:51.92ID:Sp73Mnte
計算結果をパターンマッチさせようとして失敗してるのでは

値を値コンストラクタにばらしてその値コンストラクタに応じて処理を変えるのがパターンマッチ
(マッチさせる対象がList aなら、:なのか[]なのかに応じて「先頭:後ろ」か空リストかが束縛される)

で、計算結果をマッチさせたいならビューってのを定義してあげないといけませんよって話のような
0903デフォルトの名無しさん
垢版 |
2021/09/22(水) 18:38:05.18ID:02VLVXq+
>>902
レスありがとうございます
原因わかりました
ご指摘の通り「計算結果にはパターンマッチさせられない、パターンマッチに入っていい関数はコンストラクタのみ」なのでRatio a型のコンストラクタである( :% )を使ってたのでそこは問題ないと思ってたんですが肝腎要の( :% )が定義されてるGHC.Realをimportしてませんでした
Data.Ratioをimportしたら自動的に(:%)も使えるもんだと思い込んでいました
Pattern synonymsについては

https://qiita.com/as_capabl/items/d2eb781478e26411a44c

でちょっと理解できました、が、そもそも使わなくても良くなりました
ご協力感謝です
0904デフォルトの名無しさん
垢版 |
2021/09/22(水) 20:18:48.06ID:02VLVXq+
備忘録がてら調べてわかった事書いておきます
Pattern Synonyms は今回のようにライブラリの提供者が型のコンストラクタを提供してない、しかしパターンマッチは使いたいとかの場合に使える拡張のようです
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
を使うと

pattern ( マッチさせたい表現) <-
( その型から取り出したい値を取り出す関数)
-> ( 取り出した値にマッチさせるパターン) )
( where さらにコンストラクタシノニムとしても使いたい場合の逆変換関数 )

の形で使うようです
例えばInt型でxが偶数であった場合にdiv x 2をパターンマッチで拾うために

pattern TwiceOf x <-
( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) )

のように定義しておいて

main = do
case 2 of { DoubleOf x -> print x; _ -> print "odd" }
case 3 of { DoubleOf x -> print x; _ -> print "odd" }

のように利用できるようです
TwiceOf はあくまでパターンマッチの表現のみで使える“仮の”コンストラクタですがpattern文にwhere句を

pattern DoubleOf x <-
( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) )
where TwiceOf x = 2*x

のように追加するとあたかもInt型の新しいコンストラクタが追加されたように振る舞い“DoubleOf 2”のような表現が許されるようになるようです
今回の場合はどうすべきか悩みどころです
ライブラリの開発者が低レベルの(:%)を公開しない理由もわかるので無理クリ(:%)を使うのもどうなんつて気もするし、かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし
0905デフォルトの名無しさん
垢版 |
2021/09/23(木) 10:16:50.52ID:F+2SAjcM
>>904
> かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし

まさかGHCの言語拡張はすべて使わないつもりですか?
せっかくの表現力が著しく落ちますよ。

今あるいは将来 GHC 以外のツールでコンパイルする計画があるのなら仕方ありませんが、
そうでなければ言語拡張の使用を躊躇する理由が見あたりません。

私なら、
・プログラムが意図した動きをし、
・かつソースコードが読みやすくなる
なら言語拡張を積極的に利用します。

意図通り動くけど可読性が落ちるなら、そこで初めて迷いますね。
0907デフォルトの名無しさん
垢版 |
2021/09/26(日) 07:18:33.81ID:m/60KM4j
Stack Overflow に面白い質問が投稿されていた。
要約すると return 1 getLine という式の型は Num t => t で、その値は 1 らしいんだが何で? というもの。
質問者は勘違いして、何で return と getLine が互いに打ち消し合うのかと訊いていたが。
https://stackoverflow.com/questions/69325169/haskell-a-return-before-is-cancelled-out-by-a-monad-after-how

なかなか興味深い。
考えてみると haskell の理解がいっそう深まる。
0908デフォルトの名無しさん
垢版 |
2021/09/26(日) 19:38:43.50
最近並列処理を齧り始めました

ランダム値の生成にmwc-random パッケージの System.Random.MWC.createSystemRandom で生成した GenIO を、全体を通して利用する環境として Reader モナドに入れて使いまわしていたとします
ここにSTM で並列処理機能を新規に追加する場合、forkIO したスレッド内で一々そのスレッド専用に GenIO を生成し直すべきでしょうか?
というのは、それをしないと
各スレッドで共通の GenIO がコピーされ使用される場合、各スレッドで同じ値が生成されていってしまいランダムの意味をなさないのではないかと思うからです
ではこの疑似ランダム生成器を TVar に入れるかとなると、資源の取り合いになって、1スレッド時よりパフォーマンスが低下して元も子もないではないかという懸念があります
ここまで思考実験すると、やはり forkIO したスレッド毎に一々、その中で専用の疑似ランダム生成器を新調する必要があるという考えに至りました
スレッド数が多くなると疑似ランダム生成器を作るコストがバカにならなくなっていくでしょうが、その辺は頑張るしかないよということで、ぼくの考えは合っていますか?
0910デフォルトの名無しさん
垢版 |
2021/09/27(月) 16:47:57.85
>>909
実験してみたら、各スレッドで別の値が生成されていました
しかしドキュメント見ると It uses mutable state so same generator shouldn't be used from the different threads simultaneously.と書いてあるんですが
これはどう受け取ったらいいんですかね
各スレッドで別の値が生成されているなら用を為してる(ように思える)からいいじゃないかとも思うのですが
何か別の理由があって、そう思えてもやはり使うなという事なんでしょうか?
0912デフォルトの名無しさん
垢版 |
2021/09/27(月) 20:38:39.08ID:MDVYajz0
>>910
パフォーマンスの実験もね。
理論上パフォーマンスが落ちると分かっていても、実用上は問題ない場合も多い。
0914デフォルトの名無しさん
垢版 |
2021/09/30(木) 07:09:39.49ID:N1l0weLI
>>907
セミコロンを書かない言語ではすべからく改行直後に
(getLine)と書くとどうなるか問題が出てくる
0916デフォルトの名無しさん
垢版 |
2021/09/30(木) 09:22:48.41
>>911
具体的にどういうケースでどういう問題が起こるか解らないので、取り敢えずドキュメントにスレッド間で共有はやめろとある以上、大人しく従うことにします

>>912
STM版が、3950Xエコモードシングル500分の処理が30スレッド割り当てで220分くらいになりましたが
CPU使用率も75%前後で残念でした

競合するリソースが多過ぎたからではと思い、競合を避ける事を考えていると
そもそもSTMを使わず、スレッド毎にローカルにデータを貯めて処理して最後に各スレッドで部分的に仕上げたデータをChanで流して
、受信した側でデータを総括する、初歩的な方式を思いついたので書き換えました

getChanContentsを使いましたが、EOFみたいな最後の通知方法が判らずに、全スレッドの処理が終わりもう誰もデータを流すことのないチャネルから性懲りもなく読みだそうとしてしまい
例外が発生して困っていました
幸いスレッドの数は判っているのでチャネルからtakeする数をスレッド数ちょっきりとして切り上げた所、遅延評価が幸いしてその先を読もうとしなくなり例外は発生しなくなりました(本質的解決かは判りません)
これにより処理が18分で終わりました
スレッド毎にcreateSystemRandomするように書き換えると21分かかるようになりました
オーバヘッド込みでも500分かかっていた時代から驚異的な進化を遂げました

憧れだった Software Transactional Memory は期待程速くなくがっかりしました
STMは最初に検討するべきではなく、巧く競合が発生しないように書けないときの最後の手段なのかなと思いました
0917デフォルトの名無しさん
垢版 |
2021/09/30(木) 16:59:33.11ID:Ai6xyiAS
物理cpuが四つとかの擬似マルチスレッドではそんなに早くならないと思ってたけど、ものによってはそんなにも早くなるもんなんだな
0919デフォルトの名無しさん
垢版 |
2021/10/05(火) 23:20:55.55ID:75xrYyRf
>>907
型注釈してないのに、インスタンスとして関数モナドが選択されるのはどうしてですか?
getLineが影響していますか?
0920デフォルトの名無しさん
垢版 |
2021/10/06(水) 01:58:31.84ID:3ymQugFf
>>919
return 1 getLine は (return 1) getLine だから、
(return 1) が関数(a->b) じゃないと型が合わないんじゃないかな?
0921デフォルトの名無しさん
垢版 |
2021/10/06(水) 22:57:04.48ID:MRfRTuXd
関数モナドと同じように、引数一つ取るモナド作ったらambiguousって怒られるかなと思ったんだけど、コンストラクタ書かないとならないからうまくいかない。
この値は関数モナドにしか解決されないのかな
0923デフォルトの名無しさん
垢版 |
2021/10/17(日) 18:41:32.26ID:DQz0YbVB
なんjでめんだこって言う女装子がhaskell勉強していてdao of functional programmingっていう海外の人が書いた文献がわかりやすいってことでそれ読んでいるらしいが
ここの人にもそれ読んでいる人いる?
0925デフォルトの名無しさん
垢版 |
2021/10/17(日) 20:37:14.39ID:DQz0YbVB
>>924
すまんリンク探させてしまってすまない
ワイが貼るべきやった
ワイは圏論わからないから読まずじまいだったわ
いつか圏論習得できたらその際に読もうかなって思ってる
0926デフォルトの名無しさん
垢版 |
2021/10/17(日) 21:08:39.75ID:LTEsEtXo
プログラミングの本質を学ぶには圏論について学ぶ必要があるということらしい
学んですぐ役立つというものではないようで、すぐ役立つ知識がお望みなら他をあたってくれ、とか
0927デフォルトの名無しさん
垢版 |
2021/10/17(日) 23:35:51.47ID:QqhGhKAl
見せてもらおうか、圏論とやらを。
0929デフォルトの名無しさん
垢版 |
2021/10/18(月) 02:49:04.06ID:mrfOLNSK
また圏論か
もういいよ
0932デフォルトの名無しさん
垢版 |
2021/10/22(金) 12:14:30.91ID:9P3eVRHd
Free monad とは何か? の、シンプルかつ的を射た説明がsrackoverflowにあった。
(John Wiegley の回答)
https://stackoverflow.com/questions/13352205/what-are-free-monads

これを読んでから他の色んなFree monadの記事を読むと、すんなり理解できる。

これ、本質がよく解っている人の回答だよね。
こんな格好良く回答ができるよう精進したい。
0933デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:20:57.92
UTF-8 のHaskell ソースコードに書き込んだ日本語文字列を通信先に渡す為に Shift_JIS の String にしたいのですが


module Main where

import Data.Text.ICU.Convert as ICU
import Data.Text as T
import Data.ByteString.Char8 as BS

main :: IO ()
main = do
  conv <- open "Shift_JIS" Nothing
  let
    utf8txt = T.pack "皆は、赤ちゃんしゅきぃ?"
    sjis_bs = fromUnicode conv utf8txt

この sjis_bs をどうしたら Shift_JIS の String になるんですか?
BS.unpack だと
ツ皆ツづ債、ツ静板つソツづ。ツづアツつオツづ」ツつォツつ。ツ?
になってしまいます
0934デフォルトの名無しさん
垢版 |
2021/10/22(金) 23:18:21.74ID:5ielnrPe
haskellってpythonに影響与えてるんやな
どおりで雰囲気似てる感じするんか
0935デフォルトの名無しさん
垢版 |
2021/10/23(土) 01:09:52.51ID:o3xA5lbA
レイアウトと呼ばれるインデントスタイルは、Pythonが1991年に最初にリリースであり、85年以前にあった
Mirandaを参考に1990年にHaskellは登場したはず。
0936デフォルトの名無しさん
垢版 |
2021/10/29(金) 12:55:32.45ID:SqmTIce6
不動点演算子がわからなくて泣ける
再帰呼び出しになってないのに再帰になってるのはわかるんだけど
0938デフォルトの名無しさん
垢版 |
2021/10/29(金) 18:40:46.51ID:uCUCIWXe
>>937
なんでわかるんや?
才能か?
後不動点定理がわからん
勉強しろって言われてるけど
0939デフォルトの名無しさん
垢版 |
2021/10/29(金) 20:05:05.45ID:1mMf/Evz
遅延評価の才能がないと x = f x を思いつかないんだよな
y f = f (y f) しか分からない
0940デフォルトの名無しさん
垢版 |
2021/10/29(金) 21:04:54.17ID:ZN5Hp6rJ
>>936 の何もかもが、こちらには分からない。
愚痴を言いたいだけなのか、それとも何か質問をしたいのか。
後者なら、質問内容は何か。

>>938
> 後不動点定理がわからん
それだけなら、勉強してくださいとしか言いようがない。

勉強しろと言われているのなら、何か資料が配られたり、
参考文献が挙げられたりしていないのか?
そういうのが既にあるのなら、取りあえず全てに当たって、
今分かる部分と分からない部分を徹底的に細かく仕訳してみればいいのでは?
0941デフォルトの名無しさん
垢版 |
2021/11/05(金) 06:38:08.04ID:UB8UVAT8
>>936
分からないのは何故再帰処理してるのかじゃなくて(そこは定義的に明らかだし)、
どうして無限ループせずに終了するのかでいいのかな
0944デフォルトの名無しさん
垢版 |
2021/11/15(月) 02:14:35.96ID:jBQU3T8q
>>943
Applicativeクラスにpure関数があるから。
Monad則やApplicative則を満たしてるなら、
まず間違いなく pure = return だから片方で充分。

それにreturnって名前があまりに実態とかけ離れてるしね。
0945デフォルトの名無しさん
垢版 |
2021/11/15(月) 12:46:13.83ID:KyLp+2Ep
初歩的な質問ですが、複数の設定ファイル読み込みするのに
readFile で全体取得してから処理するのと
withFile で hGetLine しながら処理するのではどちらがいいとかありますか?
主に処理速度の点について聞きたいです。
0947デフォルトの名無しさん
垢版 |
2021/11/15(月) 21:51:56.85ID:NLyY6NK4
>>944
Applicativeにpureがあるのはなんで?
Monadのreturnだけにするのは変ですか?
零元がApplicativeの責務なのがピンときてないんです。Monadだと何と合わないんでしょう
0948デフォルトの名無しさん
垢版 |
2021/11/16(火) 02:22:00.49ID:EE8p/B0u
>>947
できるだけ一次情報に当たりましょう。
>>942 のリンク先の Planned: remove return from Monad の項目の
Proposal のリンク先を読んで下さい。
(更にその先の dudcusdion なども)
それが最も正確で、かつ、分かりやすいです。
0950デフォルトの名無しさん
垢版 |
2021/11/16(火) 22:40:31.75ID:t6DDIn3B
読んでみたけどよくわかんないなあ。AMPを満たすためにApplicative m => Monad mが必要ってことは書いてあるようだけど
Monadからreturnを削除して、pureに統一する理由って書いてあるかな?
読み飛ばしたかもしれんけど。

return = pureだから、統一しても同じっていうのは分かるんだけど、Applicativeにpureが必要な理由がわからない。
Applicativeの4つのルールを満たすためにpureが必要なことは、Applicativeの定義に書いてあるけど、圏論わかんないから、このルールが何で必要なのか分からん。

Monoidal Functor?とかいうやつの表現のために単位元(零元じゃなかったね)が必要なんだろうけど、圏論わからんないから分からん。

Monoidと関係あるんだろうか。それなら加法のために単位元が必要なのはわかるんだけど。
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況