2013-03-14 86 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