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 <david.fe...@gmail.com> 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

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to