I'm currently studying semigroups and trying to figure out how to determine which type variables need a semigroup instance. Here are a couple of examples from Evan Cameron's github (https://github.com/leshow/haskell-programming-book/blob/master/src/Ch15ex.hs): (1) data Validation a b = Failure a | Success b deriving (Eq, Show) instance Semigroup a => Semigroup (Validation a b) where Success a <> Success b = Success a Failure a <> Success b = Success b Success a <> Failure b = Success a Failure a <> Failure b = Failure (a <> b) * Why doesn't 'b' need an instance of semigroup? (2) newtype AccumulateRight a b = AccumulateRight (Validation a b) deriving (Eq, Show) instance Semigroup b => Semigroup (AccumulateRight a b) where AccumulateRight (Success a) <>AccumulateRight (Failure b) =AccumulateRight (Success a) AccumulateRight (Failure a) <>AccumulateRight (Success b) =AccumulateRight (Success b) AccumulateRight (Failure a) <>AccumulateRight (Failure b) =AccumulateRight (Failure a)
Sent with ProtonMail Secure Email. _______________________________________________ Beginners mailing list [hidden email] http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners |
Gmail put you in spam. If you haven't figured this out since you asked -- it's a matter of confusing (IMO bad) variable names. Check the data definition: = Failure a | Success b deriving (Eq, Show) Failures are always type a, and successes are always type b. The type variables used in the first line correspond to these. But in the definitions of (<>), they are just local values. The instance could be rewritten like so: instance Semigroup a => Semigroup (Validation a b) where Success x <> Success y = Success x Failure x <> Success y = Success y Success x <> Failure y = Success x Failure x <> Failure y = Failure (x <> y) On Thu, Jan 26, 2017 at 1:55 PM, Atrudyjane <[hidden email]> wrote:
_______________________________________________ Beginners mailing list [hidden email] http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners |
Thank you Theodore. Yes, changing the variable names makes it clearer. Also the fact that only failures are combined on the right hand side... Regards, Andrea Sent with ProtonMail Secure Email.
_______________________________________________ Beginners mailing list [hidden email] http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners |
Free forum by Nabble | Edit this page |