Skip to content
  • Ryan Scott's avatar
    Add missing Semigroup instances for Monoidal datatypes in base · 8c6a3d68
    Ryan Scott authored
    Summary:
    There are currently three datatypes that are exposed in `base` that have
    `Monoid` instances, but no `Semigroup` instances:
    
    * `IO`
    * `Event` (from `GHC.Event`)
    * `Lifetime` (from `GHC.Event`)
    
    (There is also `EventLifetime` in `GHC.Event.Internal`, but it is not exported
    directly, so I didn't bother with it.)
    
    Adding the `Semigroup` instances for these types directly in the modules in
    which they're defined resulted in some horrific import cycles, so I opted to
    take the easy approach of defining all of these instances in `Data.Semigroup`.
    (When `Semigroup` becomes a superclass of `Monoid`, these instances will have
    to be moved somehow.)
    
    Fixes #12464.
    
    Test Plan: It compiles
    
    Reviewers: hvr, ekmett, austin, bgamari
    
    Reviewed By: ekmett
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D2588
    
    GHC Trac Issues: #12464
    8c6a3d68