haskell-jp / random #17

申し込むときに「何の団体か」というのを記述する欄がありまして、そこに記述しておくとOSC公式サイトに団体名やURLが掲載されたりするのでせっかくなら個人枠ではなくHaskell-JP枠で出場した方が宣伝効果もあって良いかなと思いまして。
であれば、 @igrep さんの了承を得た上で、 Haskell-JP を名乗るという案に個人的には :+1: です。
いいと思います!ただし、正式な表記は「Haskell-jp」と小文字にしているのでご注意ください!
ありがとうございます!
ちなみに、 で触れているとおり、
「「Haskell-jp」としてはゆるめのつながりでありたい」ので特にメンバーのリストを作るつもりはないです。
@aruneko 念のため把握しておきたいのですが、登録予定のイベントは https://www.ospn.jp/osc2018-do/ のことですよね?
そうです!
申し込み完了しましたー
細々とすみません @aruneko 活動記録としてSlack以外のところにも書いておきたいので、OSC Sapporo終了後でよいのでHaskell-jp Blogに記事を上げていただけるとありがたいです。 :bow:
わかりました、セミナーの様子とかをご紹介できればと思います!
さっそくご対応いただき、参加グループ一覧にHaskell-jpが掲載されました!
https://www.ospn.jp/osc2018-do/
@asai.nrv has joined the channel
apus ( Haskell製のリアルタイムなWiki)を使ってextensibleパッケージの攻略Wikiを立ち上げました。<@U5B3EGEFQ> さん、<@U56L7EVNY> さんの協力のおかげで急ピッチで内容が追加されています!
会社のプロキシからだと繋がらないようですが、スマートフォンから見られました!
実は私もそうなんですよねぇ。 :disappointed:
リバースプロキシを通すとWebSocketでうまく通信できないという問題があって直接接続しているのですが、やっぱりそれがだめな環境も多いんですね…
WebSocketがそもそも使えない場合もあるらしい…
ああー、なるほど。well known portじゃないからってことですか。。。 :disappointed:
well known port であっても,wsだと思われると弾く組織内プロキシも見たことあります.websocket使うならwell known port(というか443)でwssで使うくらいの気合いが必要という印象です.他にも繋いだたけで何もしてないと切るプロキシとかもいるので ping frameとかも定期的にやるみたいな
Let's encryptしますか…
@sugano has joined the channel
ソフトウェアでできないと思い込んでいたけど実はできたことってよくありますよね。
思えばこういう書き方はできないと勝手に思い込んでました。。。 :sweat_smile:
:notebook_with_decorative_cover: https://github.com/tfausak/wuss/blob/b7cea207f42740eb706120929d66863d4f8ed299/library/Wuss.hs#L61
「文字列をプリティプリントするライブラリが多すぎる」 
@rsksound has joined the channel
pretty-simpleを入れてくれて嬉しいんですけど、確かに多すぎますね、、、
最近全然開発進めていないんですけどね
extensible攻略WikiでTLSが使えるようになりました!多分これで繋がりやすくなったはず 
@n.tatsuki.214 has joined the channel
プロキシ越しでも見れました!
会社のプロキシ配下から見られました! :clap:
が、ちょっと表示が崩れちゃってますね。。。
スレッドのコメントでは画像の投稿ができないので別途送ります。
@igrep uploaded a file: image.png and commented: https://wiki.hask.moe/ の表示崩れです。
Chrome 66.0.3359.170 Windows 10にて。
ghc8.4.3をリリースするかもしれないという話しが出ています。
ghc8.4.2が、Ubuntu 18.04LTS上の特定のケースにて、gnuのbinutils由来の不具合を踏むとのことです。
(ghcのリリースポリシーからすると、こういう場合はリリースしないのが基本かもしれないけれども、今回はリリースする方向の雰囲気です。)

https://ghc.haskell.org/trac/ghc/ticket/15068
https://pay.reddit.com/r/haskell/comments/8ic3c5/ghc_fatally_broken_on_ubuntu_1804_bionic_and/
https://mail.haskell.org/pipermail/ghc-devops-group/2018-May/000186.html
@fumieval commented on @igrep’s file image.png: 修正しました!
extensibleの使い方について質問です。
現在「レコードから指定したキーの要素を取り除いたレコードを返す関数」を作ることを目指して、こんな感じの関数を書いてみました。
without :: Membership xs x -> (h :* xs) -> (h :* ys)
without k =
  hfoldrWithIndex (\i e r -> if k == i then r else e <: r) nil

