
Hello, I'm wondering if it is possible doing IO in terms of Arrow. I got a function search all files under directory recursively and I'd like to refartoring using Arrow terms. I tried to define a function like below but failed. isDirExist = Kleisli doesDirectoryExist Do I need to define a instance for IO to be Arrow? Or is there any existing solutions? I'm a newbie of Haskell and thanks your help. ~~~~~ getFilesInDir :: FilePath -> IO [FilePath] getFilesInDir inp = do isDir <- doesDirectoryExist inp files <- if isDir then (do names <- getDirectoryContents inp forM [ inp > x | x <- names, isNotSpecialDir x ] getFilesInDir) else return [[inp]] return $ concat files ~~~~~