Trong tài liệu Haskell Control.Arrow
nó nói về mối quan hệ mũi tên Kleisli 'với monads, nhưng nó không phải là rõ ràng với tôi làm thế nào để sử dụng này. Tôi có một chức năng mà tôi nghĩ phù hợp với mũi tên ngoại trừ nó liên quan đến đơn nguyên IO, vì vậy tôi nghĩ rằng mũi tên Kleisli có thể giúp đỡ.Làm thế nào để sử dụng mũi tên Kleisli với monads?
Thực hiện chức năng sau đây trả về các cặp tên tệp gốc và sửa đổi của một thư mục.
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
Nếu tôi phải vẽ nó ra, nó sẽ là một cái gì đó như thế này:
Tôi nghĩ rằng nó có thể được hưởng lợi từ việc sử dụng các mũi tên Kleisli, nhưng tôi không biết làm thế nào . Bất cứ ai có thể cung cấp hướng dẫn?