summaryrefslogtreecommitdiff
path: root/Haskell-book/14/qc/tests/Idempotence.hs
blob: 4b484d0bc45c54a6d4b6adf87e499d5da2286cc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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)