結局圏論が理解出来なかった俺達の復習 メモ
ScalaMatsuri 2日目 Cルーム の朝一セッションのメモです。
参考資料
値について
下に行くに連れて (orderが上がるに連れて) 抽象度が上がっていく。
proper value (値): 固有値のこと (例: 1, "foo" )
first-order value (関数): valueを与えるとvalueが返るもの
higher order value (高階関数): 関数を受け取る関数 (例: map )
Int => Int は Int の引数を受け取って Int の値を返す
型について
前提知識
Scalaの世界では型を A と表現し、数学の世界では * と表現する
Scalaの世界で F[A] は A を受け取って F[A] (Aは実態) を返すものを表す ( 数学だと * -> * )
型について
proper type: Int, String, Option[Int], A
first-order kinded type (型コンストラクタ): proper typeを受け取ると proper type を返すもの (例: Option[A], F[A] )
higher kinded type (高カインド型): 型コンストラクタを受け取る型コンストラクタ
高カインド型の例: X[F[A]], ( * -> * ) -> *
高カインド型において受け取る型コンストラクタが map を持っている場合は Functor と呼ぶ
Functorは圏から圏への移動が出来る
圏論とは
例を学んで、どう圏に対応されるのかという風に学ぶしかない
数学でいう Sets は有限集合の圏で、Scalaだと型システムのこと ( Haskellでは Hask と呼ぶ )
まとめ
圏論を学ぶと、抽象という言葉のハッキリとした意味が分かる
圏論における抽象の意味は、圏論の公理以外の物を取り入れない物