Я пытаюсь выяснить, с лямбда-исчисления, почему функция результат следующего кодаКак работает <*> с функцией Аппликация?
(,) <$> (+1) <*> (+1)
имеет тип Num а => а -> (а, а) вместо Num а => а -> а -> (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 -> fx (gx)'. Обратите внимание, что здесь, если 'f' является двоичным, результат является унарной функцией. Ваш последний результат должен быть '\ x -> (,) ((+1) x) ((+1) x)' – chi