2014-02-28 16 views
4

我在書本Programming in Haskell的第9.6章,第91頁。函數writeat應該在命令提示符的給定位置寫入給定的字符串,但這不適用於我。Haskell編程的一些代碼不起作用

type Pos = (Int, Int) 

goto  :: Pos -> IO() 
goto (x, y) = putStr ("\ESC[" ++ show y ++ ";" ++ show x ++ "H") 

writeat  :: Pos -> String -> IO() 
writeat p xs = do 
    goto p 
    putStr xs 

但它沒有做這本書所說的。是因爲我在Windows上嗎?如果是的話,是否有解決方法?

回答

4

是的,那是因爲你是在Windows上。這些是ANSI轉義序列,Windows不支持它們:http://en.wikipedia.org/wiki/ANSI_escape_code#Windows_and_DOS

您可以通過使用mintty使用cygwin並確保您的TERM設置爲支持ANSI的TERM;或運行在Linux VM的哈斯克爾,使用一個xterm(這樣的VM從fpcomplete:https://www.fpcomplete.com/page/haskell-eval-vm)。但它不值得在這個例子中所有這些努力。

+0

這部分代碼是要去被用來顯示內部終端計算器。我想我應該雙啓動安裝一些Linux發行版。 –

+3

注意'ANSI-terminal'包讓你做文本顏色等,無論在Windows和Unix平臺的可移植的方式。我喜歡那個。 – MathematicalOrchid