
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