abstract data type adapter pattern arity assembly language automated theorem proving caml common language runtime common lisp compiler concurrent ml currying dependent ml discrete wavelet transform eml emacs extended ml factorial generic programming haar wavelet imperative programming integer mlton machine epsilon merge sort moscow ml multi-paradigm programming language objective caml operational semantics pattern matching poplog programming language implementation programming paradigm prolog read-eval-print loop standard ml of new jersey tail recursion type inference type system