module Clean.Traversable( module Clean.Foldable,module Clean.Applicative, Traversable(..), traverse,foreach,transpose ) where import Clean.Classes import Clean.Core import Clean.Foldable import Clean.Applicative import Data.Tree class Foldable t => Traversable t where sequence :: Applicative f => t (f a) -> f (t a) instance Traversable (Either a) where sequence = pure . Left <|> map Right instance Traversable [] where sequence (x:xs) = (:)<$>x<*>sequence xs sequence [] = pure [] deriving instance Traversable ZipList instance Traversable Tree where sequence (Node a subs) = Node<$>a<*>sequence (map sequence subs) deriving instance Traversable ZipTree traverse f t = sequence (map f t) foreach = flip traverse transpose = sequence