FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Polymorphic type inference and abstract data types
ACM Transactions on Programming Languages and Systems (TOPLAS)
Prolog: the standard: reference manual
Prolog: the standard: reference manual
Term rewriting and all that
Journal of the ACM (JACM)
Type-based nondeterminism checking in functional logic programs
Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming
An Efficient Unification Algorithm
ACM Transactions on Programming Languages and Systems (TOPLAS)
Functional and constraint logic programming
Constraints in computational logics
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed Higher-Order Narrowing without Higher-Order Strategies
FLOPS '99 Proceedings of the 4th Fuji International Symposium on Functional and Logic Programming
Denotational Abstract Interpretation of Functional Logic Programs
SAS '97 Proceedings of the 4th International Symposium on Static Analysis
TOY: A Multiparadigm Declarative System
RtA '99 Proceedings of the 10th International Conference on Rewriting Techniques and Applications
Optimal Non-deterministic Functional Logic Computations
ALP '97-HOA '97 Proceedings of the 6th International Joint Conference on Algebraic and Logic Programming
Canonical Forms and Unification
Proceedings of the 5th Conference on Automated Deduction
Constructor-based conditional narrowing
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Communications of the ACM
Multi-paradigm declarative languages
ICLP'07 Proceedings of the 23rd international conference on Logic programming
Rewriting and call-time choice: the HO case
FLOPS'08 Proceedings of the 9th international conference on Functional and logic programming
Type classes in functional logic programming
Proceedings of the 20th ACM SIGPLAN workshop on Partial evaluation and program manipulation
Liberal typing for functional logic programs
APLAS'10 Proceedings of the 8th Asian conference on Programming languages and systems
Transforming functional logic programs into monadic functional programs
WFLP'10 Proceedings of the 19th international conference on Functional and constraint logic programming
New results on type systems for functional logic programming
WFLP'09 Proceedings of the 18th international conference on Functional and Constraint Logic Programming
Transparent function types: clearing up opacity
Proceedings of the 14th symposium on Principles and practice of declarative programming
Typing as functional-logic evaluation
PEPM '13 Proceedings of the ACM SIGPLAN 2013 workshop on Partial evaluation and program manipulation
Hi-index | 0.00 |
Narrowing is the usual computation mechanism in functional-logic programming (FLP), where bindings for free variables are found at the same time that expressions are reduced. These free variables may be already present in the goal expression, but they can also be introduced during computations by the use of program rules with extra variables. However, it is known that narrowing in FLP generates problems from the point of view of types, problems that can only be avoided using type information at run-time. Nevertheless, most FLP systems use static typing based on Damas-Milner type system and they do not carry any type information in execution, thus ill-typed reductions may be performed in these systems. In this paper we prove, using the let-narrowing relation as the operational mechanism, that types are preserved in narrowing reductions provided the substitutions used preserve types. Based on this result, we prove that types are also preserved in narrowing reductions without type checks at run-time when higher order (HO) variable bindings are not performed and most general unifiers are used in unifications, for programs with transparent patterns. Then we characterize a restricted class of programs for which no binding of HO variables happens in reductions, identifying some problems encountered in the definition of this class. To conclude, we use the previous results to show that a simulation of needed narrowing via program transformation also preserves types.