1) J'ai ce type de moduleComment faire correspondre sur les constructeurs de types de données abstraites OCAML
module type MOD_SIG = sig type t val min val max;;
2) Je crée deux modules basés sur la signature ci-dessus
module MOD_UINT8 = struct
type t = int32
let min = Int32.of_int 0
let max = Int32.of_int 255 end;;
module MOD_UINT32 = struct
type t = int64
let min = Int64.zero
let max = Int64.of_int 4294967295 end ;;
3) J'ai créé modules de première classe de 2
let uint_8 = (module MOD_UINT8:MOD_SIG);;
let uint_32 = (module MOD_UINT32:MOD_SIG);;
4) Je veux écrire une fonction qui accepte un module de premier ordre en tant que arg et tente de ma tch si une valeur particulière dans ce module était de Int32
ou Int64
.
tels que
let module M=(val m:MOD_SIG) in match M.t with
| Int32 -> "Int32"
| Int64 -> "Int64"
I appris de @octachron qu'il ne soit pas possible. Bien que je voulais juste soulever cette question pour comprendre, s'il pourrait y avoir une solution de contournement?
Pourriez-vous, s'il vous plaît, utiliser les outils de balisage pour mettre en évidence les blocs de code? En l'état, votre question est complètement illisible. – soupault
N'oubliez pas d'accepter les réponses si elles répondent correctement à votre question, cela permet aux gens de savoir que cette question est résolue. – Lhooq