2011-07-11 14 views
9

任意のアリティの関数を定義する私の現在のアプローチは以下の通りです.Aはアキュムレータ、Eは入力引数の型、Rは結果の型です。Haskellで任意のアリティ関数を定義する方法は、0のアリティを含んでいますか?

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というの最小アリティがfooのための最小限のはまだ1です - > E - > R、及びdoFooはEである - 私もdoFooを持っているしたいと思います> R. :: R.どうやって?

答えて

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インスタンスを調べることができます。私が答えを出すことができたのは彼らのためだけです。

+0

うーん...私は今、愚かな気がする!どのようにしてSOの質問を削除できますか? –

+5

あなたはしません。この質問は、他の人にとって有益かもしれません。 – hammar

+1

もう一つの便利なパッケージはquickcheckです。また、可変引数を持つ関数も提供します。 – Masse

関連する問題