Better handling of free type variables and more of OCaml's List module