Constructor-Based Conditional Rewriting Logic is a general framework for integrating
first-order functional and logic programming which gives an algebraic semantics for nondeterministic
functional-logic programs. In the context of this formalism, we introduce a
simple notion of program module as an open program which can be extended together
with several mechanisms to combine them. These mechanisms are based on a reduced set of
operations. However, the high expressiveness of these operations enable us to model typical
constructs for program modularization like hiding, export/import, genericity/instantiation,
and inheritance in a simple way. We also deal with the semantic aspects of the proposal by
introducing an immediate consequence operator, and studying several alternative semantics
for a program module, based on this operator, in the line of logic programming: the operator
itself, its least fixpoint (the least model of the module), the set of its pre-fixpoints (term
models of the module), and some other variations in order to find a compositional and fully
abstract semantics w.r.t. the set of operations and a natural notion of observability.