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实例.只是因为他们才能提供答案.