module Main (main) where import Control.Applicative (liftA2) import Hedgehog import Hedgehog.Classes import NonEmpty import qualified Data.List.NonEmpty as Base import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range main :: IO Bool main = lawsCheckMany [ ( "NonEmpty f" , [ functorLaws genNonEmpty1 , foldableLaws genNonEmpty1 , applicativeLaws genNonEmpty1 , traversableLaws genNonEmpty1 , comonadLaws genNonEmpty1 ] ) , ( "NonEmpty f a" , [ showLaws genNonEmpty , showReadLaws genNonEmpty , eqLaws genNonEmpty , ordLaws genNonEmpty -- , genericLaws genNonEmpty ] ) ] genNonEmpty :: Gen (NonEmpty Base.NonEmpty [Integer]) genNonEmpty = genNonEmpty1 (Gen.list (Range.linear 0 6) genInteger) genInteger :: Gen Integer genInteger = Gen.integral_ (Range.linear (-1000) 1000) genNonEmpty1 :: Gen a -> Gen (NonEmpty Base.NonEmpty a) genNonEmpty1 gen = do a <- gen as <- liftA2 (Base.:|) gen (Gen.list (Range.linear 0 6) gen) pure (NonEmpty a as)