実用的な圏論入門 のメモ
ScalaMatsuri 1日目 Aルーム のセッションのメモです。
メモ
良いコードを書くのに圏論を知る必要は無い
コードへの深い知見を得るための手段
物事の詳細を知っているので、タスクに分割する必要は無い <- これが圏論である
圏論とは、物事をどのように合成するかを考えることである
圏論は射論と言ったほうが良い
エンジニアにとっての圏は型か関数でしか無い
モナドは自己関手の圏におけるモノイド
色んなものがどう 合成するか に注目する ( 対象は重要ではない )
圏とは何か
単位元 (何もしない)
合成 ( 2つの矢印を合成 )
結合 ( カッコの中は気にしない )
これらは開発者にとって普段やっていることで、新しいものではない
String -> Int -> Bool は String -> Bool ( String.size > 2 )
1つの圏で2つの矢印がある場合、何らかの方法で合成することが出来る
Category with 1 object == Monoid ( 一つの対象を持つ圏をモノイドと呼ぶ )
2つの値があり、どうやって1つの値にするかがモノイド
下記がモノイドの定義である
code: example.scala
def identity: A
def compose(x: A, y: A): A
}
全ての規則を知る必要は無い
1つ以上の対象を持つ圏、箱に入った圏
箱の例
Option
Future
Try
List
Either
箱に入った圏 = ファンクター
箱を変えずに箱の中身を変えることが出来る
ファンクターには下記のようにmapがある
code: example.scala
def mapA, B (boxA: BoxA) (f: A => B): BoxB }
Box Function + Box Values
独立した箱を組み合わせる == アプリカティブ