all*_*win 1 functional-programming functor category-theory
具体参考https://bartoszmilewski.com/2015/04/07/natural-transformations/
作者说"这不是一个算符".
我可以定义fmap :: (a -> b) -> (a -> a) -> (b -> b)
为fmap f aa = id
,似乎遵守仿函数法则.
我并不是说为什么它没有明确地成为X语言中的Functor类型类的一部分,我只是说它为什么不被承认为仿函数.
在Haskell的上下文中,我认为你在谈论newtype Endo a = Endo (a -> a)
(使用newtype来获得所需* -> *
类型).
确实,我们可以定义
instance Functor Endo where
fmap _ _ = Endo id
Run Code Online (Sandbox Code Playgroud)
但其中一个Functor定律是fmap id = id
,即id与fmapping必须与什么都不做相同.您建议的定义违反了此规则:
fmap id (Endo toUpper)
Run Code Online (Sandbox Code Playgroud)
应该导致Endo toUpper
,但你的代码成功Endo id
.其中一个转变'a'
为'A'
,另一个转变'a'
为'a'
.