2013-03-14 85 views
0
while :: Int -> Bool -> (Int,Int) -> (Int,Int) ->[Int] -> String 
while arguments validity premRange atomRange operators = 
    return(if validity then "Hello" else "NO") 



main :: IO() 
main = 
    do 
putStrLn "Welcome to Random Argument Generator" 
arguments <- getArguments 
validity <- getValidity 
putStrLn "Enter the range of the number of premises to each argument" 
premRange <- getRange 
putStrLn "Enter the range of the number of atomic statments per premises" 
atomRange <- getRange 
operators <- getOperators 
putStrLn "Thank You!\nExecuting..." 
test <- while arguments validity premRange atomRange operators 
putStrLn "Good Bye" 

它抱怨我在回来的时候和我的呼吁。我把这个功能作为一个测试,我真的很困惑它到底在抱怨什么。哈斯克尔功能返回故障

+4

Haskell中的'return'并不意味着它在其他语言中的含义。对于正常的函数,你永远不需要使用'return'。 – 2013-03-14 01:53:31

+0

我使用的IO函数返回那些和他们的工作,但是由于其他原因 – user2150839 2013-03-14 02:18:04

+0

@ user2150839,在Haskell''返回'具体是关于'IO'(和其他monads);即它使得一个纯数值的IO计算成为可能。 'return :: a - > IO a' – luqui 2013-03-14 03:05:10

回答

1

在Haskell中,诸如if表达式之类的表达式对于函数来说是一个非常好的定义。您可以删除单词return

之后,你将有一个问题在main其中一个行不执行I/O,所以它的类型是不与周围do兼容的(我认为):

test <- while arguments validity premRange atomRange operators 

但是,哈哈,你可以将它改为:

let test = while arguments validity premRange atomRange operators 
+0

嗯是试图找出为什么aswell – user2150839 2013-03-14 02:18:30

+0

原来,我需要使它成为一个IO字符串,我不明白为什么,然后保持if语句作为回报。我认为IO主要是输出到一个文件或屏幕不分配给IO功能的东西 – user2150839 2013-03-14 02:22:51

+1

ooooooooo那是正确< - 只适用于IO我只记得现在它的所有回来!谢谢! – user2150839 2013-03-14 02:41:34