boxy types inference for higher rank types and
play

Boxy types: Inference for higher-rank types and impredicativity - PowerPoint PPT Presentation

Boxy types: Inference for higher-rank types and impredicativity Dimitrios Vytiniotis 1 Simon Peyton Jones 2 Stephanie Weirich 1 1 Computer and Information Science Department University of Pennsylvania 2 Microsoft Research Kalvi, October 2005 D


  1. Boxy types: Inference for higher-rank types and impredicativity Dimitrios Vytiniotis 1 Simon Peyton Jones 2 Stephanie Weirich 1 1 Computer and Information Science Department University of Pennsylvania 2 Microsoft Research Kalvi, October 2005 D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  2. Introduction Semantics of Boxy Types Conclusion and Future Work Future of FP What will the type system of future functional programming languages look like? ◮ GADTs ◮ Poymorphic recursion ◮ Higher-rank ◮ Impredicativity ◮ Type-level lambdas ◮ Equi-recursive types ◮ Effects ◮ Dependent types How can we reconcile HM-type inference with all of these? D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  3. Introduction Semantics of Boxy Types Conclusion and Future Work Future of FP What will the type system of future functional programming languages look like? ◮ GADTs ◮ Poymorphic recursion ◮ Higher-rank ◮ Impredicativity ◮ Type-level lambdas ◮ Equi-recursive types ◮ Effects ◮ Dependent types How can we reconcile HM-type inference with all of these? And should we? (If not, this is the end of the talk.) D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  4. Introduction Semantics of Boxy Types Conclusion and Future Work Programming in System F There is a good chance that future programming languages will be based on System F . Type inference for System F lacks principal types. For some terms, there is no “best” type D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  5. Introduction Semantics of Boxy Types Conclusion and Future Work Programming in System F There is a good chance that future programming languages will be based on System F . Type inference for System F lacks principal types. For some terms, there is no “best” type Two choices: ◮ Enrich type system ◮ Require user annotation to disambiguate D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  6. Introduction Semantics of Boxy Types Conclusion and Future Work Our proposal Boxy types: ◮ An extension of Haskell with higher-rank and impredicative polymorphism. ◮ Basic idea: propagate type annotations and contextual information using local type inference. ◮ Single pass, unlike R´ emy’s stratified type inference. D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  7. Introduction Semantics of Boxy Types Conclusion and Future Work Goals Design goal: ◮ Type check all Haskell code (use unification for monotypes) ◮ Not too fancy: use annotations for polytypes ◮ Reach all of System F ◮ Use annotations to mark polymorphic instantiations and generalizations ◮ Compilation to System F (GHC core language) D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  8. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Boxy Types Idea: Make the type checker understand about “partially known and partially unknown types” ◮ Combine Γ ⊢ ↑ e : ρ and Γ ⊢ ↓ e : ρ into single judgment form: Γ ⊢ e : ρ ′ . ∀ a .ρ ′ | σ σ ′ ::= σ ::= ∀ a .ρ σ ′ → σ ′ | ρ | τ ::= σ → σ | τ ρ ′ ::= ρ τ ::= a | τ → τ ◮ Constraints: No nested boxes, no quantified vars free inside boxes, no boxes in the type context. ◮ Reminiscent of coloured local type inference (Odersky, Zenger, and Zenger, 2001). D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  9. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption By-reference parameters Typing judgment form: Γ ⊢ e : ρ ′ . ◮ Boxes in ρ ′ are filled in by the algorithm during this call by the type checker. The rest of ρ ′ is checkable information. ◮ The specification includes the appropriate types that are the “output” of the algorithm. ◮ If a box meets known information somewhere in the specification, then it may be filled in by a polytype. ◮ If not, the box is filled in by a guessed monotype. Examples: ◮ Completely inference : Γ ⊢ t : ρ ◮ Completely checking : Γ ⊢ t : ρ D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  10. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Typing rules ◮ Typing rules are syntax-directed: instantiation occurs at variable occurrences, and generalization at let expressions. Γ ⊢ u : ρ ⊢ σ ≤ ρ ′ x : σ ∈ Γ a = ftv ( ρ ) − ftv ( Γ ) var let Γ ⊢ x : ρ ′ Γ, x : ∀ a .ρ ⊢ t : ρ ′ Γ ⊢ let x = u in t : ρ ′ ◮ A lot of trickyness in ≤ , we’ll get to that. ◮ Unbox ρ in let. D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  11. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Application typing rules Γ ⊢ t : σ → ρ ′ Γ ⊢ t : ρ ′ poly u : σ a / ∈ ftv ( Γ ) Γ ⊢ app gen1 poly t : ∀ a .ρ ′ Γ ⊢ t u : ρ ′ Γ ⊢ ◮ Check the function argument type (possibly polymorphic). ◮ More to come for ⊢ poly . D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  12. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Type annotations Type annotations let us introduce unboxed polytypes. Γ ⊢ poly u : σ Γ, x : σ ⊢ t : ρ ′ siglet let x :: σ = u in t : ρ ′ ◮ Note: type annotations do not contain boxes ◮ This rule has been simplified, in the full system we support lexically-scoped type variables. D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  13. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Abstraction rules ⊢ σ ′ 1 ∼ σ 1 Γ ⊢ ( λ x . t ) : σ 1 → σ 2 poly t : σ ′ Γ, x : σ 1 ⊢ abs1 abs2 2 Γ ⊢ ( λ x . t ) : σ 1 → σ 2 Γ ⊢ ( λ x . t ) : σ ′ 1 → σ ′ 2 Γ ⊢ t : ρ gen2 poly t : ρ Γ ⊢ ◮ Note higher rank ◮ The relation ∼ is boxy-matching . ◮ Don’t generalize in inference mode. D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  14. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Boxy matching ◮ The two types complement eachother. ◮ Symmetric, but not reflexive or transitive. ◮ For monotypes, an equivalence relation. ◮ Walk down structure of type, filling in holes on either side. Examples: ⊢ ∀ a . a → a ∼ ∀ a . a → a ⊢ ∀ a . a → a → ∀ a . a → a ∼ ( ∀ a . a → a ) → ∀ a . a → a �⊢ ∀ a . a → a ∼ ∀ a . a → a ⊢ Int ∼ Int ⊢ Int → Int ∼ Int → Int D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  15. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption Boxes for impredicativity Recall the rule for variables. ⊢ σ ≤ ρ ′ x : σ ∈ Γ var Γ ⊢ x : ρ ′ Suppose that f : ∀ a . a → a in the context. Then our goal is: Γ ⊢ f : τ → τ but not Γ �⊢ f : σ → σ On, the other hand we should be able to check arbitrary polytypes : Γ ⊢ f : σ → σ So we want: ∀ a . a → a ≤ τ → τ ∀ a . a → a �≤ σ → σ ∀ a . a → a ≤ σ → σ D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  16. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption More Examples of subsumption ◮ Guess monotype instantiations: ⊢ ∀ a . a → a ≤ Int → Int ⊢ ∀ a . a → a ≤ Int → Int D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  17. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption More Examples of subsumption ◮ Guess monotype instantiations: ⊢ ∀ a . a → a ≤ Int → Int ⊢ ∀ a . a → a ≤ Int → Int ◮ Even in result type of functions: ⊢ ( ∀ ab . a → b ) → ( ∀ a . a → a ) ≤ ( ∀ ab . a → b ) → ( Int → Int ) D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  18. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption More Examples of subsumption ◮ Guess monotype instantiations: ⊢ ∀ a . a → a ≤ Int → Int ⊢ ∀ a . a → a ≤ Int → Int ◮ Even in result type of functions: ⊢ ( ∀ ab . a → b ) → ( ∀ a . a → a ) ≤ ( ∀ ab . a → b ) → ( Int → Int ) ◮ Pull quantifiers out: ⊢ Int → ∀ a . a → a ≤ ∀ a . Int → a → a D Vytiniotis, S Peyton Jones, S Weirich Boxy types

  19. Introduction Typing rules Semantics of Boxy Types Boxy matching Conclusion and Future Work Subsumption More Examples of subsumption ◮ Guess monotype instantiations: ⊢ ∀ a . a → a ≤ Int → Int ⊢ ∀ a . a → a ≤ Int → Int ◮ Even in result type of functions: ⊢ ( ∀ ab . a → b ) → ( ∀ a . a → a ) ≤ ( ∀ ab . a → b ) → ( Int → Int ) ◮ Pull quantifiers out: ⊢ Int → ∀ a . a → a ≤ ∀ a . Int → a → a ◮ Require guessed polytypes to meet known information: �⊢ ∀ a . a → a ≤ ∀ a . a → a ⊢ ∀ a . a → a ≤ ∀ a . a → a D Vytiniotis, S Peyton Jones, S Weirich Boxy types

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend