Haskellの各種圏論概念への対応
#🌱
関数プログラミング自体はデカルト閉圏(CCC)に対応する?
Functorは自己関手?
Hask圏からHask圏に戻るような関手
Functor型クラス自体は圏論での関手
HaskellのFunctorはHask圏上の関手(functor)
fold関数は一般化するとcatamorphismというものに繋がる
多相関数は自然変換
代数データ型はF始代数
圏論の基本的な概念はHask圏のものを持ってくればよさそう
table:Hask圏
対象 Haskellの、カインドが*である型
射 Haskellの関数
型Aから型Bの関数 f :: A -> B
射の始域(dom) 関数の引数の型
射の終域(cod) 関数の戻り値の型
恒等射 id
射の合成 関数結合 (.)
f . id = id . f = f
Functor
※以下は古いFunctorの定義
code:haskell
class Functor (f :: * -> *) where
fmap :: (a -> b) -> f a -> f b
code:haskell
instance Functor Maybe where
fmap f (Just x) = Just (f x)
fmap _ Nothing = Nothing
Maybe自体は関手
モナド
Haskell モナド
関連
クライスリ圏
参考
Haskell/Category theory - Wikibooks
Haskell/圏論 - Wikibooks
プログラマであるあなたが圏論を学んで得られる事、得られない事 - Creatable a => a -> IO b
#Haskell