Was denken Sie von nicht implementiert ist es genannt wird, etwas bottom
Boden ist nicht nur für die Ansicht, bedeutete eine Berechnung darstellen, die unser Programm verursacht Versagen.
Denn wir beispielsweise tatsächlich undefined
uns als Endlosschleife
undefined = let x = x in x
undefined = undefined
wirklich So definieren können, was wir tun undefined :: a
in einem Wert zu setzen ist einfach, die für immer abstürzen oder Schleife verursachen oder das Programm, aber nie es bewerten.
Deshalb, wenn Sie einige große und komplexe Funktion, die Sie wissen nicht, wie Sie ihn nur Seit dieser typechecks
foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz
implementieren könnte das tun, werden sie zusammenstellen und wir können andere Teile testen unserer Programm.
Da es jedoch ziemlich unpraktisch ist, eine Endlosschleife zu haben, wenn Sie versehentlich diesen Teil des Programms ausführen, implementieren GHC und andere als ein anderes. Sie haben sie das Programm zum Absturz bringen und eine Fehlermeldung abgeben, zB:
-- In GHC
error msg = throw (ErrorCall s)
undefined = error "Prelude.undefined"
So eine Funktion zu verlassen undefined mit besseren Debugging-Funktionen
foo bar baz = undefined
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz)
Wenn Sie das Konzept der Unterseite verwirrend sind zu finden, Hammar posted a great answer
Verwenden Sie 'undefined'. Wenn Sie die Funktion aufrufen, erhalten Sie '*** Exception: Prelude.undefined'. –
Alternativ ist 'isDivisor x y = Fehler" Noch nicht implementiert "', oder, wenn ghci eine Schleife haben soll, ist 'isDivisor x y = isDivisor x y'. –