undefined
に遭遇したときに式が失敗するはずのユニットテストをハスケルに書くのはややこしいことです。私はHSpecで次のことを試した:Haskellのレイジー式で評価された未定義のユニットテスト
module Main where
import Test.Hspec
import Control.Exception (evaluate)
main :: IO()
main = hspec $ do
describe "Test" $ do
it "test case" $ do
evaluate (take 1 $ map (+1) [undefined, 2, 3]) `shouldThrow` anyException
[*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries\base\GHC\Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:2:20 in interactive:Ghci1
この回答は良いですが、[評価する]がWHNFに評価されないと言うと、私は混乱しています[https://hackage.haskell.org /package/base-4.9.0.0/docs/Control-Exception.html#v:evaluate)。 –
@AlexisKing私は訂正しました!いずれにしても、WNHFだけでは十分ではないので、なぜNFDataが必要です。 – Alec
実際には、定義されていない単一の要素を持つリストが生成されるため、テストは成功しますか?なぜ(+1)関数が適用されないのですか? –