diff --git a/extensible.cabal b/extensible.cabal
--- a/extensible.cabal
+++ b/extensible.cabal
@@ -1,5 +1,5 @@
 name:                extensible
-version:             0.4.9
+version:             0.4.10
 synopsis:            Extensible, efficient, optics-friendly data types and effects
 homepage:            https://github.com/fumieval/extensible
 bug-reports:         http://github.com/fumieval/extensible/issues
@@ -74,6 +74,7 @@
     , comonad
     , constraints
     , deepseq
+    , exceptions
     , ghc-prim
     , hashable
     , monad-skeleton >= 0.1.2
@@ -81,6 +82,7 @@
     , prettyprinter
     , primitive
     , profunctors
+    , resourcet
     , QuickCheck
     , semigroups
     , StateVar
diff --git a/src/Data/Extensible.hs b/src/Data/Extensible.hs
--- a/src/Data/Extensible.hs
+++ b/src/Data/Extensible.hs
@@ -43,6 +43,8 @@
   , module Data.Extensible.Tangle
   , module Data.Extensible.TH
   , module Data.Extensible.Wrapper
+  , Proxy(..)
+  , KnownSymbol
   ) where
 
 import Data.Extensible.Class
@@ -60,3 +62,5 @@
 import Data.Extensible.Tangle
 import Data.Extensible.TH
 import Data.Extensible.Wrapper
+import Data.Proxy
+import GHC.TypeLits
diff --git a/src/Data/Extensible/Effect/Default.hs b/src/Data/Extensible/Effect/Default.hs
--- a/src/Data/Extensible/Effect/Default.hs
+++ b/src/Data/Extensible/Effect/Default.hs
@@ -32,12 +32,29 @@
 import Data.Extensible.Effect
 import Data.Extensible.Internal
 import Control.Monad.Except
+import Control.Monad.Catch
 import Control.Monad.Reader.Class
+import Control.Monad.Skeleton
 import Control.Monad.State.Strict
+import Control.Monad.Trans.Resource
 import Control.Monad.Writer.Class
 
 instance (MonadIO m, Associate "IO" m xs) => MonadIO (Eff xs) where
   liftIO = liftEff (Proxy :: Proxy "IO") . liftIO
+
+instance (MonadResource m, Associate "IO" m xs) => MonadResource (Eff xs) where
+  liftResourceT = liftEff (Proxy :: Proxy "IO") . liftResourceT
+
+instance (MonadThrow m, Associate "IO" m xs) => MonadThrow (Eff xs) where
+  throwM = liftEff (Proxy :: Proxy "IO") . throwM
+
+instance (MonadCatch m, Associate "IO" m xs) => MonadCatch (Eff xs) where
+  catch m0 h = go m0 where
+    go m = case debone m of
+      Return a -> return a
+      Instruction i t :>>= k -> case compareMembership (association :: Membership xs ("IO" ':> m)) i of
+        Left _ -> boned $ Instruction i t :>>= go . k
+        Right Refl -> boned $ Instruction i (try t) :>>= go . either h k 
 
 pReader :: Proxy "Reader"
 pReader = Proxy
diff --git a/src/Data/Extensible/Field.hs b/src/Data/Extensible/Field.hs
--- a/src/Data/Extensible/Field.hs
+++ b/src/Data/Extensible/Field.hs
@@ -324,8 +324,8 @@
 --
 -- @
 -- foo :: 'Record' '["num" >: Int, "str" >: String]
--- foo = #num @= 42
---   <: #str @= "foo"
+-- foo = #num \@= 42
+--   <: #str \@= "foo"
 --   <: nil
 -- @
 (@=) :: Wrapper h => FieldName k -> Repr h v -> Field h (k ':> v)
@@ -334,11 +334,12 @@
 infix 1 @=
 
 -- | Lifted ('@=')
+--
 -- @
 -- foo :: IO ('Record' '["num" >: Int, "str" >: String])
 -- foo = hsequence
---   $ #num <@=> readLn
---   <: #str <@=> getLine
+--   $ #num \<\@=\> readLn
+--   <: #str \<\@=\> getLine
 --   <: nil
 -- @
 (<@=>) :: (Functor f, Wrapper h) => FieldName k -> f (Repr h v) -> Comp f (Field h) (k ':> v)
@@ -351,7 +352,7 @@
 (@:>) _ = Field
 infix 1 @:>
 
--- | Kind-monomorphic, unwrapped version of @('@=')@
+-- | Kind-monomorphic, unwrapped version of '@='
 (@==) :: FieldName (k :: Symbol) -> v -> Field Identity (k ':> v)
 (@==) = (@=)
 {-# INLINE (@==) #-}
diff --git a/src/Data/Extensible/Internal.hs b/src/Data/Extensible/Internal.hs
--- a/src/Data/Extensible/Internal.hs
+++ b/src/Data/Extensible/Internal.hs
@@ -2,8 +2,11 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE MultiParamTypeClasses, UndecidableInstances, FunctionalDependencies #-}
-{-# LANGUAGE ScopedTypeVariables, BangPatterns #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TemplateHaskell #-}
 -----------------------------------------------------------------------------
diff --git a/src/Data/Extensible/Product.hs b/src/Data/Extensible/Product.hs
--- a/src/Data/Extensible/Product.hs
+++ b/src/Data/Extensible/Product.hs
@@ -89,7 +89,7 @@
 {-# NOINLINE nil #-}
 {-# RULES "toHList/nil" toHList nil = HList.HNil #-}
 
--- | Convert 'L.HList' into a product.
+-- | Convert 'HList.HList' into a product.
 fromHList :: HList.HList h xs -> h :* xs
 fromHList xs = hfrozen (newFromHList xs)
 {-# INLINE fromHList #-}
