(Оффтоп)
Ну, это несерьёзно, это не применение аргумента к функции, а просто просьба аргументу применить к себе функцию.
Вы не правы, это вполне себе серьёзно. Собственно, это маленький частный случай монады Cont в Хаскеле:
Код:
newtype Cont r a = Cont ((a -> r) -> r
Т.е., здесь говорится, что значение типа Cont r a — это такая функция, что если дать ей функцию, действующую из a в r, то она выдаст некое r. В частности, каждому значению типа a соответствует значение типа Cont r a:
Код:
return :: a -> Cont r a
return a = Cont (\f -> f a)
Обратное, конечно, неверно. Если только мы не сделаем тип r произвольным:
Код:
newtype Cont' a = Cont' (forall r. (a -> r) -> r)
Тогда окажется, что никаких других значений типа Cont' a, кроме значений вида return a, не существует, и мы получим ту самую ситуацию со вторым сопряжённым.
Выношу из под оффтопика, потому что это уже, кажется, вполне онтопик.