首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何直接调用Monad函数?

如何直接调用Monad函数?
EN

Stack Overflow用户
提问于 2013-05-07 00:39:17
回答 1查看 104关注 0票数 2

在下面的示例中,我希望能够直接调用'ls‘函数(请参阅示例中最后注释掉的一行),但我找不到正确的语法。提前谢谢。

代码语言:javascript
复制
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".")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 00:48:02

你不能只用

代码语言:javascript
复制
mapM putStrLn (ls ".")

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

代码语言:javascript
复制
main = ls "." >>= mapM_ putStrLn

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16403204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档