首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell:默认类型的约束

Haskell:默认类型的约束
EN

Stack Overflow用户
提问于 2010-05-19 07:53:31
回答 1查看 3.3K关注 0票数 18

考虑这个例子:

代码语言:javascript
复制
applyKTimes :: Integral i => i -> (a -> a) -> a -> a
applyKTimes 0 _ x = x
applyKTimes k f x = applyKTimes (k-1) f (f x)

applyThrice :: (a -> a) -> a -> a
applyThrice = applyKTimes 3

applyThrice中的3由GHC缺省为Integer,如使用-Wall编译时所示

代码语言:javascript
复制
Warning: Defaulting the following constraint(s) to type 'Integer'
         'Integral t'
           arising from a use of 'applyKTimes'

所以我猜Integer是默认的Integral a => a

  • 有没有办法也为其他约束定义“默认类型”?
  • 使用默认类型是不好的做法吗?(在使用-Wall..)

时,它确实会抱怨

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-19 08:17:13

是的,you can,尽管它并不像为每个类型类添加一个默认值那么简单,而且它只适用于Prelude和标准库中的Num及其子类。语法是default (t1, ..., tn),每个模块只能使用一个这样的声明。

例如,添加default (Int)会将代码中Integral的默认值更改为Int

(Integer, Double)的缺省设置不仅仅是GHC策略:它来自Haskell 98 Report。(不过,GHCi确实有extended default rules。)

以下是当前系统的一些问题的a discussion

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

https://stackoverflow.com/questions/2861988

复制
相关文章

相似问题

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