fresnel-0.0.0.0: src/Fresnel/Functor/Traversed.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Fresnel.Functor.Traversed
( -- * Traversed functor
runTraversed
, Traversed(..)
) where
import Data.Functor (void)
-- Traversed functor
runTraversed :: Functor f => Traversed f a -> f ()
runTraversed (Traversed fa) = void fa
newtype Traversed f a = Traversed (f a)
deriving (Applicative, Functor)
instance Applicative f => Semigroup (Traversed f a) where
Traversed a1 <> Traversed a2 = Traversed (a1 *> a2)
instance Applicative f => Monoid (Traversed f a) where
mempty = Traversed (pure (error "Traversed.mempty: value used"))