"Typeclassopedia+α" オンラインもくもく会#3
イベント内容
第3回限定の内容
第2回における管理者の不備と現状
前回 のイベントに,管理者が参加できませんでした.参加者の方にご迷惑をおかけしました,申し訳ございませんでした.
オンライン上のもくもく会ということもあり,(以後,前回のようなことが発生しないようにしますが)管理者が参加しなくてもイベントが開催されたことになり得ます. 前回の最後に次回の内容を確認できずに終了時刻を迎えたため,今回どれを対象にすべきか判断しにくい状況にあります.
今回の題材決定方法
勉強会開始時に Functor
と Bifunctor
を終えたかどうかを参加者の方に確認します.その内容次第で,以下のように今回の対象を決定することにします.
確認した結果 | 今回の対象 |
---|---|
両方終えていない人が過半数を占める | Functor と Bifunctor |
Functor のみを終えた人が過半数を占める |
Bifunctor と Contravariant |
Functor と Bifunctor の両方を終えた人が過半数を占める |
Contravariant と Profunctor |
概要
主に "Typeclassopedia" に掲載されている型クラスを理解するためのもくもく会です.
毎回指定した型クラスに関する "Typeclassopedia" の内容や,型クラスに関する記事を読んだり,モジュール等で定義されている関数を確認したりソースコードを読んだりすることを各自で行います.
日時
- 毎週金曜日 22:00 ~ 23:30
- 題材によっては,早めに終えることがあります
進め方
-
題材
- 毎回,対象とする型クラスを指定します
- 必ずしも "Typeclassopedia" の列挙順で指定しません
- "Typeclassopedia" に掲載されていない型クラスを扱うことがあります
- 分量が多ければ,複数回に分けたり次回に回したりすることがあります
-
もくもく会
- 連絡事項があれば,Discord にてテキストチャットで伝えます
- 先に勉強会を終えたり時間に遅れたりしても,お構いなく.ご自分の都合を優先してください.
- 対象の型クラスを時間中に終えられず次回までに終えることが困難であれば,次回の型クラスを決定する前に管理者に伝えてください.次回の題材を調整します.
- 時間が限られているとはいえ,各回で取り上げている内容の理解をできるだけ重視してください
題材予定の型クラス
-
[済]
Semigroup
,Monoid
-
[済?]
Functor
,Bifunctor
-
Contravariant
,Profunctor
,Choice
,Cochoice
,Strong
,Costrong
-
Apply
(Ap
),Applicative
,Biapply
,Biapplicative
,Divisible
-
Bind
,Monad
,ComonadApply
,Comonad
-
Alt
,Plus
,Alternative
,MonadPlus
,Decidable
-
Foldable
,Traversable
,Bifoldable
,Bitraversable
,Distributive
-
Semigroupid
,Category
-
Arrow
,ArrowZero
,ArrowPlus
,ArrowChoice
,ArrowApply
,ArrowLoop
想定する参加者
-
型クラスの関係を確認したい方
-
ある型クラスで,どのようなメソッドが定義されているのかを確認したい方
-
ある型クラスのメソッドが,どのように実装されているのかを確認したい方
想定していない参加者
Reader
モナド,Writer
モナド,State
モナド,ST
モナドなどの各種モナドと,モナドトランスフォーマーの使い方を,しっかり理解したい方
第3回の内容
注意
Contravariant
およびProfunctor
は, Typeclassopedia に非掲載ですProfunctor
はbase
には導入されていません- Stack の LTS Haskell において,しばらく GHC 8.6.* 対応のものが提供されない可能性があるため,
Contravariant
を使用するにはcontravariant
パッケージを直接使った方がよいかと思います Profunctor
は本当は後でやる方が良いようですが,後に扱う型クラスの際に「あれ,どこがで見たことがある?」という効果を期待して(?),今回取り上げます
扱う型クラスと題材例
-
前回の分を対象とすることになった場合: 前回の型クラス
-
Contravariant
-
base: Data.Functor.Contravariant
- Hackage (GHC 8.6.1): base-4.12.0.0 (since base-4.12.0.0)
- Move the module Data.Functor.Contravariant from the contravariant package to base.
-
contravariant: Data.Functor.Contravariant
-
"Understanding contravariance" (Typeclass, Blog)
-
"24 Days of Hackage: contravariant" (Oliver Charles, 2013-12-21, Blog)
-
-
Profunctor
-
profunctors: Data.Profunctor
-
(Profunctor p, Profunctor q) => Profunctor (Sum p q)
を追加 (bifunctors
のData.Bifunctor.Sum
に対応)
-
"Understanding profunctors" (Typeclass, Blog)
-
"24 Days of Hackage: profunctors" (Oliver Charles, 2013-12-22, Blog)
-
"Profunctors in Haskell" (Dan Piponi, 2011-06-23, Blog)
-
"Don't Fear the Profunctor Optics (Part 2/3)" (Jesús López-González, 2017-10-07, Markdown @GitHub)
-
-
まとめ
-
"I love profunctors. They're so easy." (Liyang HU, 2013-10-16, Blog @School of Haskell)
-
"Covariance and Contravariance" (Michael Snoyman, 2016-11-09, Blog @FP Complete)
-
タイムスケジュール
時刻 | 内容 |
---|---|
22:00 ~ 23:20 | もくもく会 |
23:20 ~ 23:30 | 次回の案内 |
備考
- Typeclassopedia の内容は不定期更新されているため,毎回最新版のものを利用します
注意事項
※ 掲載タイミングや更新頻度によっては、情報提供元ページの内容と差異が発生しますので予めご了承ください。
※ 最新情報の確認や参加申込手続き、イベントに関するお問い合わせ等は情報提供元ページにてお願いします。