[過去ログ] 関数型プログラミング言語Haskell Part33 (998レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(1): 2020/02/10(月)18:17 ID:L6eYQqyh(1/5) AAS
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
外部リンク:www.haskell.org
日本Haskellユーザーグループ - Haskell-jp
外部リンク:haskell.jp

前スレ
関数型プログラミング言語Haskell Part32
2chスレ:tech
872
(1): 2021/07/19(月)09:08 ID:Niob4uA5(1) AAS
現状これはとりあえず有効にしとけみたいなGHC拡張ってなにがありますか
873: 2021/07/19(月)10:46 ID:jaES3hbu(1) AAS
>>872
無いです。
必要なときにのみ必要なだけ宣言するといいです。
874
(3): 2021/07/26(月)04:08 ID:FlIQ/SVE(1) AAS
外部リンク:cognicull.com
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
875: 2021/07/26(月)12:01 ID:nPPC7Onz(1) AAS
>>874
うーん、書きたいプログラムの内容によるとしか言えないかな
こうしたことがわからないとHaskellのプログラムが書けないということはない
そのあたりはObjective-Cと同じ
876
(1): 2021/07/27(火)03:35 AAS
Data.Arrayって廃止されたの?
GHC.Arr を使えってこと?
877
(1): 2021/07/27(火)05:37 ID:O4N47kXx(1) AAS
>>876
Data.Array は array パッケージにあります。
878: 2021/07/27(火)15:27 ID:6BJr6nx6(1) AAS
>>874
フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う
利用者も然りなのはむしろ良い傾向
他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
879: 2021/07/28(水)02:22 AAS
>>877
詳しい情報サンクス
880: 2021/07/30(金)13:54 ID:kX7UidPf(1) AAS
>>874
Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
881: 2021/07/30(金)14:32 ID:yBIo03BR(1) AAS
すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
882: 2021/08/02(月)07:34 ID:Rllz2LO9(1) AAS
例えばOOPの継承関係を否定する
否定するなら対案を出せと言われる
この過程は数学ではないけど結果的には半順序関係とか圏とか出てくる
883
(1): 2021/08/16(月)04:30 ID:aZY1/RTa(1) AAS
純粋関数型でキャッシュは実装可能?

例えばOOPでは計算に時間がかかる値はキャッシュしておいて次の読み取りで
キャッシュから返すという事ができる。
このキャッシュの管理をOOPらしいカプセル化によってまともに実装できる
884: 2021/08/16(月)18:24 ID:O8pAbV/G(1) AAS
>>883
可能です。
memoization をキーワードに調べてみてください。
885: 2021/08/18(水)20:19 ID:MamsdVYI(1) AAS
>>66
オブジェクト指向プログラミングにおける Smalltalk 的な位置づけに来るんじゃないかな。

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

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

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

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

Sum型やProduct型もApplicativeのインスタンスになってるけど、
これらだと(*>)には意味がない?
(当然(<*>)など他の演算には意味があると思うけど)
893: 2021/08/28(土)14:58 ID:WIQMD65A(1) AAS
>>890
Parsecで左辺の句がいらないときに使う
894: 2021/09/01(水)17:56 AAS
ぼくようメモ:
OpenSUSE でPostgreSQLを使用した開発をしていてstack buildで
postgresql-libpq パッケージを途中にビルドする際
pg_config が無いと言われコケることがある

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

解決法:

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

f x y | x < y = ...

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

この文法や制限などをネットで調べたいんだけど、
名称が思い出せず検索に難儀してる。
できれば英語でお願い。
898: 2021/09/10(金)03:22 ID:bkZL74IR(2/2) AAS
>>897
すまん、思い出した、guard だ。
899: 2021/09/10(金)22:23 ID:kwXNo1Gk(1) AAS
>>896
g を忘れてね?
900: 2021/09/22(水)10:43 ID:02VLVXq+(1/4) AAS
パターンの質問です

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 ) ------- ?

と書きたかったのですがうまくいきません
901: 2021/09/22(水)10:44 ID:02VLVXq+(2/4) AAS
ネットで調べると

