2010-05-10 6 views
4

최근 하스켈을 배우기 시작했습니다. 나는이 코드를 가지고있다하스켈 콘솔 IO in notepad ++

module Main 
    where 

import IO 

main = do 
      hSetBuffering stdin LineBuffering 
      putStrLn "Please enter your name: " 
      name <- getLine 
      putStrLn ("Hello, " ++ name ++ ", how are you?") 

나는 notepad ++ 편집기와 함께 GHC 컴파일러를 사용하고있다. 문제는 상호 작용은 다음과 같이 간다 : 안녕하세요, 블라드, 당신은 어떻게
있습니다 :

프로세스 이름을 입력하십시오 블라드
>>>
을 시작?
< < < 프로세스가 완료되었습니다.

출력에서 ​​볼 수 있듯이 출력은 내가 입력 한 후에 만 ​​쓰여집니다. 프로그램이 처음으로 내 이름을 물을 것이라고 확신했기 때문에 이것은 예상치 못한 일이었습니다. 그런 다음 입력을하고 나서 인사 할 것입니다. 글쎄, 그게 정확히 내가 수동으로 exe를 실행하는 경우, 내가 아니라면 메모장 + + 및 콘솔 래퍼를 사용하여 실행하면 ...

내가해야 할 때 메모장 ++ 출력을 표시하려면 어떻게해야합니까? 프로그램이 끝나기 바로 전에? 이것은 가능한가?

답변

7

stdout을 LineBuffering으로 설정하십시오! 또한 ghci에서 프로그램을로드하는 대신 컴파일 된 버전을 실행하면 전혀 버퍼링이 필요하지 않은 것 같습니다 ...

그런데 NPP에서 콘솔에 대해 몰랐습니다. !

+0

고마워요. 그건 사실이야, 그렇지 않아, 왜 메모장에서 중요한지 모르겠다. ++. 필자는이 http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf (40 페이지의 내용)에서이 문제를 정확히 해결해야한다고 말했기 때문에 LineBuffering stdout에 대해서도 생각하지 않았습니다. – IVlad

+0

글쎄, 실제로 이것이 정확하게 수정되어야한다고 말하지는 않습니다. 그것은 한 줄을 입력 한 후 독서 입력이 끝나지 않은 오류를 수정해야한다고 말한다. 그래서 나는이 경우에 LineBuffering stdout이되어야한다고 생각한다. 다시 한 번 감사드립니다! – IVlad

2

나는 ++ 메모장에 익숙하지 해요,하지만 신속하고 해키 방법은 아마도 각 putStrLn 후

hFlush stdout 

을하는 것입니다. 다음 방법을 사용할 수도 있습니다.

nppPutStrLn s = putStrLn s >> hFlush stdout