-- |
-- Module : Data.Functor.Constant
-- Copyright : (c) Ross Paterson 2010
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : ross@soi.city.ac.uk
-- Stability : experimental
-- Portability : portable
--
-- The constant functor.
module Data.Functor.Constant ( Constant(..), ) where import Control.Applicative import Data.Foldable (
Foldable
(
foldMap
)) import Data.Monoid (
Monoid
(..)) import Data.Traversable (
Traversable
(
traverse
))
-- | Constant functor.
newtype
Constant
a
b
=
Constant
{
getConstant
::
a
} instance
Functor
(
Constant
a
) where
fmap
f
(
Constant
x
) =
Constant
x
instance
Foldable
(
Constant
a
) where
foldMap
f
(
Constant
x
) =
mempty
instance
Traversable
(
Constant
a
) where
traverse
f
(
Constant
x
) =
pure
(
Constant
x
) instance
(Monoid a) =>
Applicative
(
Constant
a
) where
pure
_ =
Constant
mempty
Constant
x
<*>
Constant
y
=
Constant
(
x
`mappend`
y
)