diff options
Diffstat (limited to 'Haskell-book/14/qc/tests/Idempotence.hs')
| -rw-r--r-- | Haskell-book/14/qc/tests/Idempotence.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Haskell-book/14/qc/tests/Idempotence.hs b/Haskell-book/14/qc/tests/Idempotence.hs new file mode 100644 index 0000000..4b484d0 --- /dev/null +++ b/Haskell-book/14/qc/tests/Idempotence.hs @@ -0,0 +1,30 @@ +module Main where + +import Data.Char +import Data.List +import Test.QuickCheck + +capitalizeWord :: String -> String +capitalizeWord [] = [] +capitalizeWord (x:xs) = toUpper x : xs + +twice :: (a -> a) -> (a -> a) +twice y = y . y + +fourTimes :: (a -> a) -> (a -> a) +fourTimes = twice . twice + +f :: String -> Bool +f x = + (capitalizeWord x == twice capitalizeWord x) + && (capitalizeWord x == fourTimes capitalizeWord x) + +f' :: Ord a => [a] -> Bool +f' x = + (sort x == twice sort x) + && (sort x == fourTimes sort x) + +main :: IO () +main = do + quickCheck f + quickCheck (f' :: String -> Bool)
\ No newline at end of file |
