J'essaie de créer une fonction qui récupère une fonction variadique en tant que un argument c'est-à-dire
func :: (a -> ... -> a) -> a
comment puis-je y parvenir ?
J'ai lu des articles sur fonctions polyvariables et je suis sûr que Oleg l'a déjà fait Cependant, je suis perdu en essayant d'appliquer le modèle à une fonction avec une fonction variadique comme argument. En particulier, l'approche d'Oleg semble fonctionner uniquement avec les extensions de Glasgow et je veux que la solution fonctionne dans Haskell 98 pur (comme Text.Printf fait).
La raison La question que je pose est la suivante : j'essaie de construire une fonction qui prend une fonction booléenne comme argument et vérifie s'il s'agit d'une tautologie, à savoir
isTautology :: (Bool -> ... -> Bool) -> Bool
pour que l'on puisse taper :
isTautology (\x -> x && not x)
isTautology (\x y -> x && y || not y)
Mon problème est que je continue à lire que l'astuce consiste à faire du type de retour un type variable (de sorte qu'il puisse être le résultat ou une autre fonction), mais mon type de retour est fixe (Bool).