quickspec-0.9.1: examples/Lists.hs
{-# 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))