diff --git a/oi.cabal b/oi.cabal
--- a/oi.cabal
+++ b/oi.cabal
@@ -1,5 +1,5 @@
 Name:			oi
-Version:		0.0.1
+Version:		0.0.2
 Category:		Data
 Synopsis:		Purely Functional Lazy Interaction with the outer world
 Description:		This package implements a data structure and operations on it 
diff --git a/sample/echo.hs b/sample/echo.hs
--- a/sample/echo.hs
+++ b/sample/echo.hs
@@ -31,3 +31,6 @@
 
 getchar :: IO Int
 getchar = choice (return (-1)) (return . ord =<< getChar) =<< isEOF 
+
+puts' :: String -> [()] :-> ()
+puts' = sequenceOI . map putc
diff --git a/src/Data/OI.hs b/src/Data/OI.hs
--- a/src/Data/OI.hs
+++ b/src/Data/OI.hs
@@ -20,9 +20,12 @@
  ,deTuple
  ,deList
  ,(<|)
+ ,mapOI
+ ,mapOI'
  ,zipWithOI
  ,zipWithOI'
- ,mapOI
+ ,sequenceOI
+ ,sequenceOI'
  ) where
 
 import Control.Applicative
@@ -100,6 +103,7 @@
      io  = (:) <$> (unsafeInterleaveIO (dereference vx)) <*> (unsafeInterleaveIO (dereference vxs))
 
 --
+infixr 1 <|
 
 (<|)  ::  (b -> c :-> d) -> (a :-> b) -> (a,c) :-> d
 (f <| g) ac = case deTuple ac of (a,c) -> f (g a) c
@@ -109,6 +113,12 @@
   Just (x,xs) -> f x : mapOI f xs
   _           -> []
 
+mapOI' :: (a :-> b) -> [a] :-> (OI [a],[b])
+mapOI' f xxs = case deList xxs of
+  Just (x,xs) -> (zs, f x:ys)
+                 where (zs,ys) = mapOI' f xs
+  _           -> (xxs,[])
+
 zipWithOI :: (a -> b :-> c) -> [a] -> [b] :-> [c]
 zipWithOI _ [] _  = []
 zipWithOI f (x:xs) yys = case deList yys of
@@ -120,6 +130,18 @@
 zipWithOI' f (x:xs) yys = case deList yys of
   Just (y,ys) -> case zipWithOI' f xs ys of ~(rs,zs) -> (rs,f x y : zs)
   _           -> (yys,[])
+
+sequenceOI :: [a :-> b] -> [a] :-> ()
+sequenceOI (f:fs) xxs = case deList xxs of
+  Just (x,xs) -> f x `pseq` sequenceOI fs xs
+  Nothing     ->  ()
+sequenceOI [] _ = ()
+
+sequenceOI' :: [a :-> b] -> [a] :-> OI [a]
+sequenceOI' (f:fs) xxs = case deList xxs of
+  Just (x,xs) -> f x `pseq` sequenceOI' fs xs
+  Nothing     ->  xxs
+sequenceOI' [] xxs = xxs
 
 --
 
