如何在Haskell中定义一个任意的arity函数,其中包含一个0的arity?

时间:2011-07-11 04:50:09

标签: haskell polyvariadic

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

1 个答案:

答案 0 :(得分: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个实例。只是因为他们能够提供答案。