diff options
| author | Oleg Grenrus <oleg.grenrus@iki.fi> | 2015-03-03 07:21:43 -0600 |
|---|---|---|
| committer | Austin Seipp <austin@well-typed.com> | 2015-03-03 07:21:44 -0600 |
| commit | 4e6bcc2c8134f9c1ba7d715b3206130f23c529fb (patch) | |
| tree | e96cb726189a973f1e25982cc2c0d64bd3b4a8f1 /libraries/base/Control/Monad/Fix.hs | |
| parent | 89458eba5721de1b6b3378415f26e110bab8cc0f (diff) | |
| download | haskell-4e6bcc2c8134f9c1ba7d715b3206130f23c529fb.tar.gz | |
Add various instances to newtypes in Data.Monoid
Summary:
Add Functor instances for Dual, Sum and Product
Add Foldable instances for Dual, Sum and Product
Add Traversable instances for Dual, Sum and Product
Add Foldable and Traversable instances for First and Last
Add Applicative, Monad instances to Dual, Sum, Product
Add MonadFix to Data.Monoid wrappers
Derive Data for Identity
Add Data instances to Data.Monoid wrappers
Add Data (Alt f a) instance
Reviewers: ekmett, dfeuer, hvr, austin
Reviewed By: dfeuer, austin
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D673
GHC Trac Issues: #10107
Diffstat (limited to 'libraries/base/Control/Monad/Fix.hs')
| -rw-r--r-- | libraries/base/Control/Monad/Fix.hs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libraries/base/Control/Monad/Fix.hs b/libraries/base/Control/Monad/Fix.hs index 76faeaf655..ef8eeee776 100644 --- a/libraries/base/Control/Monad/Fix.hs +++ b/libraries/base/Control/Monad/Fix.hs @@ -26,6 +26,7 @@ module Control.Monad.Fix ( import Data.Either import Data.Function ( fix ) import Data.Maybe +import Data.Monoid ( Dual(..), Sum(..), Product(..), First(..), Last(..) ) import GHC.Base ( Monad, error, (.) ) import GHC.List ( head, tail ) import GHC.ST @@ -81,3 +82,20 @@ instance MonadFix (Either e) where instance MonadFix (ST s) where mfix = fixST + +-- Instances of Data.Monoid wrappers + +instance MonadFix Dual where + mfix f = Dual (fix (getDual . f)) + +instance MonadFix Sum where + mfix f = Sum (fix (getSum . f)) + +instance MonadFix Product where + mfix f = Product (fix (getProduct . f)) + +instance MonadFix First where + mfix f = First (mfix (getFirst . f)) + +instance MonadFix Last where + mfix f = Last (mfix (getLast . f)) |
