如何崩溃内部错误并强制整体

How to crash on internal bug and force totality

我正在使用 C 和我调用 returns 和 int 的函数来表示 gt、eq 或 lt。我想在 1、0 或 -1 cos 以外的任何情况下崩溃,这些情况永远不会发生。我希望 Idris 将 0、1 和 -1 视为详尽匹配。我试过了

prim__compare : Scalar -> Scalar -> Int

Ord Scalar where
  compare x y = case prim__compare x y of
                  -1 => LT
                  0 => EQ
                  1 => GT
                  _ => idris_crash ""

但我明白了

Error: compare is not covering.

Calls non covering function Builtin.idris_crash

由于崩溃只能是内部错误,所以使用assert_total

是合理的
Ord Scalar where
  compare x y = case prim__compare x y of
                  -1 => LT
                  0 => EQ
                  1 => GT
                  _ => (assert_total idris_crash) ""