Haskell:默认约束类型

标签 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
3applyThrice GHC 默认为 Integer如使用 -Wall 编译时所示:
Warning: Defaulting the following constraint(s) to type 'Integer'
         'Integral t'
           arising from a use of 'applyKTimes'

所以我猜Integer是默认值 Integral a => a .
  • 有没有办法为其他约束定义“默认类型”?
  • 使用默认类型是不好的做法吗? (使用 -Wall 时确实会报错 ..)
  • 最佳答案

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

    添加 default (Int) ,例如,将更改 Integral 的默认值在您的代码中添加到 Int .

    默认的 (Integer, Double)不仅仅是 GHC 政策:它来自 Haskell 98 Report . (不过,GHCi 确实有 extended default rules。)

    这里是 a discussion当前系统的一些问题。

    关于Haskell:默认约束类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2861988/

    相关文章:

    haskell - 函数的并行声明是个好主意吗?

    haskell - Haskell 中的 print 是纯函数吗?

    haskell - 为什么app在Applicative里面可用?

    haskell - 为什么我不能在 Haskell 中比较任意长度的元组?

    haskell - 在 Haskell 中处理事件

    haskell - 使用类型类为使用 Acid-State 时提供替代实现

    haskell - 使用类型类约束进行快速检查并报告生成的值?

    haskell - 如何解决箭头的一阶约束?

    haskell - 如何实现一个简单的 Subtractable 类型类

    haskell - MultiParamTypeClasses、FunctionalDependency 和调用不明确的函数