[Haskell-cafe] property testing, point-free style
Olaf Klinke
olf at aatal-apotheke.de
Wed May 31 20:00:40 UTC 2023
On Wed, 2023-05-31 at 05:36 -0700, Ivan Perez wrote:
> Maybe I'm missing something, but can't you just define:
>
> (≡) f g = (f &&& g) >>^ (==)
>
> (You could also define it as: (≡) f g x = f x == g x)
>
> And use ≡ at will?
>
> Why do you need an instance or a newtype?
>
> Ivan
Hah, indeed. Stupid me. I was overthinking it and made the return type
of (≡) a GADT with the Arbitrary constraint baked in, but that
constraint is going to be checked at the call site anyways.
Thanks!
>
> On Wed, 31 May 2023 at 04:25, Olaf Klinke <olf at aatal-apotheke.de> wrote:
>
> > Dear Cafe,
> >
> > The expression
> >
> > \x -> f x == g x
> >
> > is a testable property, as long as values for x can be randomly
> > generated. For clarity I'd prefer a point-free style, e.g.
> >
> > f ≡ g
> >
> > Are there extensions to QuickCheck that let me write this? The
> > QuickCheck package itself does not seem to contain such an operator. My
> > current work-around is a
> > newtype ExtensionalEquality a b
> > that holds two functions of type (a -> b) and a Testable instance for
> > it. But I've got a hunch that I re-invented some wheel here. (My
> > ExtensionalEquality is isomorphic to
> > Refl (a -> b) (a -> b)
> > but Refl ist conceptually about type equality, not term equality.)
> >
> > Thanks
> > Olaf
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > To (un)subscribe, modify options or view archives go to:
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> > Only members subscribed via the mailman list are allowed to post.
More information about the Haskell-Cafe
mailing list