【发布时间】:2020-09-10 15:26:56
【问题描述】:
我有一个非常简单的示例,作为演示如何使用不进行类型检查的case _ of,我无法理解问题所在:
data ZeroOrSign = Zero | Pos | Neg
sign : Ord elem => elem -> ZeroOrSign
sign x = case compare x 0 of
LT => Neg
EQ => Zero
GT => Pos
函数compare在Prelude、compare : Ord ty => ty -> ty -> Ordering中定义,其中Ordering只是LT、EQ和GT。我得到的错误如下:
When checking right hand side of sign with expected type
ZeroOrSign
When checking an application of function Prelude.Interfaces.compare:
Ord elem is not a numeric type
如果我尝试定义 sign : Num elem => elem -> ZeroOrSign,那么这当然会产生问题,因为 idris 找不到为 Num 类型定义的函数 compare。
我很疑惑,有什么提示吗?
【问题讨论】:
标签: idris