Okay...that works. Sweet. gdc x = ListT $ getDirectoryContents x
get3levels top = runListT $ do b <- gdc top c <- gdc $ top++('/':b) d <- gdc $ top++('/':b)++('/':c) return (b,c,d) I feel bound to point out http://haskell.org/hawiki/ListTDoneRight which has more to say about the details of ListT Andrew Pimlott wrote: > On Mon, Dec 19, 2005 at 01:42:19PM -0600, Steve Harris wrote: > >>What I'm after is something like: >> -- (psuedo-code) >> [(b,c,d) | >> b <- getDirectoryContents a_dir, >> c <- getDirectoryContents (a_dir ++ "/" ++ b), >> d <- getDirectoryContents (a_dir ++ "/" ++ b ++ "/" ++ c) ], > > > Check out Control.Monad.List.ListT, which combines list non-determinism > with another monad. Eg, > > ListT (getDirectoryContents a_dir) :: ListT IO FilePath > > Andrew > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe