{-# LANGUAGE FlexibleContexts, TypeApplications, TypeOperators #-} module Main where import Data.Foldable (for_) import Test.QuickCheck (Gen, Arbitrary, arbitrary, sample') import Test.Fun import Test.Fun.Internal.Types (truncateFun) import Test.QuickCheck.HigherOrder () genFun :: (CoArbitrary Gen a, Arbitrary b) => Gen (a :-> b) genFun = coarbitrary arbitrary sample_ :: Show a => Gen a -> IO () sample_ g = do xs <- sample' g for_ xs $ \x -> putStrLn (indent (show x)) main :: IO () main = do sample_ (truncateFun 4 id 33 <$> genFun @(Int -> Int) @Int) sample_ (truncateFun 4 id 33 <$> genFun @(Int -> Either () ()) @Int) -- sample_ (truncateFun 10 id undefined <$> genFun @Bool @Bool) -- sample_ (truncateFun 100 id undefined <$> genFun @(Bool -> Bool) @Bool)