Использование ansi-wl-pprint с haskeline
Как использовать ansi-wl-pprint с haskeline, не теряя поддержки Windows?
У ansi-wl-pprint есть два способа вывести SimpleDoc
:
(\doc -> displayS doc "") :: SimpleDoc -> String
displayIO stdout :: SimpleDoc -> IO ()
Тем не менее, документация предупреждает, что displayS
не работает на винде (cmd.exe
не реализует escape-последовательности 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, я бы предпочел не использовать его.