8

私は次のコードで名前が付けられた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拡張機能を削除し、ghciでスクリプトを試すたびにシバン行を追加するのは面倒です(これは、変更を加えるたびにかなり一般的です)それに)。これを行う簡単な方法はありますか?

Mac OSX10.6.8でghcバージョン7.0.3を使用しています

4

1 に答える 1

12

このオプションを使用して、-xGHCi(またはGHC)に、後続のすべてのファイルを指定された拡張子を持つかのように処理するように指示できます。

GHCi内からこのオプションを指定する方法はないようです(で使用するため:load)が、これが必要な場合に使用できる回避策は、.hs拡張子を持つシンボリックリンクを作成してロードすることです。

シバンラインに関する2番目の問題は、何らかの理由でソースファイルで実行されているCプリプロセッサが原因です(Ubuntuへの古いGHCインストールではこれが実行されません)。オプションを使用してこれを無効にすることができ-XNoCPPます。

したがって、あなたの場合、これはコマンドラインから機能するはずです。

ghci -x hs -XNoCPP testscript
于 2011-11-18T05:28:34.827 に答える