packages feed

speculate-0.4.0: eg/list.hs

import Test.Speculate

isSubsequenceOf :: Eq a => [a] -> [a] -> Bool
isSubsequenceOf []    _  = True
isSubsequenceOf (_:_) [] = False
isSubsequenceOf (x:xs) (y:ys)
  | x == y    =    xs  `isSubsequenceOf` ys
  | otherwise = (x:xs) `isSubsequenceOf` ys

main :: IO ()
main = speculate args
  { maxSemiSize = 0
  , maxVars     = 3
--, instances = [ mkOrdLessEqual (isPrefixOf      :: [Int] -> [Int] -> Bool) ]
--, instances = [ mkOrdLessEqual (isInfixOf       :: [Int] -> [Int] -> Bool) ]
  , instances = [ mkOrdLessEqual (isSubsequenceOf :: [Int] -> [Int] -> Bool) ]
  , constants =
      [ showConstant ([] :: [Int])
      , constant ":"    ((:)  ::  Int  -> [Int] -> [Int])
      , constant "++"   ((++) :: [Int] -> [Int] -> [Int])
      , constant "head" (head :: [Int] ->  Int)
      , constant "tail" (tail :: [Int] -> [Int])
--    , constant "null" (null :: [Int] -> Bool)
      ]
  }