How about "auto" parameters?
foobar
foo at bar.com
Tue Jun 7 09:11:20 PDT 2011
KennyTM~ Wrote:
> On Jun 7, 11 20:11, foobar wrote:
> > I agree with Ary above and would also like to add that in the ML family of languages all the variables are also default auto typed:
> > E.g.:
> > fun add a b = a + b
> >
> > 'add' would have the type ('a, 'a) -> 'a and the type inference engine will also infer that 'a must provide the + operator.
> > I feel that this is more natural than having a dedicated function template syntax.
> > Better yet, instead of auto parameters, just make parameter types optional (as in ML) and let the compiler generate the template.
> >
>
> I don't think HM type inference (ML, Haskell) support implicit cast,
> i.e. you can't write { int a; double b; a + b; } anymore.
As I've answered to Andrei, this is a good thing(tm) - it's a feature.
I don't know if it has anything to do with the HM algorithm itself, but it is one of ML core principals. ML is strictly typed unlike C (glorified assembly).
>
> > foo(a, b) { return a + b; } // will be lowered to:
> > T foo(T) (T a, T b) { return a + b; }
> >
> > Types are already inferred for delegate literals so why not extend this to regular functions too?
> >
>
> There is no type inference in delegate literal as powerful as HM, it's
> just "I call this function with parameters 'int' and 'float', so
> instantiate a new function with 'int' and 'float'." Also, type inference
> only work in template parameters
>
> struct F(alias f) {
> ...
> }
> alias F!((a,b){return a+b;}) G;
>
> but not regular delegate literals
>
> auto c = (a,b){return a+b;};
> /* Error: undefined identifier a, b */
More information about the Digitalmars-d
mailing list