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本身的态射的名称是什么?"
正如许多其他人所说,你正在寻找的这个词是"内同态".但在更具体的说明中,值得一提的Endo
是Data.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
一步完成.