今日は「モナド基礎勉強会 vol.2」の日です
Posted on March 21, 2015
Tweet
名古屋大学で開催されているモナド基礎勉強会 vol.2に来ています。
「圏論の導入、特にモノイダル構造」 / @t6sさん
- 圏 : (Universeを仮定。有効グラフから)
- 圏の例 : Set, Hask (とか), モノイド(Objectが一つの圏), poset
- 関手 : 圏から圏への射。射関数と対象関数。sourceとtargetを保つ。合成とidを移す。lawはDで満たされてるので不要
- 関手の例 : グラフの圏、Maybe
- 自然変換 : 関手圏の2-cell。対象から射の関数
- モノイダル圏 : \(\otimes, 1, \alpha, \lambda, \rho\)
- これだけだと\(((a \otimes b) \otimes c) \otimes d \simeq a \otimes (b \otimes (c \otimes d))\)の同型が複数になる
- コヒーレンス定義の話
- モノイダル圏の例 : \(\mathbb{C}^{\mathbb{C}}\) / strong monoidal
「圏論からみた型の話」@t6sさん
- モノイド : 集合のモノイド、モノイダル圏のモノイド
- 直積持ってなくていい
- モナドは自己関手圏のモノイド
- scalaはreturnがないっぽい
MonadPlus
とは? 二重構造で分配則とかある構造- モナドが何をしているのか
- \(a \to Mb\) M は effect
bind
の定義
- Free monad → abstract syntax tree
- Ma は、 a の中の値を使った式たち
- \(C^M\) M代数の圏 : 評価の仕方がオブジェクト
- M に syntax がすべて入っていると考える
- \(C_M\) クライスリ圏
- モナドで定義された随伴
「モナモナ言うモナド変換子入門」@hiratara
自分のトーク。資料はアップしておいた。
「基礎から学ばないFree Monad」@pocketberserker さん
- HaskellやScalaの界隈でよく知られている
- FunctorからMOnadへシングルトン生成とネストの結合の一般化
class Functor f
,class Monad m
,instance Functor f => Monad (Free f)
bind
の列は左結合時のパフォーマンスが良くない → CPSで解決- 中間状態にアクセスするとCPSの利点が損なわれる → Reflection without remorse
- type aligned sequence
- Free Monad, Iteratee, LigicT に適用が可能
- MonadReaderとか定義するのめんどくさい
- Reflection without Remorse
- 結合可能キューで実装されているので速い。
fmap
が重要
「IOモナドを実装してみた」@mzp さん
- Haskellによるモナドチュートリアルが増えている
- HaskellといえばIOモナド
- IOの表現 synchronized stream, continuation, linear logic, side effect
dialog : [Response] - > [Request]
→ 初期のHashkell。定義が簡単。入力を消費しすぎるとまず- 継続 : 初期のHaskell。フロー制御しやすい。生の
k
を扱う。Hugsなど - 線形論理による実装 : Haskell。
World
が複製される問題。複数回使えない型 (*World
)- ghcで型チェックはしていない。IOモナドで隠蔽されてるので
- もともとClean
- 複数の状態
WorldA
WorldB
を明示的に扱える - IOモナドを使って線形型を定義するのは不明
- 副作用によってIOを表す (サンクを明示すればO.K. )
- 異なる言語機能をラップして導入できるモナドは便利
- shelarcyさんの
Yonedaについて / @its_out_of_tune さん
- Takahashi Monad, Sarasvati (PortAudioのラッパーのラッパー)
- 米田の補題の証明
- 共変hom関手
- \(\mathrm{Hom}_D(r, f) R = f\)
- \(Y': D \to Set ^{D^{\mathrm{op}}}\) 充満忠実
- Haskellでの話
newtype Yoneda
instance Functor (Yoneda f)
はFunctor f
と同値- 若干のパフォーマンス改善を望める
- Coyoneda
lowerCoYoneda
でFunctorが要求される (YOneda はliftYoneda
だった)- 意味がわからなかった
Coyoneda
の補題と言われるものが複数あるので、どれか確認する必要があるね
- Free monad は
retract
関数を使えばモナドの代理になる - Free monad と CoYonedaを合わせるとOperationalモナドとなる
interpret
関数でIOアクションを定義- Operationalモナド
- モナドを作るのはややこしい
- DSLをつくるためのツール
- 米田先生すごい
「Schemeによるモナド論文『Semantic Lego』を訳しました」@iHdkzさん
プロジェクタが死亡したため、本トークはスライドなしで。
- Semantic Lego
- SICPの続きみたいな言語の実装
- 導入した機能を壊すたびに実装していっててムカつく
- waddlerのessential programmingをヒントに実装
- 言語の意味論として利用
- monolicic と modular interpreterの話
- monadは一つの言語のインタプリタ。合成でモナド変換子と持ち上げ
- 階層化モナド
「Free Applicative Functors」@halcat0x15aさん
- Applicative とは :
pure
,<*>
- 任意のarityの関数に利用可能、Monadより軽量
- FreeはHaskellでは very well-known なデータ構造
- Free Applicative : 左結合と右結合で異なるが、同型
- 例: Option parser。作用が独立しているので解析が可能
- Applicativeの圏から自己関手の圏への忘却関手の左随伴
「Haskellerのためのオブジェクト指向入門(モナドもあるよ!」@fumievalさん
- オブジェクトは射。作用に基づいたパラダイム
- 内部状態、命令、操作、を定義
Data.Extensible
Lensのアクセサを定義- 操作は GADT で定義する
- メッセージの型とアクションの型
@~
と lambda case で作れる。new
と.-
で利用- Minecraft風のゲームのデモ
- 記述量が少ない、合成可能、消滅するものも作れる
Monadなんてどうってことなかった話
LTでした。
- Monadはただの型クラス
- do記法がある
<-
や行間で何かをしてるだけだった- 大事なことは大体
>>=
でやってる - 何もしない
return
、入れ子のdo
でも大丈夫 - みんなちがって、みんないい。ニートでもいい