This paper proposes a methodology to manipulate the database state in a non-strict, purely functional programming language. The primary target is Haskell, which is the standard for such programming languages and has been known for its use of a state-transformer monad to handle input/output operations and the type class mechanism to incorporate ad hoc polymorphism. The main contribution of this paper is to address and propose solutions to the key issues of making the lanaguage persistent. While the state-transformer monad naturally structures state-based operations, it complicates programming tasks because of the explicit single-threadedness. To lessen this inherent burden of the programming tasks, the proposed method makes use of explicit versioning of the database state, which can be retrieved lazily, even though the primary database state is updated destructively. The ability of multiple state manipulation naturally extends to view maintenance, exception handling, and support for the "what-if" semantics of execution. In addition to this feature, persistent roots are identified by their types instead of by their str\
ing- or variable-names. This allows every expression, even including root manipulation, to be typed statically. The supported programming environment also provides programmers with "hooks" to customize primitive operations, and can be generalized to support transaction-boundary rule firing.