Таблицы правды из анонимных функций в Haskell

Я пытаюсь сгенерировать таблицу истинности для данного логического выражения. Я мог бы сделать это с помощью создания нового типа данных BoolExpr, но я хочу сделать это с помощью анонимной функции. Это должно работать так:

> tTable (\x y -> not (x || y))
output:
F F | T
F T | F
T F | F
T T | F

Мой подход:

tbl p = [(uncurry p) tuple | tuple <- allval]
        where allval=[(x,y) | x <- [False,True], y <- [False,True]]

Это работает, но только для 2 аргументов. Я хочу сделать это для любого количества аргументов. Поэтому я подумал, что сделаю функцию, которая берет аргументы из списка:

argsFromList f []     = f
argsFromList f (x:xs) = argsFromList (f x) xs

Это не работает:

 Occurs check: cannot construct the infinite type: t = t1 -> t
   Expected type: t -> [t1] -> t1 -> t
   Inferred type: (t1 -> t) -> [t1] -> t1 -> t
 In the expression: argsFromList (f x) xs

Я не понимаю, в чем здесь проблема. Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление или опубликовать ссылку, которая делает.

Ответы на вопрос(3)

Ваш ответ на вопрос