diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -69,7 +69,24 @@
 
 ## v0.11
 + Added `nicify` form `Text.Nicify`
-+ Upgraded dependency `hydrogen-version` form `>=1.2` to `>=1.3`
++ Upgraded dependency `hydrogen-version` from `>=1.2` to `>=1.3`
 
 ## v0.12
 + Added `Default`
+
+## v0.13
++ _Skipped_
+
+## v0.14
++ Aligned with other `hydrogen-*` packages
+
+## v0.15
++ Added `Apply`
++ Added `uncurry3`, `uncurry4`, `uncurry5`
+
+## v0.16
++ Changed `Apply` to use `-XMultiParamTypeClasses` and `-XTypeFamilies`
++ Added `$$`, `$$$`, `$$$$`, `$$$$$` (lile `uncurryN`)
++ Added `<$$>`, `<$$$>`, `<$$$$>`, `<$$$$$>` (like `<$>` and `uncurryN`)
+
+
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
 hydrogen-prelude
 ================
 
+[![Build Status](https://travis-ci.org/scravy/hydrogen-prelude.svg?branch=master)](https://travis-ci.org/scravy/hydrogen-prelude)
+
 + [`about`](#about)
   + [`scravy.de/hydrogen-prelude`](http://scravy.de/hydrogen-prelude)
   + [`hackage.haskell.org/package/hydrogen-prelude`](http://hackage.haskell.org/package/hydrogen-prelude)
diff --git a/hydrogen-prelude.cabal b/hydrogen-prelude.cabal
--- a/hydrogen-prelude.cabal
+++ b/hydrogen-prelude.cabal
@@ -1,5 +1,5 @@
 name:                 hydrogen-prelude
-version:              0.15
+version:              0.16
 homepage:             http://scravy.de/hydrogen-prelude/
 synopsis:             Hydrogen Prelude
 license:              MIT
@@ -20,7 +20,7 @@
                       , Hydrogen.Prelude.IO
                       , Hydrogen.Prelude.Network
                       , Hydrogen.Prelude.System
-  build-depends:      base ==4.7.*
+  build-depends:      base >=4.6 && <5
                       , array ==0.5.*
                       , cereal ==0.4.*
                       , containers ==0.5.*
@@ -53,6 +53,7 @@
                       , FlexibleContexts
                       , GADTs
                       , LambdaCase
+                      , MultiParamTypeClasses
                       , MultiWayIf
                       , NegativeLiterals
                       , NoImplicitPrelude
diff --git a/src/Hydrogen/Prelude.hs b/src/Hydrogen/Prelude.hs
--- a/src/Hydrogen/Prelude.hs
+++ b/src/Hydrogen/Prelude.hs
@@ -41,6 +41,14 @@
   , (=~)
   , (=~~)
   , (|>)
+  , ($$)
+  , ($$$)
+  , ($$$$)
+  , ($$$$$)
+  , (<$$>)
+  , (<$$$>)
+  , (<$$$$>)
+  , (<$$$$$>)
   , uuidFromString
   , randomUUID
   , nicify
@@ -65,6 +73,7 @@
   , Container (..)
   , Default (..)
   , Apply (..)
+  , Applicator
   , __
   ) where
 
@@ -427,57 +436,107 @@
 instance MonadPlus m => Default (m a) where def = mzero
 
 
-class Apply a where
+type family Applicator a b where
 
-    (*$*) :: a
+    Applicator (a, b, c, d, e) z = (a -> b -> c -> d -> e -> z)
+    Applicator (a, b, c, d) z = (a -> b -> c -> d -> z)
+    Applicator (a, b, c) z = (a -> b -> c -> z)
+    Applicator (a, b) z = (a -> b -> z)
 
+    Applicator (f (a, b, c, d, e)) (f z) = (a -> b -> c -> d -> e -> z)
+    Applicator (f (a, b, c, d)) (f z) = (a -> b -> c -> d -> z)
+    Applicator (f (a, b, c)) (f z) = (a -> b -> c -> z)
+    Applicator (f (a, b)) (f z) = (a -> b -> z)
+    Applicator (f a) (f z) = (a -> z)
 
-instance Apply ((a -> b) -> a -> b) where
+    Applicator x z = (x -> z)
 
+
+class Apply x z where
+
+    (*$*) :: Applicator x z -> x -> z
+
+instance (Applicator a z ~ (a -> z)) => Apply a z where
+
     (*$*) = ($)
 
-instance Apply ((a -> b -> c) -> (a, b) -> c) where
+instance Apply (a, b) z where
 
     (*$*) = uncurry
 
-instance Apply ((a -> b -> c -> d) -> (a, b, c) -> d) where
+instance Apply (a, b, c) z where
 
     (*$*) = uncurry3
 
-instance Apply ((a -> b -> c -> d -> e) -> (a, b, c, d) -> e) where
+instance Apply (a, b, c, d) z where
 
     (*$*) = uncurry4
 
-instance Apply ((a -> b -> c -> d -> e -> f) -> (a, b, c, d, e) -> f) where
+instance Apply (a, b, c, d, e) z where
 
     (*$*) = uncurry5
 
-instance Functor f => Apply ((a -> b) -> f a -> f b) where
+instance (Functor f, Applicator (f a) (f z) ~ (a -> z))
+    => Apply (f a) (f z) where
 
-    (*$*) = fmap
+    (*$*) = fmap . ($)
 
-instance Functor f => Apply ((a -> b -> c) -> f (a, b) -> f c) where
+instance (Functor f, Applicator (f (a, b)) (f z) ~ (a -> b -> z))
+    => Apply (f (a, b)) (f z) where
 
     (*$*) = fmap . uncurry
 
-instance Functor f => Apply ((a -> b -> c -> d) -> f (a, b, c) -> f d) where
+instance (Functor f, Applicator (f (a, b, c)) (f z) ~ (a -> b -> c -> z))
+    => Apply (f (a, b, c)) (f z) where
 
     (*$*) = fmap . uncurry3
 
-instance Functor f => Apply ((a -> b -> c -> d -> e) -> f (a, b, c, d) -> f e) where
+instance (Functor f, Applicator (f (a, b, c, d)) (f z) ~ (a -> b -> c -> d -> z))
+    => Apply (f (a, b, c, d)) (f z) where
 
     (*$*) = fmap . uncurry4
 
-instance Functor f => Apply ((a -> b -> c -> d -> e -> z) -> f (a, b, c, d, e) -> f z) where
+instance (Functor f, Applicator (f (a, b, c, d, e)) (f z) ~ (a -> b -> c -> d -> e -> z))
+    => Apply (f (a, b, c, d, e)) (f z) where
 
     (*$*) = fmap . uncurry5
 
-uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d
+
+infixr 0 $$
+infixr 0 $$$
+infixr 0 $$$$
+infixr 0 $$$$$
+
+($$) :: (a -> b -> z) -> (a, b) -> z
+($$) = uncurry
+
+($$$), uncurry3 :: (a -> b -> c -> z) -> (a, b, c) -> z
 uncurry3 f (a, b, c) = f a b c
+($$$) = uncurry3
 
-uncurry4 :: (a -> b -> c -> d -> e) -> (a, b, c, d) -> e
+($$$$), uncurry4 :: (a -> b -> c -> d -> z) -> (a, b, c, d) -> z
 uncurry4 f (a, b, c, d) = f a b c d
+($$$$) = uncurry4
 
-uncurry5 :: (a -> b -> c -> d -> e -> f) -> (a, b, c, d, e) -> f
+($$$$$), uncurry5 :: (a -> b -> c -> d -> e -> z) -> (a, b, c, d, e) -> z
 uncurry5 f (a, b, c, d, e) = f a b c d e
+($$$$$) = uncurry5
+
+
+infixl 4 <$$>
+infixl 4 <$$$>
+infixl 4 <$$$$>
+infixl 4 <$$$$$>
+
+(<$$>) :: Functor f => (a -> b -> z) -> f (a, b) -> f z
+(<$$>) = (<$>) . uncurry
+
+(<$$$>) :: Functor f => (a -> b -> c -> z) -> f (a, b, c) -> f z
+(<$$$>) = (<$>) . uncurry3
+
+(<$$$$>) :: Functor f => (a -> b -> c -> d -> z) -> f (a, b, c, d) -> f z
+(<$$$$>) = (<$>) . uncurry4
+
+(<$$$$$>) :: Functor f => (a -> b -> c -> d -> e -> z) -> f (a, b, c, d, e) -> f z
+(<$$$$$>) = (<$>) . uncurry5
 
