haskell-jp / random #47

どういう文脈でTsuru Capitalが出てきているのでしょうか
ファイナンシャル関係でHaskellを実務で利用している代表的な企業としてTsuru Capital が挙げられてました。
なるほど、そうなんですね。ありがとうございます。
ライブ配信されてたので、その箇所があったらここにリンクを貼ります。
ありがとうございます!
haskell-cafe で MonadFail の話題が盛り上がらない。ライブラリのメインテナーが苦労すればいい、オレ stackage を使うから関係ないって感じなのか?
@furugomu has joined the channel
マルチスレッド環境でnetwork-3.0を使っているとき、ソケットが予期しないタイミングで閉じられるというバグが発見されました。Stackageはまだ2.8なのでstackユーザーには影響はなさそうですが、しばらく移行は見送ったほうがよさそうです 
逆説的ですが、stackageではなくHackageの最新版を追いかけることの重要性を感じました。使わなければバグは見つからず何ヶ月も放置されてしまうので…
ごめんなさい。
まだ、よくわかってないですが、accept の中で、どうしてソケットが GC されちゃうんでしょうか?
https://github.com/haskell/network/blob/7e3f16d57b8745ef12cec8c9164bb91eeac90b5b/Network/Socket/Internal.hs#L194 この関数の中で発生します。fdSocketでFdを取り出したら元のIORefは必要なくなるので、threadWaitRead fdしている間にGCされる可能性があります
「fdSocketでFdを取り出したら元のIORefは必要なくなる」が理解できなかったんですが、高野さんのサンプルコードだと、accept が呼ばれたら、どこからも sock が指されてないってことですかね?
_ <- accept sock の次に print sock を入れると問題は起きないので、そういうことかな。
fdSocket が原因とされている理由がまだ分かりません。ブロックするAPIが、ソケットがGCされないことを保守すればよい(できるか分からないけど)?
はい。一度しかacceptやrecvしないようなプログラムではこの問題が起こります
https://github.com/haskell/network/pull/352 このPRで実装されているように、acceptの終わり際にtouch#(あるいはwith#)する必要がありそうです
fdSocketは原因ではないけど、使われている場所では問題が起きやすいから、安全なAPIを作って、それに移行しましょうということですね。
いつ閉じられるかわからないリソースを返す関数は危険ですからね
@kazu PR送りました :curling_stone: https://github.com/haskell/network/pull/398
肖像画みたいなのはどういう人々ですか。
@ has joined the channel
IOHKではカルダノっていう暗号通貨を開発してて、そこでは予定している大型アップデートにそれぞれ著名人の名前がつけられます。なので、うしろの絵はその人たちの肖像画ですね。
Cardano, Ada, Byron, Shelley, Goguen, Basho, Voltaire
@ has joined the channel
Yasuaki Takebe
@Yasuaki Takebe has joined the channel
@stephan has joined the channel
@ has joined the channel
@ has joined the channel
@Nash has joined the channel
@igrep 本日のもくもく会、所用で(ギリギリですが)17時ごろの参加となりそうです。恐れ入りますがよろしくお願いいたします。
了解です。特にご連絡はなくても大丈夫ですよ!
するとしてもどちらかというと https://haskell-jp.connpass.com/event/125266/ のコメント機能の方が助かります。
承知しました。ありがとうございます。
@r6eve has joined the channel
@kayhide 口頭で触れた、Defunctionalizationを生かしてTypeFamilyをより柔軟に使えるようにする話です。
https://haskell-jp.slack.com/archives/C5666B6BB/p1554435528020400?thread_ts=1554427355.015200&cid=C5666B6BB
https://github.com/fumieval/membership 以前からおびただしい数の再実装がされており共通化の必要性が叫ばれていた、拡張可能レコード・バリアント・エフェクトなどに応用できる型レベルリストのためのライブラリを新しく作りました(ほとんどextensibleから切り取っただけですが)。今後extensibleを上回るようなものが出るかどうかはともかく、似たようなライブラリを作る際に面倒な部分をやる必要がなくなります
@fumieval 土日を挟んで遅くなりましたが、修正の PR を出しました。
Haskell performance(色々なパッケージのベンチマークをしている謎の組織)にwineryで殴り込みをかけてみました。 スピード特化のstoreやflatにも迫る、期待以上の結果が出ました
Masamichi Sato
@Masamichi Sato has joined the channel
ちょっとしたサーベイなんですが、最近Haskellで取り組んでいる問題や、知りたい情報などがあれば教えていただけませんか?今後のネタ作りに使います
↓こちらから↓
最近あきらめたのが(extensible の話で少し退屈かもだけど)
class C a b | a -> b where
    ...

hoge :: Forall2 (ValueIs C) as bs => Record as  -> Record bs

みたいな関数を作ること。
ユースケースとしてはコマンドライン引数から特定のレコード型を構築できないかなと考えてた。
コマンドラインからは ID 的なのを与えて。
(うーん…出来ないような気がするけど…)

あとは GraphQL クライアントが欲しいなぁとずっと考えてる(とくにデコード先が extesnible record になる)

こんな感じ?
限りなくそれに近いメカニズムを考えてみました https://github.com/fumieval/extensible/blob/promote/src/Data/Extensible/Promote.hs
GraphQLクライアント、確かに欲しい…リクエストとレスポンスの関係があるがそれがwell-definedではないというのが厄介なところですね
なるほど。 C a bb 側を h :* xsh に載せるのか。TypeFamily で。
あざっす!(爆速で終わっちゃたけど…)
あ、そうだ。
別にHaskellで取り組んでた問題とかじゃないけど、RubyKaigiでクックパッドの遠藤さんと笹田さんが、 ソースコードに任意のテキスト書き加えて "Hello world" と出力させるクイズ をやってました。
書き加えるテキストの文字数が少ないほど良いというルールで(なお全て1文字で解ける)
こういうの (メモから書き起こしてるので間違ってるかも)
include Math

Out, *,
     Count = $>,
             $<, E ** (2 * PI)
Out.puts("Hello world" *
         Count.abs.round)

def say
  }-> {
    "Hello world"
  }
  yield
end

puts say { "Goodbye world" }

まぁ Haskell だと、Ruby ほどの自由度はないかもだけど。。。
クイズ面白そうですね
常用漢字2136字を出力するプログラムを、2136文字以内のコードで実装するという問題を思いつきました
最近Haskellで取り組んでいるのはRecursion Schemesで知りたいのはその応用例です…!!