我刚开始学习Haskell.
我正在创建一个查找重复文件的程序.我创建了以下功能:
hashFile :: (MonadIO m) => FilePath -> m (Digest MD5)
categorize :: Ord k => (a -> k) -> [a] -> Map.Map k [a]
Run Code Online (Sandbox Code Playgroud)
我想在一个返回的函数中组合它们
Map.Map (Digest MD5) [FilePath]Run Code Online (Sandbox Code Playgroud)
我的问题是:
我无法找到一种方法来处理IO monad以获得我想要的东西.所以我的问题是:
我正在尝试做的是正确的,还是应该返回类型Map.Map (IO (Digest MD5)) [FilePath].
如何将这些函数组合在一起以获取按哈希分组的文件列表?
我正在学习Haskell,我需要比较两个文件.我没有找到这样做的函数,所以我自己编写了它.以下是我提出的功能.
cmpFiles :: FilePath -> FilePath -> IO Bool
cmpFiles a b = withBinaryFile a ReadMode $ \ha ->
withBinaryFile b ReadMode $ \hb ->
fix (\loop -> do
isEofA <- hIsEOF ha
isEofB <- hIsEOF hb
if | isEofA && isEofB -> return True -- both files reached EOF
| isEofA || isEofB -> return False -- only one reached EOF
| otherwise -> do -- read content
x <- hGet ha 4028 -- TODO: How to use a …Run Code Online (Sandbox Code Playgroud)