AP
Size: a a a
AP
[
IO
f :: Int -> Int -> Int -> Intто вообще никакого оверхеда - кладем 1, 2, 3 в регистры и goto f.
f a b = \c -> a + b + c
{-# NOINLINE f #-}
g :: Int
g = f 1 2 3
run f a b c = f a b cесть какой-то оверхед, нужно проверить сколько у
f
аргументов, если 3 - просто вызвать, если больше - сделать partial application, если меньше - дать сколько надо, потом вызвать результат с оставшимися.run
:: forall t1 t2 t3 t4.
(t1 -> t2 -> t3 -> t4) -> t1 -> t2 -> t3 -> t4
[GblId,
Arity=4, <------
Caf=NoCafRefs,
Str=<C(C(C(S))),1*C1(C1(C1(U)))><L,U><L,U><L,U>,
Unf=OtherCon []] =
\r [f_s2tF a_s2tG b_s2tH c_s2tI] f_s2tF a_s2tG b_s2tH c_s2tI;
JS
[
JS
[
MK
JS
JS
[
JS
YS
N
AP
[
D