The OCaml code again
I'm posting a slight variation of the OCaml code that I think better shows what I like about the ML version.
module MkPerson(O: sig
type xString
type xDouble
val opConcat : xString -> xString -> xString
val opShow : xDouble -> xString
end) =
struct
open O
type person = Person of (xString * xString * xDouble)
let display (Person (firstName, lastName, height)) =
opConcat firstName (opConcat lastName (opShow height))
end
module BasicPerson = MkPerson(struct
type xString = string
type xDouble = float
let opConcat = (^)
let opShow = string_of_float
end)
open BasicPerson
let _ =
let p = Person ("Stefan", "Wehr", 184.0)
in display p
Note how the open O opens the argument to the MkPerson functor and all the values and types from the argument is in scope in the rest of the module. There's no need to change lots of code in MkPerson.
Similarely, the open BasicPerson makes the operations from that module avaiable, so that Person and display can be used in a simple way.
Labels: Haskell, Modules, OCaml, overloading

0 Comments:
Post a Comment
<< Home