Как настроить приглашение GHCi для отображения модулей, разделенных пользовательским разделителем?

#haskell #prompt #ghci

#haskell #приглашение #ghci

Вопрос:

В настоящее время так выглядит мое приглашение ghci:

введите описание изображения здесь

И я хочу, чтобы это выглядело так:

введите описание изображения здесь

или как это

введите описание изображения здесь

Есть идеи о том, как я могу это сделать? Содержимое моего файла конфигурации (ghci.conf) выглядит так, как показано ниже

 :set prompt "ESC[33mSTX[%s]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
 

в котором я следовал синтаксису, написанному на:

https://downloads.haskell.org/ghc/8.8.1-alpha1/docs/html/users_guide/ghci.html#ghci-cmd-:set prompt

Ответ №1:

Вы можете использовать prompt-function вместо prompt того, чтобы запускать более продвинутые функции Haskell для приглашения. Вот пример ghci.conf для вашего второго приглашения:

 :{
prompter :: [String] -> Int -> IO String
prompter modules line = return $
    concat [ "ESC[33mSTX["
           , Data.List.intercalate ", " modules
           , "]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
           ]
:}

:set prompt-function prompter
 

Или, для чисел, вы можете использовать zipWith :

 :{
prompter :: [String] -> Int -> IO String
prompter modules line = return $
    concat [ "ESC[33mSTX["
           -- this is the only line that changed
           , Data.List.intercalate ", " $ zipWith (n m -> concat [show n, ".", m]) [1..] modules
           , "]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
           ]
:}

:set prompt-function prompter
 

Я оставлю это как упражнение для написания строки продолжения, но оно очень похоже и просто включает prompt-cont-function .

Комментарии:

1. Большое вам спасибо! У меня вопрос, я использовал код, который вы предоставили мне выше, и сделал его следующим образом: link и результат выглядит примерно так: link , однако всякий раз, когда я нажимаю ctrl-l (очистить экран), он становится таким: link . Есть ли у вас какие-либо идеи, почему это происходит и как я мог бы сделать так, чтобы это выглядело так: link всякий раз, когда я очищаю экран терминала? @Aplet123