可変長引数の関数?

Movedのminor nit. イヤなことにはかわりなし。

class VAFun a r f | f -> r where
  withVAList :: ([a] -> r) -> f

instance VAFun a Int Int where
  withVAList g = g []

instance VAFun a r x => VAFun a r (a -> x) where
  withVAList g x = withVAList (g . (x:)) 

vaSum :: VAFun Int Int x => x
vaSum = withVAList sum
*Main> vaSum (3::Int) (2::Int) :: Int
5