quickspec-0.9.4: 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))