しかし残念ながら ysxs の関係をうまく推論できないのか、型エラーになってしまいます。
型レベルプログラミング力が足りず、手詰まり気味です。
よい方法を教えていただきたく! :pray:
手元でやってませんが ys ⊆ xs というのをつかえば行けると思います
https://hackage.haskell.org/package/extensible-0.4.9/docs/Data-Extensible-Inclusion.html#t:-8838-
あ、そもそも難しそうだなぁ(笑)
うーん、やっぱり単純に制約をつけるだけではダメですね。。。

app\Main.hs:37:3: error:
    ? Could not deduce: ys ~ '[]
      from the context: Include xs ys
        bound by the type signature for:
                   without :: forall (xs :: [*]) (ys :: [*]) x (h :: * -> *).
                              Include xs ys =>
                              Membership xs x -> (h :* xs) -> h :* ys
        at app\Main.hs:35:1-71
      ‘ys’ is a rigid type variable bound by
        the type signature for:
          without :: forall (xs :: [*]) (ys :: [*]) x (h :: * -> *).
                     Include xs ys =>
                     Membership xs x -> (h :* xs) -> h :* ys
        at app\Main.hs:35:1-71
      Expected type: (h :* xs) -> h :* ys
        Actual type: (h :* xs) -> h :* '[]
    ? In the expression:
        hfoldrWithIndex (\ l e r -> if k == l then r else e <: r) nil
      In an equation for ‘without’:
          without k
            = hfoldrWithIndex (\ l e r -> if k == l then r else e <: r) nil
    ? Relevant bindings include
        without :: Membership xs x -> (h :* xs) -> h :* ys
          (bound at app\Main.hs:36:1)
   |
37 |   hfoldrWithIndex (\l e r -> if k == l then r else e <: r) nil
   |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

app\Main.hs:37:52: error:
    ? Couldn't match type ‘'[x1]’ with ‘'[]’
      Expected type: h :* '[]
        Actual type: h :* '[x1]
    ? In the expression: e <: r
      In the expression: if k == l then r else e <: r
      In the first argument of ‘hfoldrWithIndex’, namely
        ‘(\ l e r -> if k == l then r else e <: r)’
    ? Relevant bindings include
        e :: h x1 (bound at app\Main.hs:37:23)
        l :: Membership xs x1 (bound at app\Main.hs:37:21)
   |
37 |   hfoldrWithIndex (\l e r -> if k == l then r else e <: r) nil
   |                                                    ^^^^^^
ys[] だったり要素が入っていたりすることが伝わっていないみたいですね。。。 :thinking_face:
あ、上記のエラーが出たときですが、こう :point_down: 書き換えてました。
without :: (Include xs ys) => Membership xs x -> (h :* xs) -> (h :* ys)
without k =
  hfoldrWithIndex (\l e r -> if k == l then r else e <: r) nil
あぁええと、ひとことでは説明しにくいんですけど、hfoldWithIndex って畳み込んだ結果の型が同じじゃないといけないんですが、nil と xx <: nil は別の型なんですよ
これを解決するには一工夫必要でして…
どうもextensibleにはhFilterみたいなものがないみたいなので参考にするためにほかのライブラリーを探しています。
http://hackage.haskell.org/package/HList-0.5.0.0/docs/Data-HList-Dredge.html のあたり参考になるかな。。。
実行時には難しいですが、shrink などを使うと型の拡縮はできますけど…たしかに filter のようなものはなさそう…(fumi さんならもっとクールな回答をくれるかもだけど)
この場合、型レベルリストから要素を取り除く型族Remove :: k -> [k] -> [k]を作ることからスタートになりますね
なるほど。やっぱり http://hackage.haskell.org/package/HList-0.5.0.0/docs/Data-HList-Dredge.html では型クラス(と、FunctionalDependencies)でやってたことをまねすることになりそうですね。
(⊆)関係のAPIをそのまま使えるようにRemoveやFilterを定義する問題、型レベルプログラミングの良い練習問題になりそう
@knaito has joined the channel
すみません、今更ですが投稿先間違えてました。。。ここは questions じゃない。。。