summaryrefslogtreecommitdiff
path: root/lib/SlackBuilder/Trans.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2023-09-22 07:33:02 +0200
committerEugen Wissner <belka@caraus.de>2023-09-22 07:33:02 +0200
commit840290491f45157249ba97fb8f5e4cae9e04dc90 (patch)
tree0bc54eb0aa3ec248145e725ec963c81c045f586c /lib/SlackBuilder/Trans.hs
parenta7114618c1290b00745db69ef0e60b2e848a662d (diff)
downloadslackbuilder-840290491f45157249ba97fb8f5e4cae9e04dc90.tar.gz
Split the code into library and application
Diffstat (limited to 'lib/SlackBuilder/Trans.hs')
-rw-r--r--lib/SlackBuilder/Trans.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/SlackBuilder/Trans.hs b/lib/SlackBuilder/Trans.hs
new file mode 100644
index 0000000..d678a19
--- /dev/null
+++ b/lib/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