In the past decade, numerous attempts have been made to combine functional languages and logic languages into a single framework. But, there have been few languages which are both efficient enough to be widely used in many applications and mathematically clear. Some languages such as LOGLISP and POPLOG emphasize efficiency and the ease of developing programs without concerning about the denotational semantics of the combination. Hence, these languages are hardly considered to be logical extensions of LISP or Prolog. On the other hand, some languages such s Eqlog are mathematically clear, but very inefficient mainly owing to their complete inference rules. This thesis aims at designing a typed functional logic language, called Tyflog. To achieve efficiency, Canonical unification is introduced as kind of E-unification algorithm to evaluate functions in a given equational theory. Based on Canonical unification, SLDC-resolution (SLD-resolution with Canonical unification) is presented as the run-time computation rule of Tyflog. The functional logic part of Tyflog has two denotational semantics based on the extended Herbrand universe. Furthermore, SLDC-refutation is proved to be sound and complete with respect to these denotational semantics. Tyflog also provides polymorphic typing and detects type errors at compile time. Therefore, it can help reduce type errors which may otherwise appear at run time and delay software development process. These features make Tyflog suitable for a specification language.