content: -- |
  -- Module      : Test.LeanCheck.Function
  -- Copyright   : (c) 2015-2024 Rudy Matela
  -- License     : 3-Clause BSD  (see the file LICENSE)
  -- Maintainer  : Rudy Matela <rudy@matela.com.br>
  --
  -- This module is part of LeanCheck,
  -- a simple enumerative property-based testing library.
  --
  -- This module exports 'Listable' and 'Show' function typeclass instances.
  -- These can be useful for testing higher-order properties --- properties that
  -- take functions as arguments.
  --
  -- > > import Test.LeanCheck
  -- > > import Test.LeanCheck.Function
  --
  -- > > check $ \f p xs -> filter p (map f xs) == map f (filter p xs :: [Int])
  -- > *** Failed! Falsifiable (after 36 tests):
  -- > \_ -> 0
  -- > \x -> case x of
  -- >       0 -> True
  -- >       _ -> False
  -- > [1]
  --
  -- > > check $ \f p xs -> filter p (map f xs) == map f (filter p xs :: [Bool])
  -- > *** Failed! Falsifiable (after 20 tests):
  -- > \_ -> False
  -- > \x -> case x of
  -- >       False -> False
  -- >       True -> True
  -- > [True]
  --
  -- > > check $ \f z xs -> foldr f z xs == foldl f z (xs :: [Int])
  -- > *** Failed! Falsifiable (after 75 tests):
  -- > \x _ -> case x of
  -- >         0 -> 1
  -- >         _ -> 0
  -- > 0
  -- > [0,0]
  --
  -- Warning: this is only intended to be used in testing modules.  Avoid
  -- importing this on modules that are used as libraries.
  --
  -- The 'Listable' and 'Show' function instance are defined in, respectively:
  --
  -- * "Test.LeanCheck.Function.Listable"
  -- * "Test.LeanCheck.Function.Show"
  --
  -- The 'Show' instance will work for all functions whose return types are
  -- instances of ShowFunction from "Test.LeanCheck.Function.ShowFunction".
  {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  module Test.LeanCheck.Function () where
  import Test.LeanCheck.Core (Listable) -- for Haddock
  import Test.LeanCheck.Function.Listable ()
  import Test.LeanCheck.Function.Show ()
  