diff --git a/bench/Core.hs b/bench/Core.hs
--- a/bench/Core.hs
+++ b/bench/Core.hs
@@ -144,7 +144,7 @@
         bench "freer" $ whnf (run . runHttp) prog
       , bench "free" $ whnf runFHttp prog'
 
-      , bench "freerN"      $ whnf (run . runHttp . p) 1000000
-      , bench "freeN"       $ whnf (runFHttp . p')     1000000
+      , bench "freerN"      $ whnf (run . runHttp . p) 100000
+      , bench "freeN"       $ whnf (runFHttp . p')     100000
     ]
   ]
diff --git a/examples/src/Main.hs b/examples/src/Main.hs
--- a/examples/src/Main.hs
+++ b/examples/src/Main.hs
@@ -1,4 +1,18 @@
+{-# LANGUAGE DataKinds #-}
 module Main where
 
+import Control.Monad.Freer
+import Teletype
+
+runner :: Eff '[Teletype] ()
+runner = do
+  x <- getLine'
+  putStrLn' x
+  y <- getLine'
+  putStrLn' y
+
 main :: IO ()
-main = print "placeholder"
+main = do
+  let xs = runTeletypePure ["cat", "fish"] runner
+  print xs
+  runTeletype runner
diff --git a/freer.cabal b/freer.cabal
--- a/freer.cabal
+++ b/freer.cabal
@@ -1,5 +1,5 @@
 name:                freer
-version:             0.2.2.2
+version:             0.2.2.3
 synopsis:            Implementation of the Freer Monad
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Control/Monad/Freer.hs b/src/Control/Monad/Freer.hs
--- a/src/Control/Monad/Freer.hs
+++ b/src/Control/Monad/Freer.hs
@@ -10,6 +10,7 @@
 -}
 module Control.Monad.Freer (
   Member,
+  Members,
   Eff,
   run,
   send,
diff --git a/src/Control/Monad/Freer/Internal.hs b/src/Control/Monad/Freer/Internal.hs
--- a/src/Control/Monad/Freer/Internal.hs
+++ b/src/Control/Monad/Freer/Internal.hs
@@ -33,6 +33,7 @@
 module Control.Monad.Freer.Internal (
   Eff(..),
   Member(..),
+  Members,
   Arr,
   Arrs,
   Union,
diff --git a/src/Data/Open/Union.hs b/src/Data/Open/Union.hs
--- a/src/Data/Open/Union.hs
+++ b/src/Data/Open/Union.hs
@@ -34,9 +34,12 @@
   Union,
   decomp,
   weaken,
-  Member(..)
+  Member(..),
+  Members
 ) where
 
+import GHC.Exts
+
 --------------------------------------------------------------------------------
                            -- Interface --
 --------------------------------------------------------------------------------
@@ -60,6 +63,10 @@
 instance (Member' t r (FindElem t r)) => Member t r where
   inj = inj' (P :: P (FindElem t r))
   prj = prj' (P :: P (FindElem t r))
+
+type family Members m r :: Constraint where
+  Members (t ': c) r = (Member t r, Members c r)
+  Members '[] r = ()
 
 --------------------------------------------------------------------------------
                          -- Implementation --
diff --git a/tests/Tests/Exception.hs b/tests/Tests/Exception.hs
--- a/tests/Tests/Exception.hs
+++ b/tests/Tests/Exception.hs
@@ -38,7 +38,7 @@
 incr :: Member (State Int) r => Eff r ()
 incr = get >>= put . (+ (1::Int))
 
-tes1 :: (Member (State Int) r, Member (Exc String) r) => Eff r b
+tes1 :: (Members '[State Int, Exc String] r) => Eff r b
 tes1 = do
  incr
  throwError "exc"
