<div dir="auto">No, the Alternative instance should be based on semirings instead. The one you propose isn't distributive.<div dir="auto"><br></div><div dir="auto">Lacking general semirings, the best we can do at the moment is newtypes for each semiring we have. For instance:</div><div dir="auto"><br></div><div dir="auto">newtype NumConst a b = NumConst { getNumConst :: a }</div><div dir="auto">  deriving (Functor)</div><div dir="auto"><br></div><div dir="auto">instance Num a => Applicative (NumConst a) where</div><div dir="auto">  pure = const (NumConst 1)</div><div dir="auto">  (<*>) = (coerce :: (a -> a -> a) -> NumConst a (u -> v) -> NumConst a u -> NumConst a v) (*)</div><div dir="auto"><br></div><div dir="auto">instance Num a => Alternative (NumConst a) where</div><div dir="auto">  empty = NumConst 0</div><div dir="auto">  (<|>) = (coerce :: (a -> a -> a) -> NumConst a b -> NumConst a b -> NumConst a b) (+)</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 21, 2020, 13:44 chessai . <<a href="mailto:chessai1996@gmail.com">chessai1996@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">We already have<div dir="auto"><br></div><div dir="auto">instance Monoid m => Applicative (Const m)</div><div dir="auto"><br></div><div dir="auto">we could easily add</div><div dir="auto"><br></div><div dir="auto">instance Monoid m => Alternative (Const m) where</div><div dir="auto">  empty = coerce mempty</div><div dir="auto">  (<|>) = coerce (<>)</div><div dir="auto"><br></div><div dir="auto">which trivially satisfies left/right identity and associativity.</div><div dir="auto"><br></div><div dir="auto">I propose we add this instance to base.</div></div>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>