如何在不丢失Windows支持的情况下将ansi-wl-pprint与haskeline一起使用?
ansi-wl-pprint有两种输出SimpleDoc
的方法:
(\doc -> displayS doc "") :: SimpleDoc -> String
displayIO stdout :: SimpleDoc -> IO ()
但是,文档警告displayS
在Windows上不起作用(cmd.exe
没有实现ANSI转义序列?)。
displayIO
并未使用haskeline的打印功能,但是:
outputStr :: MonadIO m => String -> InputT m ()
outputStrLn :: MonadIO m => String -> InputT m ()
getExternalPrint :: MonadException m => InputT m (String -> IO ())
我现在能看到的最接近解决方案的是:
outputPretty :: (MonadException m, MonadIO m, Pretty p) => p -> InputT m ()
outputPretty p = getExternalPrint >>= doPrint
where doc = renderPretty 0.4 80 $ pretty p
doPrint print = liftIO . print $ displayS doc ""
但是,如果displayS
无法在Windows上运行,我不想使用它。