Haskell の QuickCheck パッケージを repl 環境で使う

Haskell の QuickCheckrepl 環境で使ってみる。

org mode の source block を使うので、 chattyFalse にセットしている。

まずは ghci でのおまじない。

:set -package QuickCheck
:set +m

下記を実行


import Test.QuickCheck
import Data.List (delete)
prop_delete :: Int -> [Int] -> Property
prop_delete x xs =
  classify (count x xs == 0) "count x xs == 0" $
  classify (count x xs == 1) "count x xs == 1" $
  classify (count x xs >= 2) "count x xs >= 2" $
  counterexample (show (delete x xs)) $
  count x (delete x xs) == max 0 (count x xs-1)
  where count x xs = length (filter (== x) xs)
myArgs = stdArgs {chatty = False}
output <$> quickCheckWithResult myArgs prop_delete >>= putStrLn

実行結果

+++ OK, passed 100 tests:
76% count x xs == 0
19% count x xs == 1
 5% count x xs >= 2

思いどおりの結果が得られた。