@@ -16,24 +16,8 @@ import Control.Promise
1616class NumberOfArgs x where
1717 numberOfArgs :: Proxy x -> Int
1818
19−-- More may be added later...
20−instance numberOfArgsFunction6 :: NumberOfArgs (a -> b -> c -> d -> e -> f -> g) where
21− numberOfArgs _ = 6
22−
23−else instance numberOfArgsFunction5 :: NumberOfArgs (a -> b -> c -> d -> e -> f) where
24− numberOfArgs _ = 5
25−
26−else instance numberOfArgsFunction4 :: NumberOfArgs (a -> b -> c -> d -> e) where
27− numberOfArgs _ = 4
28−
29−else instance numberOfArgsFunction3 :: NumberOfArgs (a -> b -> c -> d) where
30− numberOfArgs _ = 3
31−
32−else instance numberOfArgsFunction2 :: NumberOfArgs (a -> b -> c) where
33− numberOfArgs _ = 2
34−
35−else instance numberOfArgsFunction1 :: NumberOfArgs (a -> b) where
36− numberOfArgs _ = 1
19+instance numberOfArgsFunction1 :: NumberOfArgs b => NumberOfArgs (a -> b) where
20+ numberOfArgs _ = numberOfArgs (Proxy :: Proxy b) + 1
3721
3822else instance numberOfArgsFunction0 :: NumberOfArgs a where
3923 numberOfArgs _ = 0
@@ -49,7 +33,7 @@ else instance numberOfArgsFunction0 :: NumberOfArgs a where
4933-- |
5034-- | Thus we can guarantee type safety at least in the number of arguments.
5135countArgs :: forall a. NumberOfArgs a => (Unit -> a) -> Int
52−countArgs f = numberOfArgs (proxyOf (f unit)) - 1
36+countArgs f = numberOfArgs (proxyOf f) - 2
5337 where
5438 proxyOf :: forall a. a -> Proxy a
5539 proxyOf _ = Proxy :: Proxy a