Haskell: Defaulting constraints to type

后端 未结 1 1715
时光说笑
时光说笑 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条回答
  • 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)
提交回复
热议问题