
| > Another possiblity would be to make the ConCls class look like this | > class ConCls c where | > name :: String | > arity :: Int | > ...etc... | > | > Now we'd have to give an explicit type argument at the call site: | > | > show {| Constr c t |} (Con x) = (name {| c |}) ++ show x | > | > I quite like the thought of being able to supply explicit type | > arguments.... but I don't konw how to speak about the order of type | > parameters. What order does map takes its two type parameters in? | | Sorry, this seems like a non-sequitur to me? | | 'map' has type '(a->b) -> [a] -> [b]'; supplying explicit | type parameters would mean giving values to 'a' and 'b'. If | I wanted to propose notation for this, I would suggest, e.g., | (map :: (String -> Int) -> [String] -> [Int]) length | ["Hello", "World"] | | 'name' (above) has type 'String'; the '{| c |}' is not | providing a type parameter in the same sense. Yes it is. 'name' would have type forall c. ConCls c => String It requires a type argument, just like map. Simon
participants (1)
-
Simon Peyton-Jones