10

我目前定义任意数量的函数的方法如下,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。如何?

4

1 回答 1

10

关于什么

class X r where
    foo :: A -> r

instance X r => X (E -> r) where
    foo :: A -> E -> r
    foo a e = foo (combine a e)

?

您可能想查看PrintfType实例。正是因为他们,我才能提供答案。

于 2011-07-11T05:05:08.167 回答