generated at
Maybeモナドを圏論的観点から見る
Maybeモナドを圏論的観点から見る

Kleisli Tripleとの対応
対応
クライスリトリプルListモナド
TM
ηeta
(-)^*ast
hs
type M = Maybe eta :: a -> M a eta = Just ast :: (a -> M b) -> (M a -> M b) ast f Nothing = Nothing ast f (Just x) = f x



Kleisli Tripleの満たすべき3条件のテスト
f^*\circ\eta_A=f
\eta_A^*=\mathrm{id}_{TA}
g^*\circ f^*=(g^*\circ f)^*
準備.hs
f1,f2 :: Float -> M Float f1 0 = Nothing f1 x = Just (1/x) f2 x = Just (x+1) testFuncs = [f1,f2] testFloats = [10,100,0.1] :: [Float] testTAs = [Nothing, Just 0, Just 1] test1cases = [(f, v) | f <- testFuncs, v <- testFloats] test3cases = [(g,f,ta) | g <- testFuncs, f <- testFuncs, ta <- testTAs]
テスト.hs
test1 = map (\(f,v) -> (ast f . eta) v == f v) test1cases test2 = map (\ta -> ast eta ta == ta) testTAs test3 = map (\(g,f,ta) -> (ast g . ast f) ta == ast (ast g . f) ta) test3cases





参考