diff --git a/Graphics/UI/FreeGame/Base.hs b/Graphics/UI/FreeGame/Base.hs
--- a/Graphics/UI/FreeGame/Base.hs
+++ b/Graphics/UI/FreeGame/Base.hs
@@ -125,11 +125,16 @@
 hoistFreeR :: (Functor f, MonadFree g m) => (f (m a) -> g (m a)) -> Free.Free f a -> m a
 hoistFreeR _ (Free.Pure a) = return a
 hoistFreeR t (Free.Free f) = wrap . t $ fmap (hoistFreeR t) f
-{-# INLINE hoistFreeR #-}
+{-# INLINE[~4] hoistFreeR #-}
 
 hoistFR :: MonadFree g m => (f (m a) -> g (m a)) -> F f a -> m a
 hoistFR t (F m) = m return (wrap . t)
-{-# INLINE hoistFR #-}
+{-# INLINE[~4] hoistFR #-}
+
+{-# RULES
+"hoistFreeR/hoistFreeR"[5]   forall f g m. hoistFreeR f (hoistFreeR g m) = hoistFreeR (f . g) m
+"hoistFR/hoistFR"[5]     forall f g m. hoistFR f (hoistFR g m) = hoistFR (f . g) m
+ #-}
 
 -- | The class of types that can be regarded as a kind of picture.
 class Picture2D p where
diff --git a/Graphics/UI/FreeGame/Internal/Raindrop.hs b/Graphics/UI/FreeGame/Internal/Raindrop.hs
--- a/Graphics/UI/FreeGame/Internal/Raindrop.hs
+++ b/Graphics/UI/FreeGame/Internal/Raindrop.hs
@@ -1,11 +1,32 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Graphics.UI.FreeGame.Internal.Raindrop
+-- Copyright   :  (C) 2013 Fumiaki Kinoshita
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Fumiaki Kinoshita <fumiexcel@gmail.com>
+-- Stability   :  experimental
+-- Portability :  non-portable
+--
+-- A portable implementation of lens(<http://hackage.haskell.org/package/lens>)
+----------------------------------------------------------------------------
 module Graphics.UI.FreeGame.Internal.Raindrop (view, over) where
 
 import Data.Functor.Identity
 import Control.Monad.Reader
 import Control.Applicative
+import Unsafe.Coerce
 
+(#.) :: (b -> c) -> (a -> b) -> (a -> c)
+(#.) _ = unsafeCoerce
+{-# INLINE (#.) #-}
+
+-- | @'view' :: 'MonadReader' s m => Getting a s a -> m a@
 view :: MonadReader s m => ((a -> Const a b) -> (s -> Const a t)) -> m a
-view f = ask >>= return . getConst . f Const
+view f = asks (getConst #. f Const)
+{-# INLINE view #-}
 
+-- | @'over' :: ASetter s t a b -> (a -> b) -> s -> t@
 over :: ((a -> Identity b) -> (s -> Identity t)) -> (a -> b) -> s -> t
-over l f = runIdentity . l (Identity . f)
+over l f = runIdentity #. l (Identity #. f)
+{-# INLINE over #-}
diff --git a/free-game.cabal b/free-game.cabal
--- a/free-game.cabal
+++ b/free-game.cabal
@@ -1,5 +1,5 @@
 name:                free-game
-version:             0.9.3.2
+version:             0.9.3.3
 synopsis:            Create graphical applications for free
 description:         Cross-platform GUI library based on free monads
 homepage:            https://github.com/fumieval/free-game
@@ -50,7 +50,6 @@
     mtl >= 2.1,
     OpenGL == 2.8.*,
     OpenGLRaw == 1.3.*,
-    profunctors == 3.*,
     random == 1.*,
     transformers >= 0.3,
     void >= 0.5,
