4 ms·
> promotion from int to float is not free! Nor is it safe to allow implicit conversion in general, but F# shows that you don’t need separate operators for floa
by wyoung2 8y ago
> promotion from int to float is not free!
Nor is it safe to allow implicit conversion in general, but F# shows that you don’t need separate operators for floating point. You just need a compiler that refuses to implicitly convert data types, as F# does, so you must use explicit conversions and type suffixes if you want to mix data types. If you manually convert, then on your head be the consequences.
This is not legal F#:
let x = 1.0 + 1
But both of these are legal:
let x = 1.0 + 1.0
let y = 1.0 + float 1
F# doesn’t even let you mix single- and double-precision FP:
let x = 1.0f + 1.0 // ILLEGAL
let x = 1.0f + float32 1 // legal
- ernst_klim 8y agoAnd both F# and sml have a problem with that. What type should this function have: let add x y = x + y The proper solution for ad-hoc polymorphism is either dynamic dispatching (aka oop solution) or type-classes or OCaml's modular implicits, not ad-hoc monkey patches like that. And I find (+.) fine since float addition is not an arithmetic addition.
- wyoung2 8y ago> What type should this function have: If you don't call it, F# simply guesses "int -> int -> int". If you pass a float, you get back a curried function taking float and returning float. Now that the "add" function's type is known, you now can't pass an int: that's now known to be an error. Seems sensible to me. No problem.