2014-02-28 17 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