A type-directed compiler from an ML like language to LLVM