haskell-jp / today-i-learned #3

長いけど見終えた。 https://www.youtube.com/watch?v=RknM0j138PE&feature=youtu.be
言うほどHaskell関係ないし個人的には割と知った話が大半だったのであまりおすすめしません... :disappointed:
プログラミングHaskell第2版の15章、遅延評価を読みました。1周目なので消化不良な部分はありますが:sweat_smile:
自作インタープリターでパターンマッチによる分解ができるようになりました
テストから抜粋
今朝見終えた。 https://www.youtube.com/watch?v=I7-JuVNvz78&list=PLiU7KJ5_df6aZbNfh_TUJt-6w9N3rYkTX&index=3
やっぱりハッシュテーブルなどのmutableなデータ構造を線形型で管理することで(Rustの`&mut`みたいなものと考えればいいかも)、純粋な関数の中で更新できるようにするのがポイントみたいですね。
Haskell入門関数型プログラミング言語の基礎と実践を読み返してました:grinning:普段書かないコードは忘れるものですね:sweat_smile:
自作 Haskell インタープリターでここまでできるようになった
Control.Monad.Trans.State.Lazyとかのソースコードを読んでました。ソースコードを見ずに自分で定義を書き起こしたりして理解を深めてました:smile:

https://hackage.haskell.org/package/transformers-0.5.6.2/docs/src/Control.Monad.Trans.State.Lazy.html

https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Data.Either.html
自作 Haskell インタープリターで import できるようになった
contravariantについての記事を読んでました。


https://typeclasses.com/contravariance

https://www.schoolofhaskell.com/school/to-infinity-and-beyond/pick-of-the-week/profunctors

消化不良のため、復習が必要。。
contravariantに関する記事を読んでました。以下の記事が自分には分かりやすかったです。
二番煎じですが、備忘録としてqiitaあたりに記事アップを考え中。


https://ocharles.org.uk/blog/guest-posts/2013-12-21-24-days-of-hackage-contravariant.html
ProfunctorとかBifunctorの記事を読んでました。
Invariantの有用性とか、まだよくわかってない。


https://www.fpcomplete.com/blog/2016/11/covariance-contravariance/
Control.Categoryに関する記事を読んでました。面白いですね。


https://qiita.com/CyLomw/items/a618b7c7326d9abede63
自作 Haskell インタープリターでのサンクの扱いに悩んでいるので『The Implementation of Functional Programming Languages』を読もうと印刷をした
https://www.microsoft.com/en-us/research/publication/the-implementation-of-functional-programming-languages/
Lensに関する動画を見てました。
まだ理解しきれていませんが、興味深い内容でした:smile:

https://youtu.be/LBiFYbQMAXc
関数プログラミングの楽しみの10章「アローと計算」を読んでます。一回読んだだけではわからないので、繰り返し読みます:innocent:

https://shop.ohmsha.co.jp/smartphone/detail.html?id=000000001859
自分のパッケージのドキュメントがhackageで読めないのはhackageのサーバーがサボっているからだと思ってましたが違うと言うことを学びました。今までごめんなさい私の怠惰のせいです... :cold_sweat:
https://haskell-jp.slack.com/archives/C4M4TT8JJ/p1599299006033800?thread_ts=1599296129.033100&cid=C4M4TT8JJ
Arrowに関する論文を現在進行形で読んでます。
http://www.cse.chalmers.se/~rjmh/Papers/arrows.pdf

まだ半分も読めていませんが、丁寧な解説で素晴らしい。
最近、他の作業でHaskell停滞中でしたが、Contravariantについて学習した内容をQiitaの記事にまとめました:sob:
精進します:sob:

