> Where the extension character is shift+number of bytes (at least on my > keyboard...) I'm a bit worried that it'll start> looking like Perl, but time will tell. Personally, I would go with something like: module B1 = struct let ( .%{ } ) = get_1byte_int end module B2 = struct let ( .%{ } ) = get_2byte_int end module B4 = struct let ( .%{ } ) = get_4byte_int end module B8 = struct let ( .%{ } ) = get_8byte_int end Which gives you similar convenience: foo.B1.%{index} foo.B2.%{index} foo.B4.%{index} foo.B8.%{index} without drifting into Perl territory. Regards, Leo