of the early versions of the pixel shader languages embedded in Direct3D and OpenGL extensions. In total functional programming languages, such as Charity and Epigram, all functions are total and must terminate. Charity uses a type system and control constructs based on category theory, whereas Epigram uses dependent types. The LOOP language is designed so that it computes only the functions that are primitive recursive. All of these compute proper subsets of the total computable functions, since the full set of total computable functions is not computably enumerable. Also, since all functions in these languages are total, algorithms for recursively enumerable sets cannot be written in these languages, in contrast with Turing machines. Although (untyped) lambda calculus is Turing-complete, simply typed lambda calculus is not. See also AI-completeness Algorithmic information theory Chomsky hierarchy Church–Turing thesis Computability theory Inner loop Loop (computing) Machine that always halts Rice's theorem smn theorem Structured program theorem Turing tarpit Virtualization Emulation (computing) Notes References Further reading External links Theory of computation Turing machine Programming language theory