在类别理论中是否有类型a - > a(在Haskell表示法中)的箭头名称?

Lay*_*lez 6 haskell category-theory

什么是类别理论中具有此类型的箭头的名称:

a -> a
Run Code Online (Sandbox Code Playgroud)

"从类型(?)到同一类型的另一个对象"

或许他们没有特别的名字?

换句话说:是否有从任何类型a到相同类型a的所有箭头的名称?该集的箭头(函数?)示例:

\x->x+x   :: Int->Int
\x-> "hello, " ++ x :: String -> String
...
Run Code Online (Sandbox Code Playgroud)

编辑

@leftaroundabout说我正在使用对象的OO定义来进行类别理论,这是错误的.因此,我真正要问的是:"在类别理论中,在一个范畴中,从某个对象O到O本身的态射的名称是什么?"

gsp*_*spr 18

如果我正确地将你的问题解释为"在类别理论中我们将一个对象的态射称为自身?" 那么你要找的那个词是内同态.

  • 不.映射x↦2x(例如,作为从整数到整数的映射)是(例如)集合类别的内同态(整数). (9认同)
  • @LayGonzález除了`id`之外,甚至可以存在其他[非平凡的自同构](http://en.wikipedia.org/wiki/Automorphism).此外,_endo_是一个非常通用的前缀,你经常阅读_endofunctors_,我甚至听说过_endo-natural transformations_. (3认同)

Lui*_*las 6

正如许多其他人所说,你正在寻找的这个词是"内同态".但在更具体的说明中,值得一提的EndoData.Monoid:

data Endo a = Endo { appEndo :: a -> a }

instance Monoid (Endo a) where
    mempty = Endo id
    Endo f `mappend` Endo g = Endo (f . g)
Run Code Online (Sandbox Code Playgroud)

这种类型有时很有用.例如,正如Brent Yorgey所解释的那样,褶皱是由幺半群组成的:

import Data.Monoid

foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z xs = appEndo (mconcat (map (Endo . f) xs)) z

foldl :: (b -> a -> b) -> b -> [a] -> b
foldl f z xs = appEndo (mconcat (map (Endo . flip f) (reverse xs))) z
Run Code Online (Sandbox Code Playgroud)

因此,由于幺半群是关联的,通常折叠可以并行化(采用分而治之的策略),首先用它们重写它们Endo,然后用Endo b一些允许一些工作的更具体的类型替换该折叠的特定内容.要在每mappend一步完成.