为什么在 Idris 2 中不进行 cong 类型检查

Why doesn't cong typecheck in Idris 2

我正在编写一个函数来测试 Nat 的命题相等性,它在 Idris 1 中进行类型检查。

sameNat : (n : Nat) -> (m : Nat) -> Maybe (n = m)
sameNat Z Z = Just Refl
sameNat (S n) (S m) = case sameNat n m of
                        Just e => Just (cong e)
                        Nothing => Nothing
sameNat _ _ = Nothing

但是它在 Idris 2 (0.4.0) 中没有进行类型检查,我得到了这个错误。

Error: While processing right hand side of sameNat. When
unifying n = m and Nat m e -> :: ?x ?xs n m e.
Mismatch between: n = m and Nat m e -> :: ?x ?xs n m e.

它会在我编写 cong 的特定版本并使用它时进行类型检查。

cong' : n = m -> S n = S m
cong' Refl = Refl

为什么不进行类型检查,我该如何进行类型检查?

cong 的类型签名已更改:

伊德里斯 1:

cong : (a = b) -> f a = f b

伊德里斯 2:

Prelude.cong : (0 f : (t -> u)) -> a = b -> f a = f b