https://qiita.com/masaki_shoji/items/b384eed4595df3423e0c
Contravariantをつかっているライブラリを見ていたので助かります。
ありがとうございます。
https://kowainik.github.io/posts/2018-09-25-co-log
見終えた https://www.youtube.com/watch?v=Q3qjTVcU9cg&feature=youtu.be
NixOpsでEC2のセットアップしたり、DBのセットアップまでできるんですね :serval: (後者についてはproductionではすべきでないと言ってたけど)
見終えた https://www.youtube.com/watch?v=sE1qWyQWWVY
GHCのtype checker プラグインの仕組み。「type checker」とはいうけど実際にやるのは制約の解決が中心で、型変数に具体的な型を適用したり、また新しく解決する必要がある制約を発見したり、を繰り返してすべての制約を解決する、という流れらしい。
hakyll + emacs org-modeで記事を書いててteaserの設定がうまくできなかったのですが、ちゃんとteaserが表示できるようになりました。
(haskellというよりはorg-modeの問題でしたが・・・)
Haskell + Bazel を始めた、とりあえず Stack プロジェクトだったのを Bazel でビルドするのに成功した
さては https://blog.sumtypeofway.com/posts/bazel-haskell-build-system-joy.html の影響ですね。 :smirk:
まだ読んでないけど :kininaru:
あ、いや、うちの会社(の僕が所属してるチーム)では昔から Bazel 使ってて(会社のは Haskell じゃないです)、前々から個人の Haskell プロジェクトでも使いたいなーって考えてたんですよね(特に +Elm してるリポジトリとかに)。
で、最近よく会社の Bazel 自体に触るようになったから詰まっても、筋肉(?)で解決できるかなーっていう自信がついたので挑戦し始めた感じです笑
あ、あとこれもそろそろ頑張ろうかなって思ったきっかけといえばきっかけ(日本語リファレンス増やすかーっていう)
https://twitter.com/Lugendre/status/1306204403867680768
冷静に考えれば当たり前なんだけど、今日の学びです。
https://twitter.com/igrep/status/1314851782011486208
今はもうメンテナンスされていないライブラリっぽいですが、セッション周りのお勉強のために、serversessionとyesodの組み合わせでお勉強してました。

https://hackage.haskell.org/package/serversession
@Hesca has joined the channel
@takuo has joined the channel
cabal outdated --exit-code コマンドを使うと「依存先パッケージの最新版がちゃんと使われるか(古いバージョン番号を書いていないか)」
の観点でcabalファイルをチェックできることを知りました。
これをCIに仕込んでおけば「依存先パッケージの最新版が出たらメールで通知が来る」みたいなのを実現できて素晴らしいです。

他言語では、通知だけでなくバージョンの書き換えコミットまでやってくれるdependabotというボットもあるらしく、
このへんは将来的にHaskellでもできるようになればいいと思いました。

https://www.reddit.com/r/haskell/comments/ev41o7/dependabot_for_haskell/
@ has joined the channel
@ has left the channel
@juxtapose has joined the channel
@hiroyuking has joined the channel
randomに書いた話の続きでstackとnixpkgsを連携してみました

連携方法はstackのドキュメントにありました
https://docs.haskellstack.org/en/stable/nix_integration/
参考にしたサイト
https://utky.github.io/posts/note/stack-and-nix/
... Replies ...
@ has joined the channel
Maybeを使ってJustとNothingをパターンマッチで分岐するみたいなことをやりました
なんか他言語と比べてネットで検索してもコードのサンプルがあまり転がってない印象があります
... Replies ...
今気づきましたがHaskell荘園いろいろコードのサンプルが載っていていいですね
https://scrapbox.io/haskell-shoen/
パラメーター多相について調べました。その中でHaskellの型シグネチャは暗黙に量化されるというのを初めて知りました。
言語オプション`-XExplicitForAll` を使うと
g :: b -> b


g :: forall b. (b -> b)

と書ける
http://www.kotha.net/ghcguide_ja/7.6.2/other-type-extensions.html
えび (ebi_chan)
@えび (ebi_chan) has joined the channel
モノイド対象を考えるにはモノイド圏を、つまり圏とモノイド積を固定しないといけないということ。

つまり有名なあの文句には「モナドは単なる自己関手の圏における (関手の結合をモノイド積としたときの) モノイド対象だよ。 何か問題でも?」と補わないといけない。と思う。
Hask 圏について直積 (,) をモノイド積としたモノイド圏のモノイド対象が Monoid 型クラスのインスタンス。Hask 圏で Either をモノイド積としたモノイド圏は、全ての対象 (型) がモノイド対象になりそう?

class EitherMonoidObject a where
  eta :: Void -> a
  eta = absurd

  mu :: a `Either` a -> a
  mu = either id id
@toyboot4e has joined the channel
@hiratara has joined the channel
@hirofumikubo has joined the channel