>> オペレータのシグネチャ見てみ。
>>は('a->'b)->('b->'c)->('a->'c)となってる。つまり('a->'b)の関数と('b->'c)の関数を受け取って('a->'c)を返す。
ここでaddを見るとint->int->intなのでこれはまたint->(int->int)でもある。
つまりintを受け取ってint->intを返す。
ここで'a->'bに当てはめると'aがint、'bがint->intとなる。
そうすると>>の右の値は(int->int)->'cでなければならない。
けれどaddを渡していてそれはint->int->intであって(int->int)->intではない。