{-# LANGUAGE FlexibleContexts #-} module AWS.EC2.Util ( asList , head , each ) where import Data.Conduit import qualified Data.Conduit.List as CL import Control.Monad.Trans.Class (lift) import Prelude hiding (head) import AWS.EC2.Internal asList :: Monad m => EC2 m (Source m a) -> EC2 m [a] asList src = do s <- src lift $ s $$ CL.consume head :: Monad m => EC2 m (Source m a) -> EC2 m (Maybe a) head src = do s <- src lift $ s $$ CL.head each :: Monad m => EC2 m (Source m a) -> (a -> m b) -> EC2 m () each src f = do s <- src (rsrc, _) <- lift $ s $$+ CL.take 0 lift $ each' rsrc f each' :: Monad m => ResumableSource m a -> (a -> m b) -> m () each' rsrc f = do (s', ma) <- rsrc $$++ CL.head case ma of Nothing -> return () Just a -> f a >> each' s' f