gpt4 book ai didi

haskell - 如何直接调用 Monad 函数?

转载 作者:行者123 更新时间:2023-12-02 10:14:45 24 4
gpt4 key购买 nike

在下面的示例中,我希望能够直接调用“ls”函数(请参阅示例的最后一个注释行),但我无法找出正确的语法。提前致谢。

module Main (main) where

import System.Directory

ls :: FilePath -> IO [FilePath]
ls dir = do
fileList <- getDirectoryContents dir
return fileList

main = do
fileList <- ls "."
mapM putStrLn fileList
-- How can I just use the ls call directly like in the following (which doesn't compile)?
-- mapM putStrLn (ls".")

最佳答案

你不能只使用

mapM putStrLn (ls ".")

因为 ls "." 的类型为 IO [FilePath],而 mapM putStrLn 只需要 [FilePath] >,所以你需要使用bind,或者Haskell中的>>=。所以你的实际行是

main = ls "." >>= mapM_ putStrLn

请注意 mapM_ 函数,而不仅仅是 mapMmapM 将为您提供 IO [()] 类型,但对于 main 您需要 IO (),这就是mapM_ 的用途。

关于haskell - 如何直接调用 Monad 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com