在 HaskellControl.Arrow
文档中,它谈到了 Kleisli 箭头与单子的关系,但对我来说如何使用它并不明显。我有一个我认为适合箭头的功能,除了它涉及 IO monad,所以我认为 Kleisli 箭头可能会有所帮助。
采用以下函数,它返回目录的原始文件名和修改后的文件名对。
import System.Directory
import System.FilePath
datedFiles target = do
fns <- getDirectoryContents target
tms <- mapM (fmap show . getModificationTime) fns
return $
zip fns $
zipWith replaceBaseName fns $
zipWith (++) (map takeBaseName fns) tms
如果我必须把它画出来,它会是这样的:
我认为它可以从使用 Kleisli 箭头中受益,但我不知道如何。任何人都可以提供指导吗?