Haskell,我可以在没有 IO 输出的情况下使用 monad 调用函数吗?

标签 haskell io monads

为什么我不能这样做?
禁止在这个问题中使用“做”:/
我如何在我的列表中调用单词并同时产生 IO?
谢谢..这是我的实际代码:/

main :: IO()
main = 
     putStr "Name of File: " >>
     getLine >>=
     \st ->
    openFile st ReadMode >>=
    \handle ->
        hGetContents handle >>=
        \y ->
        words y >>=
        \strings ->
            strings !! 1 >>=
            \string->
                 putStr string

[编辑] 解决方案:
main :: IO()
main = 
     putStr "Name of File: " >>
     getLine >>=
     \st ->
    openFile st ReadMode >>=
    \handle ->
        hGetContents handle >>=
        \y ->
        return (words y) >>=
        \strings ->
            return (strings !! 1) >>=
            \string->
                 putStr string

最佳答案

使用 return (words y) 而不仅仅是 words yreturn 将一个纯值(例如 [String] 返回的 words)包装到一个 monad 中。

从你的措辞来看,这个问题听起来像是家庭作业。如果是这样,它应该被标记为这样。

关于Haskell,我可以在没有 IO 输出的情况下使用 monad 调用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961778/

相关文章:

io - 了解内存映射文件

java - 读取文本文件时出现 ArrayIndexOutOfBoundsException

hadoop - Hadoop YARN:如何管理I/O

haskell - J 中的术语 "monadic"与它的 Haskell 使用有关吗?

haskell - Cabal-install 默认安装旧的软件包版本

haskell - 当类型变量应该不明确时,为什么会推断出 Integer?

haskell - curry 是通用构造的因式分解器

Haskell - 如何将两个单子(monad) Maybe 函数组合成一个函数

haskell - 为什么这个变量在哪里不可见

haskell - Monad 理论和 Haskell