Jak wziąć produkt z dwóch list w OCaml?

Mam dwie listy:

let a = ["a";"b"];
let b = ["c";"d"];

Chcę listę wyjściową c, taką jak:

c = ["a";"c";"a";"d";"b";"c";"b";"d"];

Jak to zrobić w ocamlu, ponieważ listy są niezmienne? Jestem nowy w tym.