首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Idris: Ord/Num问题

Idris: Ord/Num问题
EN

Stack Overflow用户
提问于 2020-05-24 03:59:48
回答 1查看 58关注 0票数 1

我有一个非常简单的示例,演示如何使用不进行类型检查的case _ of,但我不能理解问题是什么:

代码语言:javascript
复制
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只是LTEQGT。我得到的错误如下:

代码语言:javascript
复制
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

我很困惑,有什么提示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 06:13:16

compare的类型要求x0的类型*相同,但您尚未指定。请尝试

代码语言:javascript
复制
sign : (Ord elem, Num elem) => elem -> ZeroOrSign

*或者有适当的转换。我不太明白这是如何工作的,但是Num似乎就足够了,可能是因为fromInteger0转换为elem类型

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61977884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档