diff --git a/Control/Applicative/Utils.hs b/Control/Applicative/Utils.hs
new file mode 100644
--- /dev/null
+++ b/Control/Applicative/Utils.hs
@@ -0,0 +1,7 @@
+module Control.Applicative.Utils (
+  (<.>)
+) where
+
+infixr 9 <.>
+(<.>) :: Functor f => (a -> b) -> (c -> f a) -> c -> f b
+f1 <.> f2 = fmap f1 . f2
diff --git a/Data/Function/Tools.hs b/Data/Function/Tools.hs
new file mode 100644
--- /dev/null
+++ b/Data/Function/Tools.hs
@@ -0,0 +1,6 @@
+module Data.Function.Tools (
+  const2
+) where
+
+const2 :: a -> b -> c -> a
+const2 = const . const
diff --git a/Data/List/Tools.hs b/Data/List/Tools.hs
new file mode 100644
--- /dev/null
+++ b/Data/List/Tools.hs
@@ -0,0 +1,7 @@
+module Data.List.Tools (
+  mulLists
+) where
+
+mulLists :: [[a]] -> [[a]]
+mulLists []       = [[]]
+mulLists (xs:xss) = [ x:xs_ | x <- xs, xs_ <- mulLists xss ]
diff --git a/Data/Tuple/Tools.hs b/Data/Tuple/Tools.hs
new file mode 100644
--- /dev/null
+++ b/Data/Tuple/Tools.hs
@@ -0,0 +1,10 @@
+module Data.Tuple.Tools (
+  modifyFst
+, modifySnd
+) where
+
+modifyFst :: (a -> b) -> (a, c) -> (b, c)
+modifyFst f (x, y) = (f x, y)
+
+modifySnd :: (a -> b) -> (c, a) -> (c, b)
+modifySnd f (x, y) = (x, f y)
diff --git a/yjtools.cabal b/yjtools.cabal
--- a/yjtools.cabal
+++ b/yjtools.cabal
@@ -1,5 +1,5 @@
 Name:		yjtools
-Version:	0.1
+Version:	0.2
 Cabal-Version:	>= 1.2
 Build-Type:	Simple
 License:	GPL
@@ -19,4 +19,4 @@
 
 Library
   Build-Depends:	base
-  Exposed-Modules:	Control.Monad.Utils
+  Exposed-Modules:	Control.Monad.Utils, Control.Applicative.Utils, Data.List.Tools, Data.Tuple.Tools, Data.Function.Tools
