diff --git a/Hate.cabal b/Hate.cabal
--- a/Hate.cabal
+++ b/Hate.cabal
@@ -3,7 +3,7 @@
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
 
-version:             0.1.4.2
+version:             0.1.4.3
 synopsis:            A small 2D game framework.
 description:         A small 2D game framework. 
 stability:           experimental
@@ -46,6 +46,7 @@
                       Hate.Graphics.Backend.Modern
                       Hate.Graphics.Backend.Modern.Shaders
                       Hate.Graphics.Backend.Modern.Types
+                      Hate.Util
                        
 
   hs-source-dirs:      .,src
@@ -55,6 +56,7 @@
   -- Other library packages from which modules are imported.
   build-depends:       base >= 4.6 && < 4.9,
                        GLFW-b >= 1.4 && < 1.4.7,
+                       hpp,
                        GLUtil >= 0.7,
                        OpenGL > 2.9.1,
                        transformers,
@@ -97,6 +99,7 @@
 executable sample_sprite
   main-is:          sample_sprite.hs
   hs-source-dirs:   samples 
+  other-modules:    Vec2Lens
   build-depends:    base >= 4.6 && < 4.9,
                     GLFW-b >= 1.4 && < 1.4.7,
                     GLUtil >= 0.7,
diff --git a/samples/Vec2Lens.hs b/samples/Vec2Lens.hs
new file mode 100644
--- /dev/null
+++ b/samples/Vec2Lens.hs
@@ -0,0 +1,20 @@
+module Vec2Lens(x,y) where
+
+import Data.Vect.Float
+import Control.Lens
+
+x :: Simple Lens Vec2 Float
+x = lens getX setX
+
+y :: Simple Lens Vec2 Float
+y = lens getY setY
+
+getX :: Vec2 -> Float
+getX (Vec2 x' _) = x'
+getY :: Vec2 -> Float
+getY (Vec2 _ y') = y'
+
+setX :: Vec2 -> Float -> Vec2
+setX (Vec2 _ y') nx = Vec2 nx y'
+setY :: Vec2 -> Float -> Vec2
+setY (Vec2 x' _) ny = Vec2 x' ny
diff --git a/src/Hate/Util.hs b/src/Hate/Util.hs
new file mode 100644
--- /dev/null
+++ b/src/Hate/Util.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE Trustworthy #-}
+
+{-|
+Module      : Util
+Description : Various utilities used by Hate framework
+License     : MIT
+Maintainer  : bananu7@o2.pl
+Stability   : stable
+Portability : full
+
+This module contains various utilities missing from @Prelude@
+or @Control.Monad@.
+-}
+
+module Hate.Util where
+
+import Control.Monad (unless)
+
+-- |A "functional" if-statement.
+bool :: Bool -> a -> a -> a
+bool b falseRes trueRes = if b then trueRes else falseRes
+
+-- |Monad "unless" that automatically extracts the value from the action.
+unless' :: Monad m => m Bool -> m () -> m ()
+unless' action falseAction = do
+    b <- action
+    unless b falseAction
+
+-- |A bit cleaner "maybe".
+maybe' :: Maybe a -> b -> (a -> b) -> b
+maybe' m nothingRes f = case m of
+    Nothing -> nothingRes
+    Just x  -> f x
+    
