2014-10-31 1 views
6

Многие люди включают .ghci файлов в свои проекты haskell, чтобы включить необходимые параметры для загрузки модулей в ghci. Вот пример:Может ли runhaskell выбрать варианты из .ghci?

:set -isrc -itest -iexamples -packagehspec2 

Однако при попытке запустить файл, содержащий main через runhaskell один должен повторить все эти варианты, например:

runhaskell -isrc -itest -iexamples -packagehspec2 test/Spec.hs 

есть хороший способ, чтобы runhaskell забрать опции из файла .ghci?

ответ

4

Я не знаю, как сделать runhaskell работы. Что я делаю, это просто труба "main" к GHCI:

$ echo main | ghci -v0 test/Spec.hs 

Если вы хотите передать аргументы командной строки, которая работает также:

$ echo ':main -m "behaves correct"' | ghci -v0 test/Spec.hs 

Или вы можете обернуть его в скрипте:

#!/usr/bin/env runhaskell 
>import System.IO 
>import System.Environment 
>import System.Exit 
>import System.Process 
> 
>main :: IO() 
>main = do 
> source:args <- getArgs 
> (Just h, Nothing, Nothing, pid) <- createProcess (proc "ghci" ["-v0", source]) {std_in = CreatePipe} 
> hPutStr h ("import System.Environment\nSystem.Environment.withArgs " ++ show args ++ " main\n") 
> hClose h 
> waitForProcess pid >>= exitWith 

который может быть использован как так:

$ ./run.lhs test/Spec.hs -m "behaves correct"