W dokumentacji Haskella Control.Arrow
mówi o związku strzały Kleisli z monadami, ale nie jest dla mnie oczywiste, jak z tego korzystać. Mam funkcję, która, jak sądzę, pasuje do strzał, z wyjątkiem tego, że zawiera monotonię IO, więc myślę, że strzałki Kleisli mogą pomóc.Jak używać strzałek Kleisli z monadami?
Wykonaj następującą funkcję, która zwraca pary oryginalnych i zmodyfikowanych nazw plików katalogu.
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
Gdybym miał wyciągnąć go na zewnątrz, to byłoby coś takiego:
Myślę, że może korzystać z wykorzystaniem strzałek Kleisli, ale nie wiem jak . Czy ktoś może udzielić wskazówek?