Ваша интуиция в том, что это своего рода приложение-функция, правильно, но они не являются регулярными функциями. Вместо этого это применение конструкторов типов на уровне типа.
В частности, ФУНКТОРЫ должен иметь вид (тип-типа) * -> *
, который означает, что они принимают один аргумент типа и производить конкретный тип *
, такие как, например, [Int]
.
Примеры конструкторов такого типа включают в себя IO, Maybe, [], Either e
и многие другие, и эти конкретные примеры имеют действительные экземпляры Functor.
fmap (+1) [1,2,3] :: [] Int -- also known as [Int]
= [2,3,4]
fmap (+1) (Just 1) :: Maybe Int
= Just 2
fmap (+1) (Right 1) :: Either e Int
= Right 2
fmap (+1) (return 1) :: IO Int -- Uses Monad IO instance as well
"=" 2
Это не тип 'fmap'. Это 'fmap :: Functor f => (a -> b) -> f a -> f b' – Sarah
Это переменная типа, да, но то, что я думаю, заглядывает в ваш интерес - это * kind *. См. [Виды и некоторые типы-foo (LYAH)] (http://learnyouahaskell.com/making-our-own-types-and-typeclasses#kinds-and-some-type-foo). – MasterMastic