An operational and a minimal model semantics for logic programming modules is introduced. It is shown that this semantics corresponds to the recursion theoretic notion of enumeration operator. Basic operations on modules, such as composition and recursion, are discussed. The adequacy of these operations is established by showing that all logic programming can be done, in principle, by combining certain elementary modules using these basic operations.