  Since the early work of Church on $\lambda$I-calculus and Gentzen on
structural rules, the control of variable use has gained an important role in
computation and logic emerging different resource aware calculi and
substructural logics with applications to programming language and compiler
design. This paper presents the first formalization of variable control in
calculi with implicit names based on de Bruijn indices. We design and implement
three calculi: first, a restricted calculus with implicit names; then, a
restricted calculus with implicit names and explicit substitution, and finally,
an extended calculus with implicit names and resource control. We propose a
novel concept of L-types, which are used (a) to define terms and (b) to
characterize certain classes of terms in each of the presented calculi. We have
adopted to work simultaneously on the design and implementation in Haskell and
Agda. The benefit of this strategy is twofold: dependent types enable to
express and check properties of programs in the type system and constructive
proofs of preservation enable a constructive evaluator for terms (programs).
