Reputation: 944
For a class project I am writing a program that evaluates the performance of different implementations of the same abstract data structure. Since I am using identical code to test each of them, I would like to be able to set a module alias depending on user input and just run that module through the testing code.
In other words, I want something like:
let module M =
if model = "tree" then TreeModel else
if model = "hash" then HashModel else
ListModel
in ...
Is there a way I can make this work, or am I going about this all wrong?
Upvotes: 12
Views: 555
Reputation: 1241
As a follow-up to @Andreas, at least in recent ocaml versions you can also write:
let (module M : MODEL) = match model with
| "tree" -> (module TreeModel : MODEL)
| "hash" -> (module HashModel : MODEL)
| "list" -> (module ListModel : MODEL)
in ...
Upvotes: 1
Reputation: 36098
There are no conditionals on the module level, but you can use first-class modules for this:
let m = match model with
| "tree" -> (module TreeModel : MODEL)
| "hash" -> (module HashModel : MODEL)
| "list" -> (module ListModel : MODEL)
in let module M = (val m : MODEL)
in ...
Upvotes: 14