From f90fdbcc360753c5f0d0a0a777e6f05a97263fce Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Sat, 4 Dec 2010 15:39:03 +0100 Subject: [PATCH] Simple arbitrary instances --- .ghci | 1 + tests/Text/Digestive/Tests/Util.hs | 36 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 .ghci create mode 100644 tests/Text/Digestive/Tests/Util.hs diff --git a/.ghci b/.ghci new file mode 100644 index 0000000..3614a96 --- /dev/null +++ b/.ghci @@ -0,0 +1 @@ +:set -itests diff --git a/tests/Text/Digestive/Tests/Util.hs b/tests/Text/Digestive/Tests/Util.hs new file mode 100644 index 0000000..4378a41 --- /dev/null +++ b/tests/Text/Digestive/Tests/Util.hs @@ -0,0 +1,36 @@ +module Text.Digestive.Tests.Util + ( Id (..) + ) where + +import Control.Applicative (Applicative (..), (<$>)) +import Test.QuickCheck (Arbitrary (..)) + +import Text.Digestive.Result +import Text.Digestive.Types + +-- | An ID Monad +-- +newtype Id a = Id {unId :: a} + +instance Functor Id where + fmap f (Id x) = Id $ f x + +instance Applicative Id where + pure = Id + (Id f) <*> (Id x) = Id $ f x + +instance Monad Id where + return = Id + (Id x) >>= f = f x + +instance Arbitrary a => Arbitrary (Result e a) where + arbitrary = Ok <$> arbitrary + +instance Arbitrary v => Arbitrary (View e v) where + arbitrary = View . const <$> arbitrary + +instance (Monad m, Arbitrary v, Arbitrary a) => Arbitrary (Form m i e v a) where + arbitrary = do + v <- arbitrary + r <- arbitrary + return $ Form $ return (v, r)