<p dir="ltr">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</p>
<p dir="ltr">class Semigroup1 f where<br>
  op :: f a -> f a -> f a</p>
<p dir="ltr">then we could, hypothetically, give a default definition for (<>):</p>
<p dir="ltr">  default (<>) :: Semigroup1 f => f a -> f a -> f a<br>
  (<>) = op</p>
<p dir="ltr">But we can't give a default definition</p>
<p dir="ltr">  op = (<>)</p>
<p dir="ltr">because there's no way to write its signature. However, for any F with</p>
<p dir="ltr">instance Semigroup (F a) where ...</p>
<p dir="ltr">the definition op = (<>) is perfectly fine.</p>
<p dir="ltr">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?</p>