小编And*_*Pos的帖子

如何在Haskell中组合函数和monad动作

我刚开始学习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以获得我想要的东西.所以我的问题是:

  1. 我正在尝试做的是正确的,还是应该返回类型Map.Map (IO (Digest MD5)) [FilePath].

  2. 如何将这些函数组合在一起以获取按哈希分组的文件列表?

haskell functional-programming

4
推荐指数
1
解决办法
137
查看次数

如何比较Haskell中的两个文件

我正在学习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)

haskell functional-programming

3
推荐指数
1
解决办法
331
查看次数

标签 统计

functional-programming ×2

haskell ×2