{-# 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で見つかってコレつけるとうまく行きました
うまくいったんですがサッパリわかりません
コレ何者ですか?
そもそも?はなんでうまく動かないんですか?
902
(1): 2021/09/22(水)11:58 ID:Sp73Mnte(1) AAS
計算結果をパターンマッチさせようとして失敗してるのでは

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

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

外部リンク:qiita.com

でちょっと理解できました、が、そもそも使わなくても良くなりました
ご協力感謝です
904
(1): 2021/09/22(水)20:18 ID:02VLVXq+(4/4) AAS
備忘録がてら調べてわかった事書いておきます
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でしか使えない拡張使うのもどうなんという気もするし
905
(1): 2021/09/23(木)10:16 ID:F+2SAjcM(1) AAS
>>904
> かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし

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

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

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

意図通り動くけど可読性が落ちるなら、そこで初めて迷いますね。
906: 2021/09/23(木)20:01 ID:0hgEU0Ok(1) AAS
>>905
まぁそうですね
完全日曜プログラマーなので気分良く書けばいいか
907
(3): 2021/09/26(日)07:18 ID:m/60KM4j(1/2) AAS
Stack Overflow に面白い質問が投稿されていた。
要約すると return 1 getLine という式の型は Num t => t で、その値は 1 らしいんだが何で? というもの。
質問者は勘違いして、何で return と getLine が互いに打ち消し合うのかと訊いていたが。
外部リンク:stackoverflow.com

なかなか興味深い。
考えてみると haskell の理解がいっそう深まる。
908
(1): 2021/09/26(日)19:38 AAS
最近並列処理を齧り始めました

ランダム値の生成にmwc-random パッケージの System.Random.MWC.createSystemRandom で生成した GenIO を、全体を通して利用する環境として Reader モナドに入れて使いまわしていたとします
ここにSTM で並列処理機能を新規に追加する場合、forkIO したスレッド内で一々そのスレッド専用に GenIO を生成し直すべきでしょうか?
というのは、それをしないと
各スレッドで共通の GenIO がコピーされ使用される場合、各スレッドで同じ値が生成されていってしまいランダムの意味をなさないのではないかと思うからです
ではこの疑似ランダム生成器を TVar に入れるかとなると、資源の取り合いになって、1スレッド時よりパフォーマンスが低下して元も子もないではないかという懸念があります
ここまで思考実験すると、やはり forkIO したスレッド毎に一々、その中で専用の疑似ランダム生成器を新調する必要があるという考えに至りました
スレッド数が多くなると疑似ランダム生成器を作るコストがバカにならなくなっていくでしょうが、その辺は頑張るしかないよということで、ぼくの考えは合っていますか?
909
(1): 2021/09/26(日)21:46 ID:m/60KM4j(2/2) AAS
>>908
そこまでしっかり考察したのなら、質問する前にまず実験してみようよ。
910
(2): 2021/09/27(月)16:47 AAS
>>909
実験してみたら、各スレッドで別の値が生成されていました
しかしドキュメント見ると It uses mutable state so same generator shouldn't be used from the different threads simultaneously.と書いてあるんですが
これはどう受け取ったらいいんですかね
各スレッドで別の値が生成されているなら用を為してる(ように思える)からいいじゃないかとも思うのですが
何か別の理由があって、そう思えてもやはり使うなという事なんでしょうか?
911
(1): 2021/09/27(月)18:11 ID:XYchXu+H(1) AAS
>>910
mutable stateの排他制御をしてないから複数のスレッドで実行するとまずいことが起こるかもしれない、ってことじゃないの?

排他制御
外部リンク:ja.wikipedia.org
912
(1): 2021/09/27(月)20:38 ID:MDVYajz0(1) AAS
>>910
パフォーマンスの実験もね。
理論上パフォーマンスが落ちると分かっていても、実用上は問題ない場合も多い。
913: 2021/09/29(水)15:57 ID:lU7q1h04(1) AAS
>>907
そこで関数モナドが出てくるのは知らないと思い至らないなあ
勉強になった
914: 2021/09/30(木)07:09 ID:N1l0weLI(1) AAS
>>907
セミコロンを書かない言語ではすべからく改行直後に
(getLine)と書くとどうなるか問題が出てくる
915: 2021/09/30(木)09:21 ID:LH+TfD4u(1) AAS
すべからく警察だ!
916: 2021/09/30(木)09:22 AAS
>>911
具体的にどういうケースでどういう問題が起こるか解らないので、取り敢えずドキュメントにスレッド間で共有はやめろとある以上、大人しく従うことにします

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

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

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

憧れだった Software Transactional Memory は期待程速くなくがっかりしました
STMは最初に検討するべきではなく、巧く競合が発生しないように書けないときの最後の手段なのかなと思いました
917: 2021/09/30(木)16:59 ID:Ai6xyiAS(1) AAS
物理cpuが四つとかの擬似マルチスレッドではそんなに早くならないと思ってたけど、ものによってはそんなにも早くなるもんなんだな
918: 2021/10/04(月)21:32 ID:zxVeK0W2(1) AAS
と思ったら3950x gpuでほんとに物理スレッドがたくさんある場合の話か
919
(1): 2021/10/05(火)23:20 ID:75xrYyRf(1) AAS
>>907
型注釈してないのに、インスタンスとして関数モナドが選択されるのはどうしてですか?
getLineが影響していますか?
920: 2021/10/06(水)01:58 ID:3ymQugFf(1) AAS
>>919
return 1 getLine は (return 1) getLine だから、
(return 1) が関数(a->b) じゃないと型が合わないんじゃないかな?
921: 2021/10/06(水)22:57 ID:MRfRTuXd(1) AAS
関数モナドと同じように、引数一つ取るモナド作ったらambiguousって怒られるかなと思ったんだけど、コンストラクタ書かないとならないからうまくいかない。
この値は関数モナドにしか解決されないのかな
922: 2021/10/07(木)09:52 ID:AVdaEi5L(1) AAS
C++のoperator()()に相当する演算を多重定義できないので曖昧ではない
923: 2021/10/17(日)18:41 ID:DQz0YbVB(1/2) AAS
なんjでめんだこって言う女装子がhaskell勉強していてdao of functional programmingっていう海外の人が書いた文献がわかりやすいってことでそれ読んでいるらしいが
ここの人にもそれ読んでいる人いる?
924
(2): 2021/10/17(日)20:11 ID:LTEsEtXo(1/2) AAS
これか

The Dao of Functional Programming
外部リンク[pdf]:github.com

圏論関係の内容だな
925: 2021/10/17(日)20:37 ID:DQz0YbVB(2/2) AAS
>>924
すまんリンク探させてしまってすまない
ワイが貼るべきやった
ワイは圏論わからないから読まずじまいだったわ
いつか圏論習得できたらその際に読もうかなって思ってる
926: 2021/10/17(日)21:08 ID:LTEsEtXo(2/2) AAS
プログラミングの本質を学ぶには圏論について学ぶ必要があるということらしい
学んですぐ役立つというものではないようで、すぐ役立つ知識がお望みなら他をあたってくれ、とか
927: 2021/10/17(日)23:35 ID:QqhGhKAl(1) AAS
見せてもらおうか、圏論とやらを。
928: 2021/10/18(月)00:33 ID:BIt/UTxD(1) AAS
>>924
同じ著者の

Category Theory for Programmers
外部リンク:github.com
929: 2021/10/18(月)02:49 ID:mrfOLNSK(1) AAS
また圏論か
もういいよ
930: 2021/10/18(月)12:08 ID:7GcdH/zA(1) AAS
さあ ねがいを いえ
931: 2021/10/18(月)15:15 ID:r9t2S6+p(1) AAS
動画リンク[YouTube]
外部リンク[html]:bangumi.ouj.ac.jp
932: 2021/10/22(金)12:14 ID:9P3eVRHd(1) AAS
Free monad とは何か? の、シンプルかつ的を射た説明がsrackoverflowにあった。
(John Wiegley の回答)
外部リンク:stackoverflow.com

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

これ、本質がよく解っている人の回答だよね。
こんな格好良く回答ができるよう精進したい。
933: 2021/10/22(金)21:20 AAS
AA省
934: 2021/10/22(金)23:18 ID:5ielnrPe(1) AAS
haskellってpythonに影響与えてるんやな
どおりで雰囲気似てる感じするんか
935: 2021/10/23(土)01:09 ID:o3xA5lbA(1) AAS
レイアウトと呼ばれるインデントスタイルは、Pythonが1991年に最初にリリースであり、85年以前にあった
Mirandaを参考に1990年にHaskellは登場したはず。
936
(3): 2021/10/29(金)12:55 ID:SqmTIce6(1) AAS
不動点演算子がわからなくて泣ける
再帰呼び出しになってないのに再帰になってるのはわかるんだけど
937
(1): 2021/10/29(金)18:35 ID:ZN5Hp6rJ(1/2) AAS
>>936
何が分からないのか分からない
938
(1): 2021/10/29(金)18:40 ID:uCUCIWXe(1) AAS
>>937
なんでわかるんや?
才能か?
後不動点定理がわからん
勉強しろって言われてるけど
939: 2021/10/29(金)20:05 ID:1mMf/Evz(1) AAS
遅延評価の才能がないと x = f x を思いつかないんだよな
y f = f (y f) しか分からない
940: 2021/10/29(金)21:04 ID:ZN5Hp6rJ(2/2) AAS
>>936 の何もかもが、こちらには分からない。
愚痴を言いたいだけなのか、それとも何か質問をしたいのか。
後者なら、質問内容は何か。

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

勉強しろと言われているのなら、何か資料が配られたり、
参考文献が挙げられたりしていないのか?
そういうのが既にあるのなら、取りあえず全てに当たって、
今分かる部分と分からない部分を徹底的に細かく仕訳してみればいいのでは?
941: 2021/11/05(金)06:38 ID:UB8UVAT8(1) AAS
>>936
分からないのは何故再帰処理してるのかじゃなくて(そこは定義的に明らかだし)、
どうして無限ループせずに終了するのかでいいのかな
942
(1): 2021/11/14(日)05:07 ID:HK5ctRa0(1) AAS
やっと Monad クラスから return が消えるよ
まだ計画段階たけど
外部リンク:github.com
943
(1): 2021/11/14(日)21:26 ID:bsdXePE0(1) AAS
なんで消すの?
944
(1): 2021/11/15(月)02:14 ID:jBQU3T8q(1) AAS
>>943
Applicativeクラスにpure関数があるから。
Monad則やApplicative則を満たしてるなら、
まず間違いなく pure = return だから片方で充分。

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

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

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

Monoidと関係あるんだろうか。それなら加法のために単位元が必要なのはわかるんだけど。
951: 2021/11/16(火)22:42 ID:t6DDIn3B(2/2) AAS
誰か噛み砕いて教えて下さい
952: 2021/11/17(水)06:46 ID:4zMdVbrs(1) AAS
より抽象度の高い方であるApplicativeのpureを生かすのは
私はごく自然に感じるけど

mappendと<>も機能的にダブってるから
将来Monoidからmappendが消えるよって
Monoidのドキュメントに書いてあるけど
もしかしてそれも疑問だったりする?

Semigroupの方から<>を消して、
Monoidのmappendを残すんじゃダメなの? って
953: 2021/11/17(水)08:05 ID:fLzDfeGp(1) AAS
>>950
圏論は一切関係なく、いかに誤りの無いプログラムが書けるか、
またソースコードが読みやすくなるかという実用的な理由です。
そういう観点でもう一度読んでみてください。

Haskellは実用的な汎用プログラミング言語であることを目指して作られました。
なので、今回のような理由での提案は個人的にはすごく納得できるし、大賛成です。
954: 2021/11/17(水)12:44 ID:f9gix7Cx(1/3) AAS
コメントありがとです。
Semigroupは半群、Monoidは単位元付きの半群ですよね。
言われてみると、<>に統一してmappendは消しても自然な気がする。
すごいHでログ文字列がmappendで追加されていく、サンプルを読んだことがあるので、Monoidは受け入れやすいんです。
Semigroupに単位元がないことは不思議に思わないです。半群というものを聞いたことがあったのと、
ログの例に戻ると、文字列なしのログはありえないと考えれば、単位元がないMonoidがあってもあまり不思議に思わないです。

言ってることが上と変わってきてるかもしれないですが、Applicativeが不思議に思うのは、ここに単位元?(というか単位元を生成する)pureがあること。
Applicativeの結合<*>って持ち上げられた型だけで構成されてます: f (a -> b) -> f a -> f b。
圏論何も知らないで言いますが、単位元pureは持ち上げられた型f aが自然な気がするんです。a -> f aではなく。
雰囲気でそう感じてるだけですが。

そんでもって、a -> f aが登場するのって、Monad.(>>=)だよなあってことで、だったら、returnがMonadにあるのは自然なんじゃないかな、と思うわけです。
そうすると、pureってなんのためにあるんだろう。同じ型ならMonadだけあるほうが自然だなと感じたわけです。

たぶんこれは圏論を知っていれば、変に思わないのかなと思って、そう言ったわけです。
推敲できてない感ありますが、伝わりますかね?
955: 2021/11/17(水)12:50 ID:f9gix7Cx(2/3) AAS
ちなみに自分は、自分の価値観に反してるから却下すべきだと言ってるのではなくて、
どうしてこういう構造が正しいの?実際の理論やコードでの利用例に照らしてどんな利点や意味があるのと知りたいだけです。
956
(1): 2021/11/17(水)15:59 ID:oGkdvxh0(1) AAS
そもそもapplicativeなるものが数学の圏論的に何意味するかよくわからんのだよな
monadの方はwikiのmonad (category theory)の項があってキッチリ解説されてるし

外部リンク:en.m.wikipedia.org

Tがcategory C上のmonadであるときfmap Tをμ。η_Tで定めればコレがfunctor C→Cを定義するのもわかるんだけど、applicativeについておんなじような解説が中々見当たらない
どっかでDescartes closed categoryがどうたらいうのを見た事あるんだけど誰か知りません?
957: 2021/11/17(水)16:59 ID:fpCU2YNN(1) AAS
「アプリカティブ関手はモノイド圏における強laxモノイド関手だよ、何か問題でも?」
外部リンク:blog.miz-ar.info
958: 2021/11/17(水)17:27 ID:f9gix7Cx(3/3) AAS
>>956
多分これの概要部分は見てるんですよね。
外部リンク:en.m.wikipedia.org
後ろの方はさておき、概要部分は自分はさっぱりでしたが。
959
(1): 2021/11/30(火)20:23 ID:SegqCGCa(1/2) AAS
haskell勉強しようかなって思ってるんですけどおすすめ書籍ってなにかありませんか?
ちなみにocamlでプログラム書いたことあります
型システム入門を原文で7割ほど読破しました
ちなみに大学受験の数学はそこそこ自信あります
一階述語論理の記号扱って解いていました
圏論の知識はありません
960: 2021/11/30(火)20:27 ID:SegqCGCa(2/2) AAS
ちなみにモナドは日本語版wikipediaの記事を読んだのみです
型クラスはわかります
MaybeまではわかりましたがIOモナドで躓きました
ocamlとは違って参照型がない言語だってことは意外に思いました
961: 2021/12/02(木)00:19 ID:c82IwjxK(1/2) AAS
(>>=)がただのデータコンストラクタだったらモナドはただの構文木なのに

data M b = Bind (M a) (a -> M b) | ...

みたいな定義ができない型システムだから
代数的データ型を使わないでラムダをたくさん使うことになってみんな躓く
962
(1): 2021/12/02(木)13:13 ID:kpMV/tat(1) AAS
そりゃそうやろ?
データコンストラクタと展開されるべき関数の違いをプログラマが指定しなければ処理系は与えられたexpressionをどこまで展開すべきか決定できんやろ?
963
(1): 2021/12/02(木)14:49 ID:ISSe07L0(1) AAS
>>959
Haskellを始める前に仕入れたそのような知識やOCamlの経験が、
Haskellの学習にいったいどんな影響を与えるのか、
楽にするのか、それとも邪魔にしかならないのか、正直まったく分からん。
Haskellで何をしたいのか、目的や目標も分からんし。

なので、Haskell入門者という観点だけで次の2点をすすめる。

さっと要点を学んで早くアプリを作り始めたいのなら、薄い入門書で十分。
「Learn You a Haskell for Great Good!」
が良いと思う。

ガッツリ学びたい、かつ、時間と根気があるのなら、
「Haskell Programming from first principles」
がおすすめ。

詳しくはどちらも公式サイトを参照して。

なにで学習するにしても、手や頭を動かす(プログラミングする)のが主で、
本やドキュメントを読むのは従であることを忘れずに。
964: 2021/12/02(木)17:56 ID:35Q5ApkZ(1) AAS
>>963
すみません
関数型言語って敷居が高そうなイメージあってやるにはある程度数学の素養が求められるのかなって思っていろいろ自分なりの知識があるところ挙げてみました
特に型システム入門は型推論の理論とか分かっていたほうがいいのかなと思って読んでいました
まずはLearn youの方を読んで見ようと思います
ありがとうございました
965: 2021/12/02(木)20:33 ID:c82IwjxK(2/2) AAS
>>962
ただし、IOモナドは「展開」できない方がいい
そうすれば処理系がexpressionをどれだけ「展開」しても副作用がない
966
(4): 2021/12/14(火)12:11 ID:78Ep1iUH(1) AAS
あの伝説の岡部健が復活!!
Twitterリンク:ken74047924

(おまけ情報)
Quoraでも有名だった岡部健、2021年12月にTwitterのアカウントまたまた永久凍結される。
当時のアーカイブは多少ネットに残ってるらしい

Twitterリンク:KenSmooth5
画像リンク[png]:i.imgur.com
Twitterリンク:5chan_nel (5ch newer account)
967: 2021/12/14(火)12:13 ID:l8dEnSpn(1) AAS
毛の壁から国民を守る党 72議席目
2chスレ:net
968
(1): 2021/12/14(火)12:34 ID:iFoIKYew(1/3) AAS
IQ145の人?
969: 2021/12/14(火)12:57 ID:IE9oyXDX(1) AAS
>>968
よく覚えてるな
最近はkensmoothってアカウントを連番で取得して、ネトウヨムーブを連発してたんだけど全部凍結されて今のアカウントになってる
あのネトウヨ投稿はなんだったんだろう
970: 2021/12/14(火)17:15 ID:Ad592Fxk(1) AAS
>>966
うわあ
971: 2021/12/14(火)17:39 ID:iFoIKYew(2/3) AAS
>>966
なにこの一覧
972: 2021/12/14(火)18:35 ID:SgMFGeMD(1) AAS
岡部健、Twitter再開してたのねw
Newbieとはご無沙汰してたから知らんかったわw
973: 2021/12/14(火)19:46 ID:oL+i1N1M(1/3) AAS
ツイッター再開おめでとうございます!
来年はべーやんの年になる!
と良いですね!
974: 2021/12/14(火)22:17 ID:8Kmj5/YX(1) AAS
>>966
こはひどい
975: 2021/12/14(火)22:19 ID:3V9aUzHV(1) AAS
岡部の最近凍結されたアカウントのツイートみっけた

外部リンク:archive.ph
976: 2021/12/14(火)22:22 ID:oL+i1N1M(2/3) AAS
べーやんは論客なんだな。
977: 2021/12/14(火)22:38 ID:sz+GbZW0(1) AAS
UCLAを卒業したという話は封印したみたいね
なぜ?
978: 2021/12/14(火)22:53 ID:oL+i1N1M(3/3) AAS
たまたまでは?
979
(1): 2021/12/14(火)23:06 ID:dwtzMOq3(1) AAS
Quoraでいろいろ回答しているがモナドの解説は見事だぞ
980: 2021/12/14(火)23:16 ID:NLEjPnNU(1) AAS
こんな話で勢いづいてるんじゃないよ君ら
981: 2021/12/14(火)23:42 ID:iFoIKYew(3/3) AAS
>>979
ハラデイ
982: 2021/12/15(水)00:16 ID:Xb4w9/yA(1) AAS
「モナドについて学んでいるのですが、mapやflatMapは圏論ではどの概念にあたるのですか?」
具体的に例示していてわかりやすい。
983: にしやま@大阪大学 2021/12/15(水)07:25 ID:/l12wr0Z(1) AAS
嘘つきケンちゃん、相変わらずですねww
久々にわたくしも腹筋がミシミシと鍛えられました
しばらくわたくしも加勢いたします
984: 2021/12/15(水)08:55 ID:fP8nqGj3(1) AAS
Hugs> take 10 fibs where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
[0,1,1,2,3,5,8,13,21,34]

GHCi
Prelude> take 10 fibs where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
<interactive>:6:14: error: parse error on input ‘where’
言語仕様が微妙に異なる?

オレメモ、バッチファイル
stack ghci
を目的のディレクトリ下(例、e:\haskell)に作ってディスクトップにはバッチファイルへのリンクを作っておくと
ghci起動後カーソルが消えない

貴重なHaskellスレがもう過ぐ1000行く
985: 2021/12/15(水)10:41 ID:BDga5vqT(1) AAS
>>966
ぎゃっはっはっはっは
986: 2021/12/16(木)08:29 ID:kVJbCKwy(1) AAS
令和の時代に毛の壁ふたたび
987: 2021/12/16(木)21:29 ID:k4b05O9+(1/2) AAS
自分でキャラ演出してるだろ
988
(1): 2021/12/16(木)21:38 ID:Y2CVy/MB(1/3) AAS
外部リンク:togetter.com
ちょまど氏が首突っ込んでるけど、社名背負ってよくこんな書き込み出来るもんだと、驚いた。
989: 2021/12/16(木)21:46 ID:OBc86cw8(1/2) AAS
他の人も叩いているから便乗して死体蹴りしようか的な精神が見て取れる
990: 2021/12/16(木)21:55 ID:iDMhxZSI(1) AAS
>>988
毛の壁氏、ですか、なつかしいですね
991: 2021/12/16(木)21:55 ID:Y2CVy/MB(2/3) AAS
それはマイクロソフト社の公式見解ですか?って突っ込み入れて欲しいわ。
992: 2021/12/16(木)22:06 ID:Y2CVy/MB(3/3) AAS
教祖だの洗脳だの言いがかりも甚だしいし、「学術的な真理ではないし」云々という自身の書き込みがそのままブーメランだと思うけど。
これを社名背負ってやるんだから頭おかしいわ。
993: 2021/12/16(木)22:08 ID:OBc86cw8(2/2) AAS
誰か次スレ立てろよ
994
(1): 2021/12/16(木)22:42 ID:k4b05O9+(2/2) AAS
結局モナドってなんなのかわからんということにすべて起因してる希ガス
話題になってからもう二十年くらい立つのに結論でないし、数学者でもない限り一生わからんのだろうな
995: 2021/12/17(金)13:01 ID:NPioGyUL(1) AAS
新スレを立てました。当スレ(Part33)が埋まってからの利用をお願いします。

関数型プログラミング言語Haskell Part34
2chスレ:tech
996
(1): 2021/12/18(土)00:42 ID:om0zr0Am(1) AAS
>>994
結論だせる個人は存在するけど
組織になるとなぜか、結論だせない奴が代表者を気取ってるだけじゃん
997: 2021/12/18(土)11:05 ID:1fj0JYV9(1) AAS
>>996
結論出せる個人て岡部氏のことっしょ?
そういう勢いでどうこうじゃなくって皆を納得させるような結論はないっていうこと
998: 2021/12/18(土)11:23 ID:9ehaErM5(1) AAS
納得が遅い
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.227s*