Как я могу загрузить скрипт runhaskell без расширения.hs с помощью ghci?
Я написал сценарий на 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 ответ
Вы можете использовать -x
возможность указать GHCi (или GHC в этом отношении) обрабатывать все следующие файлы, как если бы они имели указанное расширение.
Кажется, нет никакого способа указать эту опцию из GHCi (для использования с :load
), но вы можете использовать обходной путь, если хотите, чтобы создать символическую ссылку с .hs
расширение и загрузить это.
Ваша вторая проблема со строкой shebang вызвана тем, что препроцессор C по какой-то причине запускается в вашем исходном файле (моя старая установка GHC в Ubuntu этого не делает). Вы можете отключить это с помощью -XNoCPP
вариант.
Так что для вашего случая это должно работать из командной строки:
ghci -x hs -XNoCPP testscript