@@ -28,6 +28,7 @@ import Reflex.PerformEvent.Class
2828import Reflex.PostBuild.Class
2929import Reflex.TriggerEvent.Class
3030
31+import Control.Applicative (liftA2)
3132import Control.Monad.Exception
3233import Control.Monad.Identity
3334import Control.Monad.Primitive
@@ -39,6 +40,7 @@ import qualified Data.Dependent.Map as DMap
3940import Data.Functor.Compose
4041import Data.IntMap.Strict (IntMap)
4142import qualified Data.IntMap.Strict as IntMap
43+import qualified Data.Semigroup as S
4244
4345-- | Provides a basic implementation of 'PostBuild'.
4446newtype PostBuildT t m a = PostBuildT { unPostBuildT :: ReaderT (Event t ()) m a } deriving (Functor, Applicative, Monad, MonadFix, MonadIO, MonadTrans, MonadException, MonadAsyncException)
@@ -50,6 +52,14 @@ newtype PostBuildT t m a = PostBuildT { unPostBuildT :: ReaderT (Event t ()) m a
5052runPostBuildT :: PostBuildT t m a -> Event t () -> m a
5153runPostBuildT (PostBuildT a) = runReaderT a
5254
55+-- TODO: Monoid and Semigroup can likely be derived once ReaderT has them.
56+instance (Monoid a, Applicative m) => Monoid (PostBuildT t m a) where
57+ mempty = pure mempty
58+ mappend = liftA2 mappend
59+
60+instance (S.Semigroup a, Applicative m) => S.Semigroup (PostBuildT t m a) where
61+ (<>) = liftA2 (S.<>)
62+
5363instance PrimMonad m => PrimMonad (PostBuildT x m) where
5464 type PrimState (PostBuildT x m) = PrimState m
5565 primitive = lift . primitive