为什么 - >不是算子?

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类型类的一部分,我只是说它为什么不被承认为仿函数.

mel*_*ene 5

在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'.