2014-02-20 3 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

을 가질 수 다른 파일에서 다음

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) 

같은 뭔가를 할 수 – jozefg

답변

1

이 줄 :

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

은 소스 파일이 최고 수준에서 firstName, secondName 등을 정의하는 것을 의미합니다.

정의는 firstName이지만 함수 main 안에 정의되어 있으며 그 옆에서 볼 수 없습니다.

5

모듈에서 이름을 module Input (firstName, secondName, thirdName, fourthName) where으로 내보내는 경우 이름을 최상위 수준에서 정의해야하므로 정적으로 바인딩해야합니다. 대신 프로그램 중 실행 당신은 하스켈의 최상위 변수는 일부 IO에 의존 할 수 없습니다 당신이

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 ""