Я пытаюсь создать функцию, которая получает вариационную функцию в качестве аргумента, т.е.
func :: (a -> ... -> a) -> a
как я могу это сделать?
Я читал о поливариадических функциях, и я уверен, что Олег уже сделал это, однако я потерял попытку применить шаблон к функции с вариационной функцией в качестве аргумента. Особенно подход Олега, похоже, работает только с расширениями в Глазго, и я хочу, чтобы решение работало в чистом Haskell 98 (например, Text.Printf).
Причина, по которой я спрашиваю, заключается в том, что я пытаюсь создать функцию, которая принимает логическую функцию в качестве аргумента и проверяет, является ли она тавтологией, т.е.
isTautology :: (Bool -> ... -> Bool) -> Bool
чтобы можно было ввести:
isTautology (\x -> x && not x)
isTautology (\x y -> x && y || not y)
Моя проблема в том, что я продолжаю читать об этом трюке, чтобы сделать возвращаемый тип переменной типа (так, чтобы он мог быть результатом или другой функцией), но мой тип возврата исправлен (Bool).