如何在haskell中使用getLine或getChar?

时间:2016-05-10 16:32:25

标签: haskell

我正试图从我的控制台获取string或只是char并存储到变量中。

我试图使用:

> let x = getChar
> x
> c -- for getting a char.

但没有存储(getLine相同)我该怎么办?

4 个答案:

答案 0 :(得分:6)

getChar的类型为IO Char。它不是返回Char的函数;它是一个IO动作,在执行时返回Char。 (虽然很微妙,但这种区别对于理解Haskell如何使用纯函数执行IO至关重要。)

该行

let x = getChar

只需将名称x绑定到相同的IO操作(您可以通过随后在GHCi中键入:t x来查看)。键入x然后执行该操作; GHCI等待你输入一个字符,然后立即返回该字符。

要在程序中使用getChar,您需要在IO monad中使用它,例如

main = do ch <- getChar
          print ch

main = getChar >>= print

答案 1 :(得分:2)

这是一个示例

main = do
    x <- getLine
    putStrLn $ "Here is the string you typed in: " ++ x

答案 2 :(得分:1)

从控制台读取,可能不是很有用。但是,您应该使用<-构造。

例如(没有"也很好):

>myString <- getLine
>"Hello world" 

>myChar <- getChar
>c

有关详情,建议您阅读here

答案 3 :(得分:0)

您需要使用 <-将其绑定到变量,操作的结果将被绑定:

*Main> variable <- getLine 
 hello      
*Main> putStrLn variable 
 hello
*Main> anotherChar <- getChar
a*Main> 
*Main> putChar anotherChar 
a*Main> 

函数 getLine 的类型为IO String,而 getChar 的类型为IO Char。