Open2
Haskellと数学
関手(functor)
定義(ベーシック圏論より引用)
-
と書かれる関数A \rightarrow F(A)
-
についてA, A' \in \mathscr{A} と書かれる関数f \rightarrow F(f)
からなり以下の公理を満たすもののことである.
-
で\mathscr{A} となるものについてA\rightarrow^{f} A' \rightarrow^{f'} A'' F(f' \circ f)= F(f')\circ F(f) -
についてA\in \mathscr{A} F(1_A) = 1_{F(A)}
Haskell
fmap :: (a -> b) -> f a -> f b
このfmap関数が定義の2番に対応する. 定義通りこの関数を読むのであれば、a -> bへの関数を f a -> f bへの関数に変換していると読める。
fは以下の性質を満たす必要がある
Identity
fmap id == id
Composition
fmap (f . g) == fmap f . fmap g
Identityが4, Compositionが3の性質に対応する。
fがfunctorと対応していることがわかる。
半群 (Semigroup)
集合
結合律
演算が定義されていて結合律を満たせば半群である。
Haskell
Haskellでも半群の定義は以下の通り。Instanceは
-- @since 4.9.0.0
class Semigroup a where
-- | An associative operation.
--
-- >>> [1,2,3] <> [4,5,6]
-- [1,2,3,4,5,6]
(<>) :: a -> a -> a