Semantic Model (part 3) We will embed the variable model directly in Ocaml semantics Makefile string Ocaml list with single string Makefile variable Ocaml function returning flattened list Makefile variable reference Ocaml function call There is an obscure type-inference reason why functions are used here instead of variables. When in doubt, try it with functions. Example Makefile Fragment: doggies = dingo.o poodle.o animals = llama.o $(doggies) loris.o ... Becomes Ocaml Functions: let rec doggies _ = List.flatten [["dingo.o"]; ["poodle.o"]] and animals _ = List.flatten [["llama.o"]; doggies (); ["loris.o"]] ...