Использование 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, я бы предпочел не использовать его.

0 ответов

Другие вопросы по тегам