2016-08-25 9 views
2

GHCiを使用してHaskellで下のようなファイルをロードする方法があります。これにより、バインディングを持つメソッドをテストできます。Haskell:GHCi失敗またはエラーではなく、できるだけ読み込みます。

ユースケース:私のモジュールの一部をテストしようとしましたが、残りの部分はスケルトンコードを持っていました。 The type signature for ‘methodB’ lacks an accompanying binding:これは明らかに正しいエラーを出力

module X (methodA, methodB, methodC) where 

methodA :: String->String 
methodA name = "Hello " ++ name 

methodB :: Int -> String 

methodC :: String -> String 

(としては、XYの問題を持っていないため)。 たとえば、以下のようなものを使用したいと思います。

GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help 
Prelude> :l example.hs 
[1 of 1] Compiling X    (example.hs, interpreted) 

example.hs:6:1: error: 
    The type signature for ‘methodB’ lacks an accompanying binding 

example.hs:8:1: error: 
    The type signature for ‘methodC’ lacks an accompanying binding 
Failed, modules loaded: none. 
Prelude> methodA "jamesmstone" 

<interactive>:2:1: error: 
    Variable not in scope: methodA :: [Char] -> t 

答えて

5

あなたは-fdefer-type-errorsを使用することができます。これにより、タイプエラーに関する警告が表示されますが、プログラムの他の型付き部分を実行することはできません。

例:

Program.hsが含まれている場合:

foo :: Int 
foo = 'a' 

main = putStrLn "Hello, world" 

を次に-fdefer型-エラーであなたはまだmainをロードして実行することができます。

$ ghci -fdefer-type-errors Program.hs 
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help 
[1 of 1] Compiling Main    (Program.hs, interpreted) 

Program.hs:5:7: Warning: 
    Couldn't match expected type ‘Int’ with actual type ‘Char’ 
    In the expression: 'a' 
    In an equation for ‘foo’: foo = 'a' 
Ok, modules loaded: Main. 
*Main> main 
Hello, world 
*Main> 
3

ただ、彼らに動作しないこと結合を与える:

methodB = undefined 
methodC = undefined 
関連する問題