Haskeline позволяет очень легко получить функциональность завершения имени файла:
module Main where
import System.Console.Haskeline
import System.Environment
mySettings :: Settings IO
mySettings = defaultSettings {historyFile = Just "myhist"}
main :: IO ()
main = do
args <- getArgs
let inputFunc = getInputLine
runInputT mySettings $ withInterrupt $ loop inputFunc 0
where
loop inputFunc n = do
minput <- handleInterrupt (return (Just "Caught interrupted"))
$ inputFunc (show n ++ ":")
case minput of
Nothing -> return ()
Just s -> do
outputStrLn ("line " ++ show n ++ ":" ++ s)
loop inputFunc (n+1)
Он также предоставляет такие функции, как completeWord и completeQuotedWord, которые должны быть в состоянии использоваться так же, как и completeFilename для создания вышеуказанных функций.
(Другими словами, иметь завершение табуляции на основе списка слов (скажем, имен функций), а не на основе содержимого папки)
Может ли кто-нибудь предоставить рабочий пример - или рабочий код - этого?
Также полезны рекомендации для функций из других пакетов (например, HCL).