I'm adding this to track the discussion going on in #63.
The argument for removing Arbitrary is that instances are almost never canonical, so we almost always end up needing newtypes.
A possible downside is that we'd still need a class like Arbitrary if we want to derive generators using generic-rep. That means that we'd need some way to reflect a Gen as an instance, or we're back to Arbitrary instances anyway. CoArbitrary is also much nicer with type classes.
I'm adding this to track the discussion going on in #63.
The argument for removing
Arbitraryis that instances are almost never canonical, so we almost always end up needingnewtypes.A possible downside is that we'd still need a class like
Arbitraryif we want to derive generators usinggeneric-rep. That means that we'd need some way to reflect aGenas an instance, or we're back toArbitraryinstances anyway.CoArbitraryis also much nicer with type classes.