120 likes | 339 Views
Simple Type Inference for Structural Polymorphism. Jacques Garrigue Type Refinements Seminar. Motivation. HM (X) used to explain structural polymorphism Assume subtyping absent HM(X) is not a simple extension to previous algorithms Constraints occur in all types
E N D
Simple Type Inference for Structural Polymorphism Jacques Garrigue Type Refinements Seminar
Motivation • HM (X) used to explain structural polymorphism • Assume subtyping absent • HM(X) is not a simple extension to previous algorithms • Constraints occur in all types • Type errors become unreadable
Proposed Solution • Have “local constraints” : constraints on top of classic Hindley-Milner system • Constraints embedded in kinding context for type variables • Less powerful than HM(X)
Type System • Types ::= | u | ! • Kind envs K ::= | K, :: (C,9.R) • Polytypes ::= | 8.K .
Free Variables of Types • FVK(81,,n.K’ . ) = FVK,K’()\{1,,n} • FVK,:(C,9 .R) () = {}[ FVK(R) • FVK(u) = • FVK(1!2) = FVK(1)[ FVK(2)
Type Substitutions • K `:K’ ( is admissible between K and K’) If for all ::(C,9.R) 2 K, () is ’ • ’::(C’,9’ R’) 2 K’ • C’ ² C • : !’ s.t. ( R)µ R exists
Typing Rules K,K0` : K Dom ()½ B K;,x:8 B.Ko. ` x:() K;,x:` e:’ K;` fun x ! e : !’ K;` e1:!’ K;` e2: K;` e1 e2 : ’
Typing Rules (contd.) K;` e1 : K;, x:` e2 : K;` let x = e1 in e2 : K; ` e : B = FVK() \ FVK () K|B; ` e : 8 B.K|B. Gen
Compare with HM (X) K;` e : B = (FV () [ FV(KB) ) FV () 9 B.K;` e : 8 B.KB. KBµ K containing all kinds related to B Generalizes over tyvars not “relevant” HMX-Gen
Relevant type variable • Technical definition in paper • Basically, the meaning of the type depends on what kind the variable gets • Recall, kinds include constraints • Useful to understand constraints/ type errors
Benefits • Easier understanding of constraints • e.g. If FVK(1) [ FVK(2), solving K Æ1 = 2 does not give us more information about
Conclusions • Less powerful than HM (X) : no subtyping • Gives less precise answers • More practical (??) • Sufficient for most purposes