Haskell: Defaulting constraints to type

后端 未结 1 1716
时光说笑
时光说笑 2021-01-17 08:35

Consider this example:

applyKTimes :: Integral i => i -> (a -> a) -> a -> a
applyKTimes 0 _ x = x
applyKTimes k f x = applyKTimes (k-1) f (f x         


        
1条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-17 08:54

    Yes, you can, although it's not quite so simple as adding a default per typeclass, and it only works for Num and its subclasses in the Prelude and standard libraries. The syntax is default (t1, ..., tn), and only one such declaration can be used per module.

    Adding default (Int), for example, would change the default for Integral in your code to Int.

    The default default of (Integer, Double) isn't just a GHC policy: it's from the Haskell 98 Report. (GHCi does have extended default rules, though.)

    Here's a discussion of some of the problems with the current system.

    0 讨论(0)
提交回复
热议问题