2014-10-31 7 views
6

Viele Leute enthalten .ghci Dateien in ihren Haskell-Projekten, um benötigte Optionen zum Laden von Modulen in ghci einzuschließen. Hier ein Beispiel:Kann runhaskell Optionen von .ghci abholen?

:set -isrc -itest -iexamples -packagehspec2 

jedoch beim Versuch, eine Datei auszuführen enthält main durch runhaskell man all diese Optionen zu wiederholen hat, zB:

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

Gibt es einen guten Weg, runhaskell zu lassen abholen die Optionen aus der .ghci Datei?

Antwort

4

Ich weiß nicht, wie man runhaskell funktioniert. Was ich tue, ist nur Rohr "main" zu GHCI:

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

Wenn Sie Befehlszeilenargumente übergeben wollen, das funktioniert auch:

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

Oder Sie können es wickeln in einem Skript auf:

#!/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 

, die verwendet werden können, etwa so:

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