Jak uniknąć pisania kodu podstawowego dla funkcji wykonujących dopasowywanie wzorców?

Wta odpowiedź doinne pytanie, podano trochę szkicu kodu Haskella, który używa funkcji opakowujących, aby wyodrębnić jakiś kod do sprawdzania składni argumentów wiersza poleceń. Oto część kodu, którą staram się uprościć:

<code>takesSingleArg :: (String -> IO ()) -> [String] -> IO ()
takesSingleArg act [arg] = act arg
takesSingleArg _   _     = showUsageMessage

takesTwoArgs :: (String -> String -> IO ()) -> [String] -> IO ()
takesTwoArgs act [arg1, arg2] = act arg1 arg2
takesTwoArgs _   _            = showUsageMessage
</code>

Czy jest jakiś sposób (może przy użyciuSzablon Haskell?), aby uniknąć konieczności pisania dodatkowych funkcji dla każdej liczby argumentów? W idealnej sytuacji chciałbym móc napisać coś takiego (robię tę składnię)

<code>generateArgumentWrapper<2, showUsageMessage>
</code>

I to się rozszerza

<code>\fn args -> case args of
                 [a, b] -> fn a b
                 _      -> showUsageMessage
</code>

W idealnej sytuacji mógłbym nawet mieć zmienną liczbę argumentówgenerateArgumentWrapper meta-funkcja, dzięki czemu mógłbym to zrobić

<code>generateArgumentWrapper<2, asInt, asFilePath, showUsageMessage>
</code>

I to się rozszerza

<code>\fn args -> case args of
                 [a, b] -> fn (asInt a) (asFilePath b)
                 _      -> showUsageMessage
</code>

Czy ktoś wie, jak to osiągnąć? Byłoby naprawdę łatwym sposobem powiązania argumentów wiersza poleceń ([String]) do dowolnych funkcji. Czy może jest to zupełnie inne, lepsze podejście?

questionAnswers(3)

yourAnswerToTheQuestion