Да, это можно сделать очень и очень легко:
arity :: (a -> b) -> Int
arity = const 1
Обоснование: если это функция, вы можете применить ее только к 1 аргументу. Обратите внимание, что синтаксис haskell делает невозможным применение к 0, 2 или более аргументам, поскольку f a b
действительно (f a) b
, т.е. не f applied to a and b
, а (f applied to a) applied to b
.
Результатом, конечно, может быть другая функция, которую можно применить снова и т. Д.
Звучит глупо, но это не что иное, как правда.