I'm new to OCaml so please bear with me. As a practice, I implemented the solution to problem 54 of Project Euler (poker hands). * The original problem https://projecteuler.net/problem=54 * The solution: - https://github.com/bahmanm/euler-ml/blob/master/src/p54.mli - https://github.com/bahmanm/euler-ml/blob/master/src/p54.ml - https://github.com/bahmanm/euler-ml/blob/master/test/test_p54.ml I have 2 questions and 1 favour to ask :-) Q1 == To limit the values possible for a card's actual value, I defined `Value` module (line 6) which basically maps a variant to integer values. Is this the idiomatic approach? Is there something like Java's enum or Pascal's subranges that I could use[1]? Q2 == Suppose that I wrote this piece of code as a library to be used by others as well. In such a case, practically the only function that the users are interested in is `solve`, as defined in the .mli file. This is good: keeps my library clean, the usage straight-forward and doesn't confuse the users. However, when it comes to testing, things are not that simple. Now that I have exported only 1 function in the .mli, I can only test that 1 function. Is this the proper way[2]? Favour ====== I'd be really grateful if somebody would spend some of her/his precious time and took a look at the code that I wrote, just to give me broad pointers how this can be improved or be more idiomatic. [1] I noticed Batteries bounded types, but when I used it, it felt like an overkill for my purpose. [2] I know this is a rather general question and the same question can be applied to any other language. However some languages, such as D, let you write unit tests next to the main code - or many OO languages have the visibility modifier which can help. -- Caml-list mailing list. Subscription management and archives: https://sympa.inria.fr/sympa/arc/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs