В общем случае нет. Для случая с 2 аргументами вы можете использовать функции curry
и uncurry
в расширениях Battery для Pervasives .
Возможно, можно что-то приготовить с помощью модуля Obj
, как это делает внутреннее устройство printf
, но я бы держался далеко от этого. Сложность состоит в том, что система типов не позволяет выразить тип обобщенной функции curry
или uncurry
. Система типов не позволяет вам «вычислять» длину кортежа - 2-кортеж - это 2-кортеж, и у вас нет способа выразить, что (a*b*c)
действительно (a*b)
с дополнительным компонентом. printf
имеет специальную поддержку от компилятора для правильной работы типов, и это приводит к тому, что тип функции является частью типа формата (поэтому аналогичные решения не будут работать для кортежей).