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 pNote 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.
No comments:
Post a Comment