我目前定义任意数量的函数的方法如下,A 是累加器,E 是输入参数类型,R 是结果类型。
combine :: A -> E -> A
class X r where
foo :: A -> E -> r
instance X R where
foo :: A -> E -> R
instance X r => X ( E -> r ) where
foo :: A -> E -> E -> r
foo ( a :: A ) ( x :: E ) =
foo ( a `combine` e :: A )
doFoo = foo emptyA
但是 foo 的最小数量是 1。 foo 的最小值仍然是 A -> E -> R,而 doFoo 是 E -> R。我也想要 doFoo :: R。如何?