のようなものですですが実装されていない、私たちのプログラムの原因となる計算を表現するためのものです失敗する。私たちは実際に無限ループとして自分自身をundefined
を定義することができます例えば
undefined = let x = x in x
undefined = undefined
だから、本当に私たちがちょうど原因になりますか、プログラムがクラッシュしたり、ループ永遠に、決してする値undefined :: a
に入れてやっていますそれを評価する。あなたはあなたがちょうどこのtypechecksので、この
foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz
を行うことができ実装する方法がわからないいくつかの大きなと複雑な機能を持っている場合
したがって、それは、コンパイルだろうと我々は我々の他の部分をテストすることができますプログラム。
しかし、誤ってプログラムのその部分を実行したときに無限ループを起こすことは、役に立たないので、GHCなどはundefined
を別の方法で実装します。
-- In GHC
error msg = throw (ErrorCall s)
undefined = error "Prelude.undefined"
だから、より良いデバッグ機能あなたは下の混乱、HAMMARの概念を発見している場合
foo bar baz = undefined
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz)
で未定義の機能を残して:彼らは、例えば、プログラムがクラッシュし、エラーメッセージを発してい投稿された偉大なanswer
'未定義'を使用してください。この関数を呼び出すと、 '*** Exception:Prelude.undefined'が得られます。 –
あるいは、isDivisor x y = error "まだ実装されていません"、またはghciをループさせたい場合は 'isDivisor x y = isDivisor x y'です。 –