haskell-jp / random #50

@me.nobv.io_slack has joined the channel
showした結果をブラウザーで読めるようにしてくれるらしい。大きなデータ構造を読むときに便利そう。 https://github.com/chrisdone/webshow
どんな極意でしょう? :kininaru:
30分で頑張ってまとめてみました!
https://gist.github.com/HirotoShioi/1ee8ff7b0eb21ca72ffe0d1a782da889
来月から極意をまとめて公開する作業を開始します。今月は色々と忙しいので無理そうです。
ihaskell要らなくなった説?(もとより使ってないけど)
IHaskellブラウザー上で対話的にHaskellを実行したりデータ型の表示方法をカスタマイズしたりできるみたいなんで、webshowとは大分違うんじゃないかと思います。
tak.uchida.dev.jp.041
@tak.uchida.dev.jp.041 has joined the channel
おぉ!面白かったです! :arigatougozaimasu:
@satio2000 has joined the channel
@haxyoy9990mk3 has joined the channel
https://mizunashi-mana.github.io/blog/posts/2019/05/ghc-io-inside/
"このように, ST も IO と同じように特別なことはしておらず,既存の汎用的な仕組みを利用して,うまく実装されている"
すごい。だからPrimMonadみたいなIOとST両方を抽象化した型クラスなんて作れるのね。
Haskell ってすげーって感動していたとき内部構造が気になって見てみたら Magic って書いてあって、あ!だからHaskellってバグ無いのね!と思ってたのはバグに出会う前でした
可変長引数のtype familyを作れってことですかね。どうやるんでしょう。 :thinking_face:
どなたか気が向いたらやってみてください(興味本位で、そんなに困ってもいないのでこちらのチャンネルで。)
https://twitter.com/Iceland_jack/status/1130226695921917962
をを、ちょうど「あれ、なんで IO と ST ってどっちも使えるんだっけ、根源的にはもう一層下の仕掛けがあるってことか?」みたいな疑問をもったところでした^^;
@maguhiro has joined the channel
@edo1km has joined the channel
https://engineering.itpro.tv/2019/05/21/announcing-the-haskell-weekly-podcast/
"Announcing the Haskell Weekly podcast" Haskell WeeklyのPodcast版をやるそうで。
英語のリスニングの練習をしたいHaskellerのみなさんいかがでしょうか。
失敗系のMonadの使い方を中心に学んで、MonadやApplicativeへの理解を深める本らしい。
Haskell全く知らない人向けではない。
https://leanpub.com/finding-success-in-haskell
目次
```
ユニット1 関数型プログラミングの基礎
ユニット2 型の紹介
ユニット3 型を使ったプログラミング
ユニット4 I/Oを使う
ユニット5 コンテキストにおいて型を使う
ユニット6 コードの整理とプロジェクト構成
ユニット7 応用:Haskellプログラミング
```
わかりやすそうな本ですね~
あれ、ぼくが知っているカバーじゃない。最終版でこのシリーズになったのか。
@fumieval https://wiki.hask.moe/ の証明書がまた切れてしまっているようです... :sob: :pray:
@igrep あら…今更新しました。いいかげんhaskell-shoenに統合するか…
@polymonyrks has joined the channel
各位、某所で Haskell (GHCJS) について話す機会があったので、スライドの最後で Haskell Day 2019 についても宣伝しておきました。
@aviatesk has joined the channel
Haskell Quiz です
今回は ``foo`` についてです

「`」のせいでうまい表示にならない(全角のバックチックを使う裏技があるんだけど
https://haskell-jp.slack.com/customize/loading に書いてある
《関数のApplicative》`\x -> f (g x) (h x)`は、`f <$> g <*> h`とも書ける。
がすごい役に立った。

:point_down: みたいな感じの、callbackをたくさん入れたデータ型があって、
data Handlers = Handlers
  { handleFoo :: Foo -> IO ()
  , handleFooBar :: Foo -> Bar -> IO ()
  , handleBar :: Bar -> IO ()
  -- ...
  }

「必ず呼ばれる処理(ライブラリー側が提供)」の後に「ユーザーが設定した Handlers を呼ぶ」みたいなことを表現しようとして
Handlers
  { handleFoo = (>>) <$> baseHandleFoo <*> handleFoo userHandlers
  , handleFooBar = (>>) <$> baseHandleFooBar <*> handleFooBar userHandlers
  , handleBar = (>>) <$> baseHandleBar <*> handleBar userHandlers
  -- ...
  }


と書けた。当たり前っちゃ当たり前なんだけど、各レコードラベルに入れる関数の引数の数や型がバラバラでも、ちゃんと関数Applicativeとして扱ってくれるのすごい。
@clha4fn6 has joined the channel
ところで上のような全フィールドが同じような型を持つレコードを扱うアプローチはhigher-kinded dataと呼ばれていますが、最近Genericsを応用した新しいライブラリができたそうです https://github.com/i-am-tom/higgledy
i-am-tom
既に定義されてるレコードを後からhigher-kinded dataにできるの便利そうですね~
```
data User
= User
{ name :: String
, age :: Int
, ...
}
deriving Generic

-- HKD for free!
type UserF f = HKD User f
```
先週のHaskell Weeklyに(たしか)あった https://chrispenner.ca/posts/hkd-options の話ですね!
結構また似たパッケージが出てきましたね... :sweat_smile:
私が知っている限りbarbiesとczipwithか。でも既存のレコードをHKDにできるのいいですね。
extensibleとは別に https://github.com/fumieval/moldable というのも作ってました
かなり出遅れましたが、heapsも欲しいです
ありがとうございます。更新しました。
https://gist.github.com/waddlaw/b6a14d4dbc94d282a175abe7f9596ae7

- ライブラリ案に heaps を追加。
- 環境構築方法についての案として Dockerfile を4種類追加しました。(ベースイメージは 18.04 LTS を仮で利用)
- Haskell (AtCoder) に関するリソースにリンクを2件追加しました。
- 環境構築方法によるコンパイル時間の比較を追加しました。
@aco.drumming has joined the channel
@konn.jinro has joined the channel
http://hackage.haskell.org/package/extensible 半年くらい空いてしまいましたがextensible-0.5.1をリリースしました。インターフェイスの肝となる部分をmembershipパッケージに移し( http://hackage.haskell.org/package/membership )、IsRecordにデフォルト定義を追加しました
DEPRECATED ってだけで、一応そのままのコードでも動作するんですね :+1:
v6.0 とかで消す感じですか?
0.6で消す予定です
@n.kurata1005 has joined the channel
訂正: 「引数の数」については実際には引数が2以上の関数については使えません、あしからず… https://haskell-jp.slack.com/archives/C5666B6BB/p1559699224002100?thread_ts=1559699224.002100&cid=C5666B6BB
必要に迫られて、cabalのissueに長文を投げてしまったんですけど、変な事言っていないかな…… https://github.com/haskell/cabal/issues/6072
純粋に確認ですが、Haskell製のC向けライブラリーのヘッダーファイルをインストールする場所を選ばせろって意味ですよね?
そうです。さすがに指定できるっしょ、と思ってかなり調べたんですが、どうも機能が無さそうなんですよね