Automatic typing

Brian Rogoff brogoff at gmail.com
Fri Jun 28 08:28:08 PDT 2013


On Friday, 28 June 2013 at 13:44:19 UTC, ponce wrote:
> On Friday, 28 June 2013 at 00:34:54 UTC, JS wrote:
>> Would it be possible for a language(specifically d) to have 
>> the ability to automatically type a variable by looking at its 
>> use cases without adding too much complexity?
>
> Well ocaml has it 
> (https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner) and well 
> it's not all that positive, at least in that language.

No, OCaml doesn't quite do what the OP is asking for. In 
particular, the part where x is assigned an int and subsequently 
assigned a float can not be modeled directly. Even the separate 
'auto x' and subsequent use of x is different from how OCaml's 
let polymorphism works. To model that, you could declare 
everything as 'a option refs and assign them later, like

let main () =
   let x = ref None in
   let y = ref None in
   begin
     x := Some 1;
     y := Some (f());
   end

but if you want to use x as another type later you'll have to 
shadow the declaration in a new scope.

>
> Combined with parametric polymorphism it's nice and sound, 
> except it has the potential to hide a simple typo a lot further 
> from where it is (think mixing up integer operators and FP 
> operators).
> As it break overloading on "leaves", it is the reason ocaml has 
> "print_string" and "print_int" which is quite frankly ugly.

Yes, and the +., -., *., /. operators are ugly too, as is the 
requirement that record field labels in the same scope be 
distinct. Overloading can be dangerous, but no overloading is a 
PITA. Combining type inference and overloading is problematic.

> Once you have type inference, the first thing you do to make 
> your code readable is to add back type annotations.

There should always be a .mli file with exported decls. I wish 
OCaml had some ability to have separate type decls from the 
value, like Haskell. Type inference is most useful inside a 
function, IMO.

I think that even if the feature being requested were feasible, 
it would be awful for D.

-- Brian





More information about the Digitalmars-d mailing list