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 solution: 
    
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.