summaryrefslogtreecommitdiff
path: root/libraries/base/Control/Monad/Fix.hs
diff options
context:
space:
mode:
authorOleg Grenrus <oleg.grenrus@iki.fi>2015-03-03 07:21:43 -0600
committerAustin Seipp <austin@well-typed.com>2015-03-03 07:21:44 -0600
commit4e6bcc2c8134f9c1ba7d715b3206130f23c529fb (patch)
treee96cb726189a973f1e25982cc2c0d64bd3b4a8f1 /libraries/base/Control/Monad/Fix.hs
parent89458eba5721de1b6b3378415f26e110bab8cc0f (diff)
downloadhaskell-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.hs18
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))