Domain-Theoretic Foundations of Functional Programming by Thomas Streicher