Я пытаюсь понять с помощью лямбда-исчисления, почему результат функции следующего кода
(,) <$> (+1) <*> (+1)
имеет тип Num a => a -> (a, a) вместо Num a => a -> a -> (a, a)
Это то, что у меня есть, я делаю что-то ужасно неправильно или ‹*> просто подключен таким образом?
( \x, y -> (,) x y ) <$> ( \x -> x + 1 ) <*> ( \x -> x + 1 )
-- fmap applies first
(\x y -> (,) ((+1) x) y ) <*> ( \x -> x + 1 ) -- substituted the lambda with (+1) for better clarity
-- then goes apply
( \x y -> (,) ((+1) x) ((+1) y) )
как унифицируются параметры лямбды и в какой момент?
f <*> g = \x -> f x (g x)
. Обратите внимание, что здесь, еслиf
является двоичным, результатом является унарная функция. Ваш последний результат должен быть\x -> (,) ((+1) x) ((+1) x)
- person chi   schedule 20.12.2016