yai*_*chu 18 haskell typeclass
考虑这个例子:
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
Run Code Online (Sandbox Code Playgroud)
该3在applyThrice通过GHC默认为一个Integer与编译时如图所示-Wall:
Warning: Defaulting the following constraint(s) to type 'Integer'
'Integral t'
arising from a use of 'applyKTimes'
Run Code Online (Sandbox Code Playgroud)
所以我猜这Integer是默认的Integral a => a.
-Wall..)Tra*_*own 14
是的,你可以,虽然它不像添加每个类型类的默认值那么简单,它只适用Num于Prelude和标准库中的子类.语法是default (t1, ..., tn),每个模块只能使用一个这样的声明.
default (Int)例如,添加会将Integral代码中的默认值更改为Int.
默认默认值(Integer, Double)不仅仅是GHC策略:它来自Haskell 98报告.(但GHCi确实有扩展的默认规则.)
以下是对当前系统的一些问题的讨论.