2014-02-20 68 views
0

我正在編寫生成程序框圖的代碼。我試圖將我的代碼分成模塊(函數)。第一個模塊生成框圖。其他模塊要求輸入塊的名稱並將其保存爲字符串(行),但它不會將這些字符串導出到其他模塊(我想將這些字符串作爲變量導出並在其他模塊中用作塊的名稱)。什麼可能是一個問題?也許有人已經找到了同樣的問題,並有解決方案?先謝謝你! Input.hs代碼:卡住Haskell的模塊輸出

module Input (firstName, secondName, thirdName, fourthName) where 

    import Data.Char 

    main = do 
     putStrLn "Iveskite pirmo bloko pavadinima" 
     firstName <- getLine 
     putStrLn "Iveskite antro bloko pavadinima" 
     secondName <- getLine 
     putStrLn "Iveskite trecio bloko pavadinima" 
     thirdName <- getLine 
     putStrLn "Iveskite ketvirto bloko pavadinima" 
     fourthName <- getLine  
+0

你不能在Haskell頂層變量不能依賴於某些IO運行 – jozefg

回答

1

這條線:

module Input (firstName, secondName, thirdName, fourthName) where 

意味着你的源文件將定義firstNamesecondName等在頂部水平。

您有一個firstName的定義,但它在函數main中定義,不能在其外面看到。

5

當您使用module Input (firstName, secondName, thirdName, fourthName) where從模塊導出名稱時,必須在頂層定義這些名稱,因此必須進行靜態綁定。你反而可以做的節目中像

module Input (getNames) where 

import Data.Char 

getNames :: IO (String, String, String, String) 
getNames = do 
    putStrLn "Iveskite pirmo bloko pavadinima" 
    firstName <- getLine 
    putStrLn "Iveskite antro bloko pavadinima" 
    secondName <- getLine 
    putStrLn "Iveskite trecio bloko pavadinima" 
    thirdName <- getLine 
    putStrLn "Iveskite ketvirto bloko pavadinima" 
    fourthName <- getLine 
    return (firstName, secondName, thirdName, fourthName) 

然後從另一個文件,你可以有

module Other where 

import Input 

doSomething :: IO() 
doSomething = do 
    (n1, n2, n3, n4) <- getNames 
    putStr "You entered:" 
    putStr $ " " ++ n1 
    putStr $ " " ++ n2 
    putStr $ " " ++ n3 
    putStr $ " " ++ n4 
    putStrLn ""