Есть некая обобщенная стратегия вычислений, выраженная функцией вида:
Strategy(f, g) типа (a->b) -> (a->b) -> c
где и f() и g() типа a -> b
По идее, порядок вычислений важен, и потому параметры f() и g() поменять местами нельзя. Но и f() и g() имеют одинаковый тип, и потому, вроде бы взаимозаменяемы.
Вопрос: как определить, что функции Strategy переданы именно (f, g), а не (g, f), (f, f) или (g, g) ?