monoids-0.1.17: Data/Monoid/Reducer/With.hs
{-# LANGUAGE UndecidableInstances, TypeOperators, FlexibleContexts, MultiParamTypeClasses, FlexibleInstances #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.Monoid.Reducer.With
-- Copyright : (c) Edward Kmett 2009
-- License : BSD-style
-- Maintainer : ekmett@gmail.com
-- Stability : experimental
-- Portability : non-portable (MPTCs)
--
-----------------------------------------------------------------------------
module Data.Monoid.Reducer.With
( module Data.Monoid.Reducer
, WithReducer(WithReducer,withoutReducer)
) where
import Data.Monoid.Reducer
import Data.FingerTree
-- | If @m@ is a @c@-"Reducer", then m is @(c `WithReducer` m)@-"Reducer"
-- This can be used to quickly select a "Reducer" for use as a 'FingerTree'
-- 'measure'.
newtype WithReducer c m = WithReducer { withoutReducer :: c }
instance (c `Reducer` m) => Reducer (c `WithReducer` m) m where
unit = unit . withoutReducer
instance (c `Reducer` m) => Measured m (c `WithReducer` m) where
measure = unit . withoutReducer