diff --git a/src/Tonatona.hs b/src/Tonatona.hs
--- a/src/Tonatona.hs
+++ b/src/Tonatona.hs
@@ -1,5 +1,6 @@
 module Tonatona
   ( run
+  , liftIOMap
   , liftIOCont
   , HasParser(..)
   , HasConfig(..)
@@ -15,6 +16,12 @@
 run action = do
   withConfig parser $ \env ->
     runRIO env action
+
+{-| Lift IO map function into RIO.
+ -}
+liftIOMap :: (IO a -> IO b) -> RIO env a -> RIO env b
+liftIOMap f rio =
+  RIO $ ReaderT $ \env -> f (runReaderT (unRIO rio) env)
 
 {-| Lift Continuation-passing style IO function into RIO.
  -}
diff --git a/test/DocTest.hs b/test/DocTest.hs
--- a/test/DocTest.hs
+++ b/test/DocTest.hs
@@ -16,8 +16,7 @@
 
 ghcExtensions :: [String]
 ghcExtensions =
-    [ "-XAutoDeriveTypeable"
-    , "-XBangPatterns"
+    [ "-XBangPatterns"
     , "-XBinaryLiterals"
     , "-XConstraintKinds"
     , "-XDataKinds"
@@ -38,7 +37,6 @@
     , "-XInstanceSigs"
     , "-XKindSignatures"
     , "-XLambdaCase"
-    , "-XMonadFailDesugaring"
     , "-XMultiParamTypeClasses"
     , "-XMultiWayIf"
     , "-XNamedFieldPuns"
diff --git a/tonatona.cabal b/tonatona.cabal
--- a/tonatona.cabal
+++ b/tonatona.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.2.
+-- This file has been generated from package.yaml by hpack version 0.33.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: fca606db818f005427b5d021291f1bbcd816f9d94ba931855b0af7feb48c3d1e
+-- hash: 088714bca8045d3e611299345f0c66b18e2c14a8df11f7e0b039ecd5d1aa872f
 
 name:           tonatona
-version:        0.1.1.0
+version:        0.1.2.1
 synopsis:       meta application framework
 description:    Tonatona is a **meta** application framework. It handles lots of boring tasks that are needed for real-world development such as reading in values defined in environment variables, setting up logging, sending emails, accessing databases, etc.
 category:       Framework, Library, Tonatona, Web
@@ -33,12 +33,12 @@
       Paths_tonatona
   hs-source-dirs:
       src
-  default-extensions: AutoDeriveTypeable BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      base >=4.7 && <5
-    , rio >=0.1
-    , tonaparser >=0.1
+      base >=4.7 && <4.15
+    , rio >=0.1 && <0.2
+    , tonaparser >=0.1 && <0.2
   default-language: Haskell2010
 
 test-suite doctest
@@ -46,14 +46,14 @@
   main-is: DocTest.hs
   hs-source-dirs:
       test
-  default-extensions: AutoDeriveTypeable BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
       Glob
-    , base >=4.7 && <5
+    , base >=4.7 && <4.15
     , doctest
-    , rio >=0.1
-    , tonaparser >=0.1
+    , rio >=0.1 && <0.2
+    , tonaparser >=0.1 && <0.2
   default-language: Haskell2010
 
 test-suite spec
@@ -61,11 +61,11 @@
   main-is: Spec.hs
   hs-source-dirs:
       test
-  default-extensions: AutoDeriveTypeable BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
+  default-extensions: BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse DuplicateRecordFields EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NamedFieldPuns NoImplicitPrelude OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving Strict StrictData TupleSections TypeFamilies TypeSynonymInstances ViewPatterns
   ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      base >=4.7 && <5
-    , rio >=0.1
-    , tonaparser >=0.1
+      base >=4.7 && <4.15
+    , rio >=0.1 && <0.2
+    , tonaparser >=0.1 && <0.2
     , tonatona
   default-language: Haskell2010
