Как я могу загрузить скрипт 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
Другие вопросы по тегам