úÎ!…sSafed None Åquickcheck-arbitrary-template$automatically build functions named  buildArbnÿ where n is an integer greater than 0. $(buildArbAny 3) creates a function buildArb3 which takes a constructor that takes 3 parameters, and returns an arbitrary instances of that constructor. It assumes that the constructors type is an instance of Arbitrary.UbuildArb1 :: Arbitrary a => (a -> b) -> Gen b buildArb1 f = f  $ arbitrarykbuildArb2 :: (Arbitrary a, Arbitrary a1) => (a1 -> a -> b) -> Gen b buildArb2 f = f  $ arbitrary  * arbitraryNone) quickcheck-arbitrary-template1create buildArb1 through buildArb20 automatically quickcheck-arbitrary-template"Boilerplate for top level splices. The given  › must be from a type constructor. Furthermore, the type constructor must be either a data type or a newtype. Any other value will result in an exception.quickcheck-arbitrary-template%Extracts the name from a constructor.Make a (  a) for type aH Currently support arbitrary Sum types up to 7 params per constructor.$Record Types not currently supportedquickcheck-arbitrary-template3build the function taht applys the type constructorquickcheck-arbitrary-template<select one of the list of generators Q Exp == oneOf [Gen *]quickcheck-arbitrary-template8Normal Constructors are the only ones we are consideringquickcheck-arbitrary-template.This is where we run the sum type thing Q Exp quickcheck-arbitrary-template‚Function that generates the actual code. Will be applied to the type variable binders and constructors extracted from the given  .quickcheck-arbitrary-templateResulting value in the  uasi monad.Noneg