Как я могу загрузить скрипт runhaskell без расширения .hs с помощью ghci? - PullRequest
8 голосов
/ 18 ноября 2011

Я написал скрипт на Haskell с именем testscript со следующим кодом:

#!/usr/bin/env runhaskell

main = putStrLn "hello"

После создания исполняемого скрипта я могу запустить его с помощью ./testscript.Однако, когда я пытаюсь загрузить скрипт с помощью ghci (то есть с :l testscript), я получаю ошибку

target `testscript' is not a module name or a source file

Если я переименую testscript в testscript.hs, и снова пытаюсь загрузить с помощью ghci,Я получаю сообщение об ошибке

testscript.hs:1:0:  error: invalid preprocessing directive #!
phase `C pre-processor' failed (exitcode = 1)

Если я удаляю строку Шебанга, она работает нормально.Однако утомительно добавлять расширение .hs в скрипт, удалять верхнюю строку, затем удалять расширение .hs и добавлять строку shebang каждый раз, когда я хочу попробовать скрипт в ghci (что довольно часто встречается каждый раз).Я хочу внести изменения в это).Есть ли более простой способ сделать это?

Я использую GHC версии 7.0.3 под Mac OS X 10.6.8

1 Ответ

10 голосов
/ 18 ноября 2011

Вы можете использовать опцию -x, чтобы указать GHCi (или GHC в этом отношении) обрабатывать все последующие файлы, как если бы они имели указанное расширение.

Кажется, что нет никакого способаукажите эту опцию в GHCi (для использования с :load), но вы можете использовать обходной путь, если хотите, чтобы создать символическую ссылку с расширением .hs и загрузить ее.

Ваша вторая проблема со строкой shebang вызвана тем, что препроцессор C по какой-то причине запускается на вашем исходном файле (моя старая установка GHC в Ubuntu этого не делает).Вы можете отключить это, используя параметр -XNoCPP.

Так что для вашего случая это должно работать из командной строки:

ghci -x hs -XNoCPP testscript
...