haskell-jp / random #71

@cutsea110 遅い反応ですが、3つの構成子の件。
dataの直和型には、expression problemがあります。
なので、コードを完全に自分で管理でき、後から構成子を増やすことに問題がなければ、単純にdataを使います。
ユーザが拡張する可能性があるなら、PatternSynonymsを使います。
[n] := ∀ X1,...,Xn . X1 + ... + Xn 
in_n,k :: [n-1] -> [n]

のような抽象概念があれば、
Either つかうかどうか問題は解決しそうだと思いましたが
実際あるのでしょうか。
( dependent type をもつシステムでは、型と項の垣根がないので、普通に定義できそうですが、
Haskell だと厳しいのだろうか。)
拡張可能和みたいなのを指しているんですかね?
ライブラリーとしてはいくつか提供しているものがありますね。
https://hackage.haskell.org/package/extensible-0.8/docs/Data-Extensible-Sum.html とか
おおお、それです。ありがとうございます!
確かに便利ではあるんですが、競合するものがいくつかあって標準もなかったり、記述が標準よりも冗長になりがちだったりで、なかなかおいそれと使おうとはならないのが悩ましいんですよねぇ :disappointed_relieved:
Thanks
@kazu
Haskell でsubtype を定義する方法ってありますか?
例えば、NaturalNumbers N に対して、EvenNumbers EN のsubtype としてユーザーが定義したいような状況です。
コンパイラが型推論に部分型を用いているならば、
部分型をユーザー定義した場合、型推論器の挙動が少し変わってくるな、と思ったので、そういう仕様が提供されているのか気になりました。
subtype がユーザ定義できる言語の想定仕様としては、
例えば、
• Prelude に Set が内包されていると仮定して、subset => subtype という法則が内部言語に存在する
• subtype relation が Prelude に定義されていて、ユーザ定義されたsubtype relation が内部言語と競合しないことを確かめてからそれらを取り入れる
などが考えられるのではないかと思いましたが、
このような機能は、Haskell にはふくまれていないのではないかと思う。
(二つ目の機能があればの空想の話ですが、もしそれを安易な競合チェックで済ましてしまえば、部分型の推論器を容易にハックできてしまうのではないかなどとも思いました。だからこのような機能は現時点ではない?)
最後の仕様の話はよくわからないけど、多くの言語で継承などによって実現されてる機能はないです
ありがとうございます。
@shimbaco has joined the channel
詳しい https://qiita.com/mod_poppo/items/80c442a1d95471e6ac55
自前でrewrite rule書かないと最適化はされないのか... :disappointed:
記事中にもありますが、あくまで Addr 用の変換関数が用意できる場合、それを元に rewrite rule が書けるという話で、厳密に言えば最適化ではありません

