|
|
|
|
|
by jamii
4475 days ago
|
|
You may be confused by the fact that the type system will notice the equivalence of two types if the implementations of both are public eg module M =
struct
type newtons = int
let inc some_newtons = some_newtons + 1
end :
sig
type newtons = int
val inc : newtons -> newtons
end
M.inc 1 (* this works *)
module M =
struct
type newtons = int
let inc some_newtons = some_newtons + 1
let in_newtons x = x
end :
sig
type newtons
val inc : newtons -> newtons
val in_newtons : int -> newtons
end
M.inc 1 (* type error *)
M.inc (in_newtons 1) (* this works *)
The use of hidden types in OCaml gives far better control over encapsulation and implementation hiding than any over language I've used. |
|