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

Din*_*uek 10 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
Run Code Online (Sandbox Code Playgroud)

但是foo的最小arity是1.foo的最小值仍然是A - > E - > R,而doFoo是E - > R.我也想要doFoo :: R.怎么样?

Rot*_*sor 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)
Run Code Online (Sandbox Code Playgroud)

您可能想要查看PrintfType实例.只是因为他们才能提供答案.

  • 你没有.这个问题可能对其他人有用. (7认同)