Я понимаю, что (->) a является типом более высокого порядка * -> *, который при применении к аргументу типа b дает тип a -> b
Можно ли написать тип вида * -> *, который при применении к c дал бы a -> b -> c?
Если нет, почему бы и нет? Возможно, используя некоторые расширения языка и forall?
Это позволило бы мне написать экземпляры Functor и Applicative (и других классов), где функториальная структура "a -> b ->", как в:
(<*>) :: Applicative t => t (c -> d) -> t c -> t d
(<*>) :: (a -> b -> c -> d) -> (a -> b -> c) -> a -> b -> d
Это было бы полезно в качестве комбинатора для двоичных (curried) функций.
NB. Возможно, это связано с Функторами и Применениями для типов вида (* → *) → *, но я не уверен, потому что это пошло мне на голову: -)