Haskell:默认的类型限制?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (28)

考虑这个例子:

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

3applyThrice通过GHC默认为一个Integer与编译时如图所示-Wall

Warning: Defaulting the following constraint(s) to type 'Integer'
         'Integral t'
           arising from a use of 'applyKTimes'
提问于
用户回答回答于

是的,你可以,虽然它不像添加默认的每种类型类型那么简单,并且它只适用NumPrelude和标准库中的子类。语法是default (t1, ..., tn),每个模块只能使用一个这样的声明。

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

默认的默认值(Integer, Double)不仅仅是GHC策略:它来自Haskell 98报告。

扫码关注云+社区