A key difference from OCaml's modules (besides the lack of type parameterization) is Liskov's data types have associated data. So it's more like Rust's structs. Also, like in Rust, there is no support for multiple implementations of a single signature.