unpackCString との rewrite による変換がない場合でも、foldr で pack 処理が書いてあり、インライン展開できるなら、foldr / build は入るようになっています (この場合、unpack 処理は unpackFoldrCString# という関数で行なわれ、リストは生成されません)
おお、すみません、周辺をちゃんと読めてませんでした
haskell のghci 上で
λ> m x = x x 

とたたくと
<interactive>:1:10: error:
  • Occurs check: cannot construct the infinite type: t ~ t -> t1
  • In the first argument of 'x', namely 'x'
   In the expression: x x
   In an equation for 'm': m x = x x
  • Relevant bindings include
    x :: t -> t1 (bound at <interactive>:1:3)
    m :: (t -> t1) -> t1 (bound at <interactive>:1:1)

と出てきますが、
infinite type を haskell では導入できないのでしょうか。
> m m 

が型つけできないだけであれば、
infinite type を許して、型付けできない場合に error を検出すればいいのではないか、などと安易に考えましたが、
これを検出することは難しいでのでしょうか。
なんらかの polymorphism が入っており、infinite type によって rank-2 polymorhism を許してしまうからダメだ。
というのであれば、infinite type も拡張機能として入っているのかななどと思いました。
このあたり実際どうなっているのでしょうか。
これに答えがのっていそう( OCaml の -rectypes フラッグは知らなかった )
https://www.quora.com/Why-doesnt-Haskell-implement-infinite-types
[T] = T 

を許すからか。納得。
@hangedman has joined the channel
そういえば、現在 ACM Digital Library で、リモートワークを支援するため 6/30 まで全リソースが無料でアクセスできるようになっています。
https://www.acm.org/articles/bulletins/2020/march/dl-access-during-covid-19

https://gitlab.haskell.org/ghc/ghc/-/wikis/reading-list が、一部有料で手が出せないなと思っていた人は、この機会を利用してみるのもいいかもしれません :wink:
ACM Digital Library について、変な質問ですけど、こんなのあるよみたいなおすすめとかありますか。個人的には、あちこちから参照されてる割に読めなかった「Once upon a type」っていうのを読んでみようと思っています。
お勧めと言うわけではありませんが、関数型プログラミング界隈の論文は、ICFP の Proceedings が ACM DL に置いてあるので、気になったの見てみると良いと思います:
https://dl.acm.org/conference/icfp/proceedings

Haskell Symposium のものについては、Haskell の欄にありますね
(なお、ICFP の proceeding は基本分かるように書かれていない (と思っている) ので、随時気になるタイトルがあって内容が理解できなければ、参照論文を追っていくのがいいと思います (原論文自体を理解するよりそっち読む方がためになったり))
そういえば、
https://dl.acm.org/action/doSearch?AllField=Functional+Pearl
はお勧めで、こちらはチュートリアル形式 (親切かは結構著者によりますが) なものが多いので、読みやすいと思います。

https://wiki.haskell.org/Research_papers/Functional_pearls
にもリスティングされてるみたいですね

(こっちは僕はこの機会に乗じて何個かダウンロードしたものがあります)
(具体的な名前を上げるのは、ACM DL の無料公開の目的に沿わない気がするのでやめときますね。なお、ACM 会員には ACM DL への無制限のアクセスが付与されるようです。年 $198 で入れるのかな?)
最後の点もふくめて承知しました。ありがとうございます…!
Nobuyuki Tomizawa
なお、ACM 会員には ACM DL への無制限のアクセスが付与されるようです。年 $198 で入れるのかな?)
そのとおりです。私も会員です。DLへのアクセスはオプション?扱いでこれが要らなければ半額になります。DLへの無制限アクセスがなくても、CACMの電子版にはアクセスできると思います。
@mtkaaai has joined the channel
ICFP proceedings を読んでたら可愛かったので共有します。
Nobuyuki Tomizawa
ICFP以外にその前身の*Functional Programming and Computer Architecture* (*FPCA*) と *LISP and Functional Programming* (*LFP*)を見てみてもいいかもしれません、古いですが。
https://github.com/actions/starter-workflows/pull/341 GitHub Actionsが公式で提供するHaskell/cabal向けのCIの設定を修正・改良し、変更が昨夜マージされました。既にTravisやCircle CIなどを使っている場合はわざわざ乗り換えるほどのものではないかもしれませんが、簡単に導入できてカスタマイズもしやすいので試してみてはいかが
これはWindows/macOSも使えますか?
runs-on: ubuntu-latestとあるのでLinux専用みたいですね。AppVeyorは並列度が低く、いくつもjobがあると遅いので、GitHub Actionsでできると良いなと思っています。
haskell-CIのフォークの最新版は他のプラットフォームにも対応しているようなので、このように変更したらWindowsも使えました 
「Haskell IO モナド」のグーグル検索結果 () の上位勢が、GHC の IO inside 話で埋まっているため、その改善を目指して書きました (入門者の間で結構混乱が起きてるようなので):
https://github.com/haskell-jp/blog/pull/189

時間ある方レビューお願いしたいです。また、うまく上位に食い込んでいきたいので、SEO 的に何かアドバイスがあればそれも貰いたいです。よろしくお願いします (なお、プレビューはコメントのリンクから見れます)
いいですね。ありがとうございます。
:tada: 昨日の記事が haskell.jp におけるはてブ数圧倒的 :muscle: トップ :tada:
https://b.hatena.ne.jp/entrylist?url=https%3A%2F%2Fhaskell.jp%2F
肝心の検索の結果は、はてブのエントリーページが1ページ目にヒットするという微妙な結果に... :disappointed_relieved:
https://www.google.com/search?client=firefox-b-d&q=haskell+io%E3%83%A2%E3%83%8A%E3%83%89
@tnoda78 has joined the channel
Google 検索、自分の記事より他の記事を推薦するみたいな事できるんですかね?
さぁ、それはちょっとわからないですね... :disappointed:
いろいろ悪さができるかもですし、なさそう
"Practical FP in Scala: A hands-on approach" という本のサンプルをHaskell :haskell: に翻訳したそうで
https://github.com/gvolpe/shopping-cart-haskell