
I feel like I must be missing something, but what's wrong with
class Semigroup1 f where op :: f a -> f a -> f a
default op :: Monoid (f a) => f a -> f a -> f a op = (<>)
? Does that do what you like? Richard
On Sep 1, 2016, at 11:15 PM, David Feuer
wrote: On occasion, it can be useful to have default definitions that don't typecheck even with DefaultSignatures. It would be nice to be able to use them anyway. For example, if we have
class Semigroup1 f where op :: f a -> f a -> f a
then we could, hypothetically, give a default definition for (<>):
default (<>) :: Semigroup1 f => f a -> f a -> f a (<>) = op
But we can't give a default definition
op = (<>)
because there's no way to write its signature. However, for any F with
instance Semigroup (F a) where ...
the definition op = (<>) is perfectly fine.
Would it be possible to offer a completely wild defaulting mechanism allowing *any expression* as a default, and only checking its type and compiling it when it's actually used?
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs