Если подключить Control.Monad, то все возможные двоичные векторы, представленные списком компонент, порождаются функцией
vectors :: Int -> [[Int]]
vectors n = replicateM n [0, 1]
Вместо [0,1] могут быть любые другие значения компонент (True и False, например). Аргумент n задаёт длину векторов, которое будет равняться числу переменных в логическом выражении.
upd.
С учётом пожеланий новый вариант:
data BinTree = Leaf [Int] | Node BinTree BinTree deriving Show
vars :: Int -> [Int] -> BinTree
vars 1 context = Node (Leaf (0:context)) (Leaf (1:context))
vars n context = Node (vars (n-1) (0:context)) (vars (n-1) (1:context))
Prelude> vars 2 []
Node (Node (Leaf [0,0]) (Leaf [1,0])) (Node (Leaf [0,1]) (Leaf [1,1]))