関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/
探検
関数型プログラミング言語Haskell Part31©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
2017/09/27(水) 02:33:08.70ID:2XAqPuH2
981デフォルトの名無しさん
2019/01/24(木) 00:53:14.43ID:cVpDBcbd kotlin以下w
kotlinってあれだろ鳥箱の中で争わせて、強いものが… キャー
【IT】習得したいプログラミング言語、したくない言語 プログラミング言語実態調査 2018
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00501/111200004/
kotlinってあれだろ鳥箱の中で争わせて、強いものが… キャー
【IT】習得したいプログラミング言語、したくない言語 プログラミング言語実態調査 2018
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00501/111200004/
982デフォルトの名無しさん
2019/01/24(木) 10:45:53.06ID:TePOwsZ1 擬人化してくれ
983デフォルトの名無しさん
2019/01/24(木) 17:57:50.91 Haskell は初期学習コストが高すぎるのと、圏論イキリおじさんが煙に巻くので近寄りがたい雰囲気を醸している
984デフォルトの名無しさん
2019/01/24(木) 18:25:57.35ID:wii/ewut ちょっと勉強したけど、なんか仕様がコロコロ変わってるような気がして、
本格的に手を出しにくい
本格的に手を出しにくい
985デフォルトの名無しさん
2019/01/24(木) 18:27:39.45ID:tqh7mtUe mtl パッケージの Control.Monad.Reader モジュールで MonadReader クラスが定義されています。
この定義で、なぜ m -> r などという制約が課せられているのでしょうか。
class Monad m => MonadReader r m | m -> r where
この制約がないと何が不都合なのでしょうか。
この定義で、なぜ m -> r などという制約が課せられているのでしょうか。
class Monad m => MonadReader r m | m -> r where
この制約がないと何が不都合なのでしょうか。
986デフォルトの名無しさん
2019/01/24(木) 23:18:18.45ID:9BqsZZXL 関数従属を消すとコンパイルが通らなくなる例
https://ideone.com/sdajAE
具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
instance Monad m => MonadReader () (ReaderT r m) もあり得るから
MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない
https://ideone.com/sdajAE
具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
instance Monad m => MonadReader () (ReaderT r m) もあり得るから
MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない
987デフォルトの名無しさん
2019/01/25(金) 00:43:33.65 m → r
mを決めると自動的にrも決まるという意味だろうか
いまモナドを、ReaderT r m と決めた
だからそこで使われる r が自動的にMonadReader r 〜の r となるのだ
このように素人目に推測できる
mを決めると自動的にrも決まるという意味だろうか
いまモナドを、ReaderT r m と決めた
だからそこで使われる r が自動的にMonadReader r 〜の r となるのだ
このように素人目に推測できる
988デフォルトの名無しさん
2019/01/25(金) 08:16:02.28ID:iIPgsGqp >>983
モナド使うだけなら圏論要らんけどな。
自作するなら圏論要るけど、それはHaskellが難しいんじゃなくて圏論(とか数学)が難しいだけで。
自作しないでただのプログラミング言語として使う分には難しくない。
(どこまで抽象化できるか研究してる人が多いから難しく感じるだけ)
>>=演算子はモナドを受け取ってモナドを返す演算子と覚えておけば良い。
(だからモナド受け取って、モナドの中の値を取り出して処理したらreturnでモナドに包むか、モナド返す関数に引数として渡す)
returnとかclassとか、普通の言語にも同じ用語が出るからって、同じ意味と考えないほうがいい。
まっさらな頭で挑むべし。
(そういう意味で初心者の方が理解が早い)
モナド使うだけなら圏論要らんけどな。
自作するなら圏論要るけど、それはHaskellが難しいんじゃなくて圏論(とか数学)が難しいだけで。
自作しないでただのプログラミング言語として使う分には難しくない。
(どこまで抽象化できるか研究してる人が多いから難しく感じるだけ)
>>=演算子はモナドを受け取ってモナドを返す演算子と覚えておけば良い。
(だからモナド受け取って、モナドの中の値を取り出して処理したらreturnでモナドに包むか、モナド返す関数に引数として渡す)
returnとかclassとか、普通の言語にも同じ用語が出るからって、同じ意味と考えないほうがいい。
まっさらな頭で挑むべし。
(そういう意味で初心者の方が理解が早い)
989デフォルトの名無しさん
2019/01/25(金) 18:42:51.74ID:sjWwXpoO >>986
例は理解できました。
話も、
> 具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
> instance Monad m => MonadReader () (ReaderT r m) もあり得るから
ここまでは理解できたのですが、
> MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない
ごめんなさい、この意味がまだよく分かりません。
MonadReaderに関数従属がないと、
ReaderT型がMonadReaderクラスのインスタンスとして定義できない、
という事でしょうか。
例は理解できました。
話も、
> 具体的には instance Monad m => MonadReader r (ReaderT r m) の他に
> instance Monad m => MonadReader () (ReaderT r m) もあり得るから
ここまでは理解できたのですが、
> MonadReaderに関数従属がないとReaderTの型クラスのようには扱えない
ごめんなさい、この意味がまだよく分かりません。
MonadReaderに関数従属がないと、
ReaderT型がMonadReaderクラスのインスタンスとして定義できない、
という事でしょうか。
990デフォルトの名無しさん
2019/01/25(金) 20:09:29.73ID:RwHnV4/s C++のtemplateのような制約がないダックタイピングに不都合を実感した者は理解が早い
初心者より早い
初心者より早い
991デフォルトの名無しさん
2019/01/25(金) 20:13:55.21ID:DHFZGKPe >>989
型推論において instance Monad m => MonadReader (ReaderT r m) のように扱えると言いたかっただけです
上のコードが意味することを言い換えたつもりだったんですが
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
とした方が正しかったですね
型推論において instance Monad m => MonadReader (ReaderT r m) のように扱えると言いたかっただけです
上のコードが意味することを言い換えたつもりだったんですが
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
とした方が正しかったですね
992デフォルトの名無しさん
2019/01/26(土) 19:27:32.21ID:2lj1Pdko >>991
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
> とした方が正しかったですね
まだよく分からないです。
これは、関数従属があるからこそ Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える、
ということですよね。
逆に言えば、関数従属がないとそのそうにできない、と。
試しに MonadReader クラスと ReaderT 型を mtl のソースと同じように自作してみました。
(あれは実質 transfirmers の re-export なので、tranformers のソースのように、が正しいですが)
すると、MonadReader クラスの関数従属がなくても、
ReaderT 型を MonadReader クラスのインスタンスにできてしまいました。
エラーなくビルドでき、同じように使うことができました。
どういうことでしょうか。
コンパイラは ghc-8.6.3 です。
言葉としては Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える
> とした方が正しかったですね
まだよく分からないです。
これは、関数従属があるからこそ Monad m => ReaderT r m をMonadReaderのインスタンスのように扱える、
ということですよね。
逆に言えば、関数従属がないとそのそうにできない、と。
試しに MonadReader クラスと ReaderT 型を mtl のソースと同じように自作してみました。
(あれは実質 transfirmers の re-export なので、tranformers のソースのように、が正しいですが)
すると、MonadReader クラスの関数従属がなくても、
ReaderT 型を MonadReader クラスのインスタンスにできてしまいました。
エラーなくビルドでき、同じように使うことができました。
どういうことでしょうか。
コンパイラは ghc-8.6.3 です。
993デフォルトの名無しさん
2019/01/26(土) 20:36:51.56ID:YCYcr/Gx >>992
instance Monad m => MonadReader r (ReaderT r m)
この場合インスタンスなのは r と Monad m => ReaderT r m の組み合わせだと理解しているんですが
いずれにしても言いたかったのは前の方の r を無視して扱えるようになるということで
なにか間違ってるようなら忘れてもらって構わないです
instance Monad m => MonadReader r (ReaderT r m)
この場合インスタンスなのは r と Monad m => ReaderT r m の組み合わせだと理解しているんですが
いずれにしても言いたかったのは前の方の r を無視して扱えるようになるということで
なにか間違ってるようなら忘れてもらって構わないです
994デフォルトの名無しさん
2019/01/27(日) 14:38:45.77ID:joZtszNb UndecidableInstancesだからでは?
自分も理解しきれてないけど
自分も理解しきれてないけど
995デフォルトの名無しさん
2019/01/27(日) 20:30:51.01ID:wGWJPOk3 質問ではなく否定ができる者は理解が早い
どういうことでしょうか、ではなく、ここが間違っているのを知ってる俺は正しい
その方が圧倒的に早い
どういうことでしょうか、ではなく、ここが間違っているのを知ってる俺は正しい
その方が圧倒的に早い
996デフォルトの名無しさん
2019/01/28(月) 02:18:47.10ID:UwyAz0OY すいません。
初心者でこんなこと聞くのもお恥ずかしいんですが、なにをどうググっても情報がでてこないのでお聞きします。
いま話題になってる>>985さんの
class Monad m => MonadReader r m | m -> r where
が全く意味すらわかりません。
“class” が型class を定義する宣言で
“Monad m” が “m は Monad のインスタンスであるときに”
を意味してるんですよね?
そのとき “型 MonadReader r m” が定義されるという風に読めばいいんですよね?
で、その後の
“| m -> r”
がわかりません。
>>985さんは
>この定義で、なぜ m -> r などという制約が課せられているのでしょうか。
と言われてますが、”制約” とはなんですか?
こんな質問して話の腰を折ってはいけないとなんとか自力でググりまくったんですが全くこの記述の意味を理解する情報を発見することはできませんでした。
載っている参考文献でも結構ですのでどなたか教えていただけませんか?
初心者でこんなこと聞くのもお恥ずかしいんですが、なにをどうググっても情報がでてこないのでお聞きします。
いま話題になってる>>985さんの
class Monad m => MonadReader r m | m -> r where
が全く意味すらわかりません。
“class” が型class を定義する宣言で
“Monad m” が “m は Monad のインスタンスであるときに”
を意味してるんですよね?
そのとき “型 MonadReader r m” が定義されるという風に読めばいいんですよね?
で、その後の
“| m -> r”
がわかりません。
>>985さんは
>この定義で、なぜ m -> r などという制約が課せられているのでしょうか。
と言われてますが、”制約” とはなんですか?
こんな質問して話の腰を折ってはいけないとなんとか自力でググりまくったんですが全くこの記述の意味を理解する情報を発見することはできませんでした。
載っている参考文献でも結構ですのでどなたか教えていただけませんか?
997デフォルトの名無しさん
2019/01/28(月) 12:06:40.91ID:kUDYAe70 http://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#functional-dependencies
https://github.com/shiatsumat/wiwinwlh-jp/wiki/%E5%9E%8B%E6%97%8F
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#functional-dependencies
https://github.com/shiatsumat/wiwinwlh-jp/wiki/%E5%9E%8B%E6%97%8F
998デフォルトの名無しさん
2019/01/28(月) 12:15:36.89ID:LeZdguT6 >>996
私が元の質問者ですが、気にしないで質問なさってください。
>> を意味してるんですよね?
ここまでは良いと思いますが、
>> そのとき “型 MonadReader r m” が定義>> されるという風に読めばいいんですよね?
違います。
定義しているのは型ではなく型クラスです(細かいですが大事なところなので)。
それと | m -> r は、>>986 でもチラッと名前が出てきましたが、日本語では「関数従属」です。
「haskell 関数従属」でググるとでてきます。
簡単に言えば、| m -> r はこのクラスのインスタンス型において、
型変数 m の型が具体的に決まれば、型変数 r の具体的な型が「一意に」推論できなければならない、
という制約です。
例えば class TTT a b | a -> b という宣言があると、
TTT Int String というインスタンス型と TTT Int Double というインスタンス型は「同時には」存在できません。
a の型が Int なのに、b の型が String の場合のインスタンス型も Double の場合のインスタンス型も定義されているからです。
逆に、TTT String Int と TTT Double Int はOKです。
関数従属になんら違反していません。
| x -> y の x と y の並び順番に気をつけてください。
私が元の質問者ですが、気にしないで質問なさってください。
>> を意味してるんですよね?
ここまでは良いと思いますが、
>> そのとき “型 MonadReader r m” が定義>> されるという風に読めばいいんですよね?
違います。
定義しているのは型ではなく型クラスです(細かいですが大事なところなので)。
それと | m -> r は、>>986 でもチラッと名前が出てきましたが、日本語では「関数従属」です。
「haskell 関数従属」でググるとでてきます。
簡単に言えば、| m -> r はこのクラスのインスタンス型において、
型変数 m の型が具体的に決まれば、型変数 r の具体的な型が「一意に」推論できなければならない、
という制約です。
例えば class TTT a b | a -> b という宣言があると、
TTT Int String というインスタンス型と TTT Int Double というインスタンス型は「同時には」存在できません。
a の型が Int なのに、b の型が String の場合のインスタンス型も Double の場合のインスタンス型も定義されているからです。
逆に、TTT String Int と TTT Double Int はOKです。
関数従属になんら違反していません。
| x -> y の x と y の並び順番に気をつけてください。
999デフォルトの名無しさん
2019/01/28(月) 12:17:56.53ID:H3y/QtCH すみません質問いいですか?
1000デフォルトの名無しさん
2019/01/28(月) 12:39:33.26ID:MTZ0KVk9 いいよ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 488日 10時間 6分 25秒
新しいスレッドを立ててください。
life time: 488日 10時間 6分 25秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【速報】東京・足立区のひき逃げ事故 警視庁が運転手とみられる人物確保 80代男性の死亡確認、20代女性心肺停止 ★6 [Ailuropoda melanoleuca★]
- 東京・足立区のひき逃げ事故 警視庁が運転手とみられる人物確保 窃盗容疑で男に逮捕状 80代男性の死亡確認、20代女性心肺停止 ★7 [Ailuropoda melanoleuca★]
- 防衛費増額「賛成」62・8% 「反対」32・2%を大きく上回る 賛成「18~29歳で8割」世代差あらわ 産経FNN合同世論調査 ★2 [尺アジ★]
- 【宅急便】ヤマト運輸がベトナム人ドライバー500人採用…不安視される「運転技術」「コミュニケーション」「助成金」 ★2 [シャチ★]
- 【東京・足立のひき逃げ事故】搬送の80代男性が死亡、事故車両は近隣販売店から盗難か [ぐれ★]
- 【国防】衝撃を与えた米シンクタンクの「台湾侵攻シミュレーション」日本の被害は?★2 [1ゲットロボ★]
- WBC世界バンタム級 那須川天心 vs 井上拓真 3
- WBC世界バンタム級 那須川天心 vs 井上拓真 2
- 競輪実況★1609
- 〓たかせん〓 日本一パレード&ファンフェスティバル
- こいせん 全レス転載禁止
- 巨専】
- 【悲報】トランプ聖帝「政府効率化省…?そんなの知らないめう」いつの間にか廃止になっていた。パクって作った高市どーすんのこれ [731544683]
- ちいかわたちが高市早苗と戦うマンガ書いた [856698234]
- 【高市悲報】中国、非常にしつこい「高市首相に改めて発言撤回を要求」 [614650719]
- 🏡なんかこんな感じで友達が両手を突き出してくるんやが👊😅👊
- 高市早苗の子ども手当にネトウヨから批判殺到「子どもいる家庭はそもそも金持ちだろ」😨 [245325974]
- 【高市監視】 ファミリーマート「フランチャイズ店の損益計算書を 本部で一元把握出来るシステムが完成した!」 なんかヤバそう😨 [485983549]
