{-# LANGUAGE ScopedTypeVariables #-} import Test.QuickSpec hiding (lists) import Test.QuickCheck import Data.Typeable lists :: forall a. (Typeable a, Ord a, Arbitrary a, CoArbitrary a) => a -> [Sig] lists a = [ -- arith (undefined :: Int), -- funs (undefined :: a), ["x", "y", "z"] `vars` (undefined :: a), ["xs", "ys", "zs"] `vars` (undefined :: [a]), background [ "[]" `fun0` ([] :: [a]), ":" `fun2` ((:) :: a -> [a] -> [a])], -- "head" `fun1` (head :: [a] -> a), -- "tail" `fun1` (tail :: [a] -> [a]), -- "unit" `fun1` (return :: a -> [a]), "++" `fun2` ((++) :: [a] -> [a] -> [a]), -- "length" `fun1` (length :: [a] -> Int), "reverse" `fun1` (reverse :: [a] -> [a]) -- "map" `fun2` (map :: (a -> a) -> [a] -> [a]) ] main = quickSpec (lists (undefined :: A))