summaryrefslogtreecommitdiff
path: root/app/SlackBuilder/Trans.hs
diff options
context:
space:
mode:
Diffstat (limited to 'app/SlackBuilder/Trans.hs')
-rw-r--r--app/SlackBuilder/Trans.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/app/SlackBuilder/Trans.hs b/app/SlackBuilder/Trans.hs
new file mode 100644
index 0000000..d678a19
--- /dev/null
+++ b/app/SlackBuilder/Trans.hs
@@ -0,0 +1,29 @@
+module SlackBuilder.Trans
+ ( SlackBuilderT(..)
+ ) where
+
+import Control.Monad.Trans.Reader (ReaderT(..))
+import SlackBuilder.Config
+import Control.Monad.IO.Class (MonadIO(..))
+
+newtype SlackBuilderT a = SlackBuilderT
+ { runSlackBuilderT :: ReaderT Settings IO a
+ }
+
+instance Functor SlackBuilderT
+ where
+ fmap f (SlackBuilderT slackBuilderT) = SlackBuilderT $ f <$> slackBuilderT
+
+instance Applicative SlackBuilderT
+ where
+ pure = SlackBuilderT . pure
+ (SlackBuilderT f) <*> (SlackBuilderT x) = SlackBuilderT $ f <*> x
+
+instance Monad SlackBuilderT
+ where
+ return = pure
+ (SlackBuilderT x) >>= f = SlackBuilderT $ x >>= runSlackBuilderT . f
+
+instance MonadIO SlackBuilderT
+ where
+ liftIO = SlackBuilderT . liftIO