[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