Moje obecne podejście do definiowania funkcji arbitralnego arity znajduje się poniżej, gdzie A jest akumulatorem, E jest rodzajem argumentu wejściowego, a R jest typem wyniku.Jak zdefiniować dowolną funkcję arain w Haskell, która zawiera arity 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
Ale minimalna arity foo to 1. Minimalna dla foo jest nadal -> E -> R, a doFoo jest E -> R. Chciałbym również mieć doFoo :: R. W jaki sposób?
Hmm ... Czuję się teraz głupio! Jak usunąć pytanie SO? –
Ty nie. To pytanie może być przydatne dla innych osób. – hammar
Kolejny przydatny pakiet do obejrzenia to szybkie sprawdzenie. Zapewnia także funkcje z argumentami variadic. – Masse