Shared Subtypes. Subtyping Recursive Parameterized Algebraic Data Types
|
|
- Louisa Paul
- 5 years ago
- Views:
Transcription
1 Shared Subtypes Subtyping Recursive Parameterized Algebraic Data Types Ki Yung Ahn Tim Sheard Department of Computer Science Maseeh College of Engineering & Computer Science ACM SIGPLAN 2008 Haskell Symposium 1
2 Background Subtype Polymorphism in OOPL (Object Oriented Programming Language) In Java, String readline(intputstream s) Parametric Polymorphism in FPL In Haskell, 2
3 Subtype Polymorphism Subtype Polymorphism in OOPL In Java, String readline(intputstream s) Can call this function any subtype of InputStream 3
4 Parametric Polymorphism Parametric Polymorphism in FPL In Haskell, We can apply this function on ANY list 4
5 Some History Lack of Parametric Polymorphism in OOPLs was quite a pain. So, most major OOPLs finally decided to extend their language Templates in C++, Generics in Java / C# FPLs, especially Haskell, lived happily without Subtypes because of Type Classes (somewhat like abstract interfaces, but more flexible) 5
6 Shared Subtypes In abbr. SSubtypes = Shared Subtypes Subtyping by sharing representations Newtypes and now SSubtypes While OO subtyping by consistent interface We can use SSubtypes when we want to Restrict number of data constructors Ensure static properties using type indexes reuse library without efficiency loss Relatively small changes to type system 6
7 Why Subtype in FPL? Well, not the good old subtyping in OOPLs Haskell can mimic dynamic subtyping (sharing interface) using type classes See Oleg & Ralf's OOHaskell library But a different one namely Shared Subtypes static subtyping (sharing the structure) can be quite useful in FPLs too! 7
8 Example 8
9 Example 9
10 Example 10
11 Example 11
12 Example (x3 ) Co de D up lica tio n!!! 12
13 What's the Problem? Both Even (even natural numbers) and Odd (odd natural numbers) are subsets of Nat (all natural numbers) But, Haskell and many other FPLs do not have language feature that can express this idea of subtyping directly 13
14 Idea (Shared Subtypes) 14
15 Is this really important? Even and Odd unary numbers may not sound very interesting to you But, this same problem can happen for more complex and realistic data structures such as lists and trees, as we shall see soon 15
16 Is this really important? System Data Library 16
17 Is this really important? System Data Safe Module Library 17
18 Is this really important? System Data Safe Data Safe Module Library 18
19 Is this really important? System Data Safe Data Safe Module Library duplication Library 19
20 Is this really important? System Data Safe Data Safe Module Safe Data conversion overhead Data Library duplication Library 20
21 Yes, it is really important! If we had Shared Subtypes... System Data Safe Data Safe Module Library reuse necessary check Safe Data Data at no cost Library 21
22 Shared Subtypes In abbr. SSubtypes = Shared Subtypes Subtyping by sharing representations Newtypes and now SSubtypes While OO subtyping by consistent interface We can use SSubtypes when we want to Restrict number of data constructors Ensure static properties using type indexes reuse library without efficiency loss Relatively small changes to type system 22
23 What do we do when two types share a common representation Subset Isomorphic common functions Inch 1.0 in, 2.0 in,... Exp 1+2, 2-3,... Term 4*5, 5/6...,, ==,... In Haskell: newtype Inch = Inch Double common functions eval, size, hight,... Not in Haskell: (until now) data Exp =... data Term < Exp =... 23
24 Motivation T U T U share T and U s representation share T and U s representation declare T as newtype of U? 24
25 Motivation T U T U share T and U s representation declare T as newtype of U share T and U s representation declare T as shared subtype of U 25
26 Shared Subtypes In abbr. SSubtypes = Shared Subtypes Subtyping by sharing representations Newtypes and now SSubtypes While OO subtyping by consistent interface We can use SSubtypes when we want to Restrict number of data constructors Ensure static properties using type indexes reuse library without efficiency loss Relatively small changes to type system 26
27 Newtypes 27
28 Newtypes Code Reuse without conversion overhead 28
29 Newtype Summary 29
30 Subtyping by Refinement We can Partition a type (e.g. lists) into subsets (e.g. empty lists and filled lists) Each subset is a subtype Possible with GADTs and type indexes [Int] [] :: [Int] [1] :: [Int] [1,2] :: [Int]... 30
31 Subtyping by Refinement We can Partition a type (e.g. lists) into subsets (e.g. empty lists and filled lists) Each subset is a subtype Possible with GADTs and type indexes List Int e Nil :: List Int Empty Cons 1 Nil :: List Int Filled Cons 1 (Cons 2 Nil) :: List Int Filled... 31
32 GADT = Generalized ADT We can express any ADT as GADT 32
33 The GADT (List a e) With GADTs, we can define richer types by using different type indexes in the result types of data constructors 33
34 The GADT (List a e) With GADTs, we can define richer types by using different type indexes in the result types of data constructors 34
35 Values of (List a e) 35
36 Relating (List a e) and 36
37 Relating (List a e) and 37
38 Subtyping GADT Summary 38
39 Subtyping GADT Summary Subtype rule Sharing rules 39
40 Comparison Newtypes Nt, Nv Subtyping (G)ADTs are bijections Language Feature!!! St, Sv are injections Just a CONCEPT (until now!) 40
41 Options in Haskell 1st option(code Reuse) Conversion function that satisfies St and Sv Problem: O(n) conversion overhead 2nd option (Efficiency) Define library functions for GADTs all again Problem: code duplication 41
42 Dilemma lose efficiency because of conversion overhead Code Reuse lose code reuse writing same functions for each type Efficiency 42
43 Features of Shared Subtypes We must specify both subtype rule (types) sharing rules (constructors) Check consistency not all SSubtype declaration make sense We share representation (like newtypes) We have implicit coercion (newtypes are explicit) SSubtypes form hierarchy (as in OO) Efficient code sharing and library reuse 43
44 SSubtype Syntax for GADT 44
45 SSubtype Syntax for GADT 45
46 SSubtype Syntax for GADT Subtype rule Sharing rules 46
47 Code Reuse for SSubtype We can reuse library function on lists Values of [a] Values of List a e 47
48 Code Reuse for SSubtype Subtype rule Code Reuse Sharing rules 48
49 Consistency of SSubtypes Not all SSubtype declaration make sense Example: sharing between different arities What are the criteria for consistency? And, how shall we check them? 49
50 Consistency of SSubtypes Not all SSubtype declaration make sense Example: sharing between different arities What are the criteria for consistency? And, how shall we check them? 50
51 Consistent SSubtype decl's No cycles in SSubtype hierarchy Cycle means equivalence (T U T U T=U) Newtype is the feature for equivalent types No two subtype data constructors can share the same supertype constructor Sharing rules are consistent with the subtype rule (see next slide) No higher order types (no function args) additional restriction at present (future work) 51
52 Sharing rules are consistent with Subtype rule Related data constructors must have same arity Argument types and result types must be in subtype relation (+reflexivity for args) We don t worry about contravariance at present because we don t have higher order types yet 52
53 Sharing rules are consistent with Subtype rule Related data constructors must have same arity Argument types and result types must be in subtype relation (+reflexivity for args) 53
54 Consistent SSubtype decl' Related data constructors must have same arity Argument types and result types must be in subtype relation (+reflexivity for args) 54
55 SSubtype Syntax for ADT Since Term is a SSubtype of Exp, we can reuse functions defined on Exp for Term. 55
56 SSubtype Syntax for ADT If we have eval :: Exp Int then eval (Const 2 `Times` Const 3) 6 56
57 SSubtype Syntax for ADT If we have eval :: Exp Int then eval (Const 2 `Times` Const 3) 6 :: Term 57
58 Finite Subsets of Integers Foreign Function Interface can be both safe and efficient using SSubtypes Related Feature: F# enum types are just for this purpose to interact with.net 58
59 Example from FPH (ICFP'08) by Dimitrios Vytiniotis, Stephanie Weirich, and Simon Peyton Jones Syntax of Types in the paper 59
60 Example from FPH (ICFP'08) by Dimitrios Vytiniotis, Stephanie Weirich, and Simon Peyton Jones Syntax of Types in the paper Rank N Type Rank N Type 60
61 Example from FPH (ICFP'08) by Dimitrios Vytiniotis, Stephanie Weirich, and Simon Peyton Jones Syntax of Types in the paper Starting with forall Rank N Type Not starting with forall Not containing any foralls 61
62 ) C re od fe e (w re sn ith nc ip sli e i pet gh m t s ple fro im m m pl e t ifi nt he ca at ir tio io n n Example from FPH (ICFP'08) Rank N Type 62
63 SSubtype Hierarchy for FPH Rank N Type 63
64 Limitations We may lose some static properties when we reuse the functions on the supertype map :: (a b) [a] [a] map id (Cons 0 Nil) :: [Int] not List a Filled map id Nil :: [Int] not List a Empty In order to preserve such static properties, we have to write such functions again maplist :: (a b) List a e List b e maplist f Nil = Nil maplist f (Cons x xs) = Cons x (maplist f xs) 64
65 Related Work Language Features Datatype Subtyping in O Haskell (Nordlander) Refinement Types (Freeman & Pfenning) Theory Subtyping Recursive Types (Amadio & Cardelli) Implicit Calculus of Constructions (Miquel) 65
66 Related Work Language Features Datatype Subtyping in O Haskell (Nordlander) Similar syntax and idea with SSubtypes Extends existing ADTs (c.f. SSubtype restricts) Shares constructor names between related types Does not cover recursive types or GADTs 66
67 Related Work Language Features Refinement Types (Freeman & Pfenning) Based on intersection types More powerful than subtyping (e.g. map, ++) Types can get bulky Separate compilation is questionable Polymorphic variants are related to this too 67
68 Related Work Theory Subtyping Recursive Types (Amadio & Cardelli) Build types from ground types using,, Recursive type equation using notation Our work conforms to the rules in their work 68
69 Related Work Theory Implicit Calculus of Constructions (Miquel) Defines subtype relation as a Macro Data constructors are encoded as terms, and subtype relation means that these terms coincide SSubtype restores this lost relation in (G)ADTs 69
70 Future Work (G)ADTs containing higher order values relax from Contravariance Free types to Variance Consistent types Complete proof that covers all uses Harmonize SSubtypes with Type Classes Possibility of adopting O'Haskell features Non variable parameters in subtype rules Implementation 70
71 Conclusion SSubtype is subtyping by sharing representations c.f. Usual subtyping (as in OO) is by sharing interface of different representation We can use SSubtypes when we want to Restrict number of data constructors Ensure static property using type indexes reuse library without efficiency loss Separate compilation (tradeoff for the limitation) GADTs makes this idea more powerful 71
72 Thanks to Everyone in the Acknowledgment section in the paper. Also, those who gave useful comments on the practice talk (Andrew P. Black, Emerson Murphy Hill, Brian Huffman, Mark P. Jones). And, YOU for listening. Questions? 72
73 Name Sharing 73
74 SSubtype Hierarchy 74
75 SSubtype Hierarchy 75
76 Type Inhabitation ( 6.2) 76
Programming in Omega Part 1. Tim Sheard Portland State University
Programming in Omega Part 1 Tim Sheard Portland State University Tim Sheard Computer Science Department Portland State University Portland, Oregon PSU PL Research at Portland State University The Programming
More informationIA014: Advanced Functional Programming
IA014: Advanced Functional Programming 8. GADT Generalized Algebraic Data Types (and type extensions) Jan Obdržálek obdrzalek@fi.muni.cz Faculty of Informatics, Masaryk University, Brno Motivation IA014
More informationSimple Unification-based Type Inference for GADTs
Simple Unification-based Type Inference for GADTs Stephanie Weirich University of Pennsylvania joint work with Dimitrios Vytiniotis, Simon Peyton Jones and Geoffrey Washburn Overview Goal: Add GADTs to
More informationLecture 8: Summary of Haskell course + Type Level Programming
Lecture 8: Summary of Haskell course + Type Level Programming Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense October 31, 2017 Principles from Haskell
More informationGiving Haskell a Promotion
Giving Haskell a Promotion José Pedro Magalhães Joint work with Brent A. Yorgey Stephanie Weirich Julien Cretin Simon Peyton Jones Dimitrios Vytiniotis http://www.dreixel.net FP dag 2012, Universiteit
More informationSubtyping. Lecture 13 CS 565 3/27/06
Subtyping Lecture 13 CS 565 3/27/06 Polymorphism Different varieties of polymorphism: Parametric (ML) type variables are abstract, and used to encode the fact that the same term can be used in many different
More informationAdvanced Type System Features Tom Schrijvers. Leuven Haskell User Group
Advanced Type System Features Tom Schrijvers Leuven Haskell User Group Data Recursion Genericity Schemes Expression Problem Monads GADTs DSLs Type Type Families Classes Lists and Effect Free Other Handlers
More informationRecursive Types and Subtyping
Recursive Types and Subtyping #1 One-Slide Summary Recursive types (e.g., list) make the typed lambda calculus as powerful as the untyped lambda calculus. If is a subtype of then any expression of type
More informationAdvances in Programming Languages
T O Y H Advances in Programming Languages APL8: Multiparameter Type Classes, Constructor Classes Ian Stark School of Informatics The University of Edinburgh Thursday 4 February Semester 2 Week 4 E H U
More informationCSCI-GA Scripting Languages
CSCI-GA.3033.003 Scripting Languages 12/02/2013 OCaml 1 Acknowledgement The material on these slides is based on notes provided by Dexter Kozen. 2 About OCaml A functional programming language All computation
More informationStructural polymorphism in Generic Haskell
Structural polymorphism in Generic Haskell Andres Löh andres@cs.uu.nl 5 February 2005 Overview About Haskell Genericity and other types of polymorphism Examples of generic functions Generic Haskell Overview
More informationIdris, a language with dependent types Extended Abstract
Idris, a language with dependent types Extended Abstract Edwin Brady School of Computer Science, University of St Andrews, St Andrews, Scotland. Email: eb@cs.st-andrews.ac.uk. Tel: +44-1334-463253, Fax:
More informationProgramming Languages Lecture 15: Recursive Types & Subtyping
CSE 230: Winter 2008 Principles of Programming Languages Lecture 15: Recursive Types & Subtyping Ranjit Jhala UC San Diego News? Formalize first-order type systems Simple types (integers and booleans)
More informationType families and data kinds
Type families and data kinds AFP Summer School Wouter Swierstra 1 Today How do GADTs work? Kinds beyond * Programming with types 2 Calling functions on vectors Given two vectors xs : Vec a n and ys : Vec
More informationPart III. Chapter 15: Subtyping
Part III Chapter 15: Subtyping Subsumption Subtype relation Properties of subtyping and typing Subtyping and other features Intersection and union types Subtyping Motivation With the usual typing rule
More informationSimon Peyton Jones Microsoft Research August 2012
Simon Peyton Jones Microsoft Research August 2012 A functional language Purely functional Lazy Statically typed Designed 1988-1990 By a committee For research, teaching, and practical use Geeks Practitioners
More informationCoercion Quantification
Coercion Quantification Ningning Xie 1 Richard A. Eisenberg 2 22 Sept. 2018 Haskell Implementor s Workshop (HIW 18) 1 The University of Hong Kong 2 Bryn Mawr College 1 Motivation Motivation Our long-term
More informationGADTs. Wouter Swierstra and Alejandro Serrano. Advanced functional programming - Lecture 7. [Faculty of Science Information and Computing Sciences]
GADTs Advanced functional programming - Lecture 7 Wouter Swierstra and Alejandro Serrano 1 Today s lecture Generalized algebraic data types (GADTs) 2 A datatype data Tree a = Leaf Node (Tree a) a (Tree
More informationThe Algebra of Programming in Haskell
The Algebra of Programming in Haskell Bruno Oliveira The Algebra of Programming in Haskell p.1/21 Datatype Generic Programming - Motivation/Goals The project is to develop a novel mechanism for parameterizing
More informationThe design of a programming language for provably correct programs: success and failure
The design of a programming language for provably correct programs: success and failure Don Sannella Laboratory for Foundations of Computer Science School of Informatics, University of Edinburgh http://homepages.inf.ed.ac.uk/dts
More informationGADTs. Alejandro Serrano. AFP Summer School. [Faculty of Science Information and Computing Sciences]
GADTs AFP Summer School Alejandro Serrano 1 Today s lecture Generalized algebraic data types (GADTs) 2 A datatype data Tree a = Leaf Node (Tree a) a (Tree a) This definition introduces: 3 A datatype data
More informationPierce Ch. 3, 8, 11, 15. Type Systems
Pierce Ch. 3, 8, 11, 15 Type Systems Goals Define the simple language of expressions A small subset of Lisp, with minor modifications Define the type system of this language Mathematical definition using
More informationRecursive Types and Subtyping
Recursive Types and Subtyping #1 One-Slide Summary Recall: Recursive types (e.g., τ list) make the typed lambda calculus as powerful as the untyped lambda calculus. If τ is a subtype of σ then any expression
More informationBringing Functions into the Fold Tom Schrijvers. Leuven Haskell User Group
Bringing Functions into the Fold Tom Schrijvers Leuven Haskell User Group Data Recursion Genericity Schemes Expression Problem Rank-N Polymorphism Monads GADTs DSLs Type Type Families Classes Effect Free
More informationGADTs. Wouter Swierstra. Advanced functional programming - Lecture 7. Faculty of Science Information and Computing Sciences
GADTs Advanced functional programming - Lecture 7 Wouter Swierstra 1 Today s lecture Generalized algebraic data types (GADTs) 2 A datatype data Tree a = Leaf Node (Tree a) a (Tree a) This definition introduces:
More informationDepending on Types. Stephanie Weirich University of Pennsylvania
Depending on Types Stephanie Weirich University of Pennsylvania TDD Type- Driven Development with Dependent Types The Agda Experience On 2012-01- 11 03:36, Jonathan Leivent wrote on the Agda mailing list:
More informationTRELLYS and Beyond: Type Systems for Advanced Functional Programming
TRELLYS and Beyond: Type Systems for Advanced Functional Programming Aaron Stump Computer Science The University of Iowa Joint work with Tim Sheard, Vilhelm Sjöberg, and Stephanie Weirich. Supported by
More informationPart III Chapter 15: Subtyping
Part III Chapter 15: Subtyping Subsumption Subtype relation Properties of subtyping and typing Subtyping and other features Intersection and union types Subtyping Motivation With the usual typing rule
More informationAdvanced features of Functional Programming (Haskell)
Advanced features of Functional Programming (Haskell) Polymorphism and overloading January 10, 2017 Monomorphic and polymorphic types A (data) type specifies a set of values. Examples: Bool: the type of
More informationCSE-505: Programming Languages. Lecture 20.5 Recursive Types. Zach Tatlock 2016
CSE-505: Programming Languages Lecture 20.5 Recursive Types Zach Tatlock 2016 Where are we System F gave us type abstraction code reuse strong abstractions different from real languages (like ML), but
More informationRepresenting Cyclic Structures as Nested Datatypes. Makoto Hamana
Representing Cyclic Structures as Nested Datatypes Makoto Hamana Department of Computer Science, Gunma University, Japan Joint work with Neil Ghani Tarmo Uustalu Varmo Vene U. Nottingham U. Tallinn U.
More informationCSE Lecture 7: Polymorphism and generics 16 September Nate Nystrom UTA
CSE 3302 Lecture 7: Polymorphism and generics 16 September 2010 Nate Nystrom UTA 2 Polymorphism poly = many morph = shape Allow a variable to contain values with different types 3 Subtype polymorphism
More informationSemantic Subtyping with an SMT Solver
Semantic Subtyping with an SMT Solver Cătălin Hrițcu, Saarland University, Saarbrücken, Germany Joint work with Andy Gordon, Gavin Bierman, and Dave Langworthy (all from Microsoft) Refinement Types + Type-test
More informationCS-XXX: Graduate Programming Languages. Lecture 17 Recursive Types. Dan Grossman 2012
CS-XXX: Graduate Programming Languages Lecture 17 Recursive Types Dan Grossman 2012 Where are we System F gave us type abstraction code reuse strong abstractions different from real languages (like ML),
More informationLists. Michael P. Fourman. February 2, 2010
Lists Michael P. Fourman February 2, 2010 1 Introduction The list is a fundamental datatype in most functional languages. ML is no exception; list is a built-in ML type constructor. However, to introduce
More informationProving OCaml s type system? Jacques Garrigue Nagoya University
Proving OCaml s type system? Jacques Garrigue Nagoya University Jacques Garrigue Proving OCaml s type system? 1 What s in OCaml s type system Core ML with relaxed value restriction Recursive types Polymorphic
More informationLightweight Invariants with Full Dependent Types
Chapter 29 Lightweight Invariants with Full Dependent Types Edwin Brady 1, Christoph Herrmann 1, Kevin Hammond 1 Category: Position Paper Abstract: Dependent types allow a programmer to express invariant
More informationAlonzo a Compiler for Agda
Alonzo a Compiler for Agda Marcin Benke Institute of Informatics, Warsaw University, ben@mimuw.edu.pl 1 Introduction Agda [Norell, 2007] is an interactive system for developing constructive proofs in a
More informationCS 457/557: Functional Languages
CS 457/557: Functional Languages Lists and Algebraic Datatypes Mark P Jones Portland State University 1 Why Lists? Lists are a heavily used data structure in many functional programs Special syntax is
More informationEta-equivalence in Core Dependent Haskell
Eta-equivalence in Core Dependent Haskell You should machine-check your proofs Stephanie Weirich University of Pennsylvania Core Dependent Haskell A Specification for Dependent Types in Haskell Stephanie
More informationMendler-style Recursion Schemes for Mixed-Variant Datatypes
Mendler-style Recursion Schemes for Mixed-Variant Datatypes Ki Yung Ahn Tim Sheard Marcelo P. Fiore kya@cs.pdx.edu sheard@cs.pdx.edu Marcelo.Fiore@cl.cam.ac.uk TYPES 2013 Outline Mendler-style Recursion
More informationGADTs. GADTs in Haskell
GADTs GADTs in Haskell ADT vs GADT Algebraic Datatype Data List a = Nil Cons a (List a) Data Tree a b = Tip a Node (Tree a b) b Fork (Tree a b) (Tree a b) Note that types than can be expressed as an ADT
More informationOfficial Survey. Cunning Plan: Focus On Objects. The Need for a Calculus. Object Calculi Summary. Why Not Use λ-calculus for OO?
Modeling and Understanding Object-Oriented Oriented Programming Official Survey Please fill out the Toolkit course survey 40142 CS 655-1 Apr-21-2006 Midnight May-04-2006 9am Why not do it this evening?
More informationProgramming Languages Lecture 14: Sum, Product, Recursive Types
CSE 230: Winter 200 Principles of Programming Languages Lecture 4: Sum, Product, Recursive Types The end is nigh HW 3 No HW 4 (= Final) Project (Meeting + Talk) Ranjit Jhala UC San Diego Recap Goal: Relate
More informationHaskell Overview II (2A) Young Won Lim 8/9/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationExtensible and Modular Generics for the Masses
Chapter 1 Extensible and Modular Generics for the Masses Bruno C. d. S. Oliveira 1, Ralf Hinze 2, Andres Löh 2 Abstract: A generic function is a function that is defined on the structure of data types:
More informationCS558 Programming Languages
CS558 Programming Languages Fall 2017 Lecture 7b Andrew Tolmach Portland State University 1994-2017 Type Inference Some statically typed languages, like ML (and to a lesser extent Scala), offer alternative
More informationGeneric polymorphism on steroids
Generic polymorphism on steroids or How to Solve the Expression Problem with Polymorphic Variants Claudio Sacerdoti Coen Dipartimento di Informatica Scienza e Ingegneria
More informationRefinement Types as Proof Irrelevance. William Lovas with Frank Pfenning
Refinement Types as Proof Irrelevance William Lovas with Frank Pfenning Overview Refinement types sharpen existing type systems without complicating their metatheory Subset interpretation soundly and completely
More informationLecture 16: Object Programming Languages
Lecture 16: Object Programming Languages Introduction Corresponds to EOPL 5.1 and 5.2 Goal: to introduce Object Oriented Programming Language (OOPL) concepts using the EOPL extensible language framework
More informationAlgebraic data types. The case against null
Algebraic data types The case against null Motivation PL history (1970's) SML, OCaml, Haskell, Scala, F#, Rust, Swift Variants Null references User-defined Types compound ("Dunedin", 120_000) : string
More informationIndexed Programming. Jeremy Gibbons
Indexed Programming Jeremy Gibbons Indexed Programming 2 1. Collections public interface List{ void add(int index, Object element); boolean contains(object o); Object get(int index); int size(); Loss of
More informationComputing Fundamentals 2 Introduction to CafeOBJ
Computing Fundamentals 2 Introduction to CafeOBJ Lecturer: Patrick Browne Lecture Room: K408 Lab Room: A308 Based on work by: Nakamura Masaki, João Pascoal Faria, Prof. Heinrich Hußmann. See notes on slides
More informationGADTs meet Subtyping
GADTs meet Subtyping Gabriel Scherer, Didier Rémy Gallium INRIA 2014 Gabriel Scherer, Didier Rémy (Gallium INRIA) GADTs meet Subtyping 2014 1 / 21 A reminder on GADTs GADTs are algebraic data types that
More informationGoal. CS152: Programming Languages. Lecture 15 Parametric Polymorphism. What the Library Likes. What The Client Likes. Start simpler.
Goal Understand what this interface means and why it matters: CS152: Programming Languages Lecture 15 Parametric Polymorphism Dan Grossman Spring 2011 type a mylist; val mt_list : a mylist val cons : a
More informationStructural Typing for Structured Products
Structural Typing for Structured Products Tim Williams Peter Marks 8th October 2014 Background The FPF Framework A standardized representation for describing payoffs A common suite of tools for trades
More informationAdding GADTs to OCaml the direct approach
Adding GADTs to OCaml the direct approach Jacques Garrigue & Jacques Le Normand Nagoya University / LexiFi (Paris) https://sites.google.com/site/ocamlgadt/ Garrigue & Le Normand Adding GADTs to OCaml 1
More informationLambda Calculus and Type Inference
Lambda Calculus and Type Inference Björn Lisper Dept. of Computer Science and Engineering Mälardalen University bjorn.lisper@mdh.se http://www.idt.mdh.se/ blr/ October 13, 2004 Lambda Calculus and Type
More informationFully Generic Programming Over Closed Universes of Inductive- Recursive Types
Portland State University PDXScholar Dissertations and Theses Dissertations and Theses Spring 6-6-2017 Fully Generic Programming Over Closed Universes of Inductive- Recursive Types Larry Diehl Portland
More informationConstrained Types and their Expressiveness
Constrained Types and their Expressiveness JENS PALSBERG Massachusetts Institute of Technology and SCOTT SMITH Johns Hopkins University A constrained type consists of both a standard type and a constraint
More informationLecture #23: Conversion and Type Inference
Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). Last modified: Fri Oct 20 10:46:40 2006 CS164:
More informationAn update on XML types
An update on XML types Alain Frisch INRIA Rocquencourt (Cristal project) Links Meeting - Apr. 2005 Plan XML types 1 XML types 2 3 2/24 Plan XML types 1 XML types 2 3 3/24 Claim It is worth studying new
More informationMathematics for Computer Scientists 2 (G52MC2)
Mathematics for Computer Scientists 2 (G52MC2) L07 : Operations on sets School of Computer Science University of Nottingham October 29, 2009 Enumerations We construct finite sets by enumerating a list
More informationConversion vs. Subtyping. Lecture #23: Conversion and Type Inference. Integer Conversions. Conversions: Implicit vs. Explicit. Object x = "Hello";
Lecture #23: Conversion and Type Inference Administrivia. Due date for Project #2 moved to midnight tonight. Midterm mean 20, median 21 (my expectation: 17.5). In Java, this is legal: Object x = "Hello";
More informationPHANTOM TYPES AND SUBTYPING
PHANTOM TYPES AND SUBTYPING Matthew Fluet and Riccardo Pucella Department of Computer Science Cornell University ßfluet,riccardoÐ@cs.cornell.edu Abstract We investigate a technique from the literature,
More information(Refer Slide Time: 4:00)
Principles of Programming Languages Dr. S. Arun Kumar Department of Computer Science & Engineering Indian Institute of Technology, Delhi Lecture - 38 Meanings Let us look at abstracts namely functional
More informationPattern Matching and Abstract Data Types
Pattern Matching and Abstract Data Types Tom Murphy VII 3 Dec 2002 0-0 Outline Problem Setup Views ( Views: A Way For Pattern Matching To Cohabit With Data Abstraction, Wadler, 1986) Active Patterns (
More informationOptimising Functional Programming Languages. Max Bolingbroke, Cambridge University CPRG Lectures 2010
Optimising Functional Programming Languages Max Bolingbroke, Cambridge University CPRG Lectures 2010 Objectives Explore optimisation of functional programming languages using the framework of equational
More informationHaskell 98 in short! CPSC 449 Principles of Programming Languages
Haskell 98 in short! n Syntax and type inferencing similar to ML! n Strongly typed! n Allows for pattern matching in definitions! n Uses lazy evaluation" F definition of infinite lists possible! n Has
More informationGeneric Programming With Dependent Types: II
Generic Programming With Dependent Types: II Generic Haskell in Agda Stephanie Weirich University of Pennsylvania March 2426, 2010 SSGIP Generic-Haskell style generic programming in Agda Dependently-typed
More informationTradeoffs. CSE 505: Programming Languages. Lecture 15 Subtyping. Where shall we add useful completeness? Where shall we add completeness?
Tradeoffs CSE 505: Programming Languages Lecture 15 Subtyping Zach Tatlock Autumn 2017 Desirable type system properties (desiderata): soundness - exclude all programs that get stuck completeness - include
More informationAn Introduction to Subtyping
An Introduction to Subtyping Type systems are to me the most interesting aspect of modern programming languages. Subtyping is an important notion that is helpful for describing and reasoning about type
More informationLambda Calculi With Polymorphism
Resources: The slides of this lecture were derived from [Järvi], with permission of the original author, by copy & x = 1 let x = 1 in... paste or by selection, annotation, or rewording. [Järvi] is in turn
More informationJOURNAL OF OBJECT TECHNOLOGY
JOURNAL OF OBJECT TECHNOLOGY Online at www.jot.fm. Published by ETH Zurich, Chair of Software Engineering JOT, 2002 Vol. 1, No. 2, July-August 2002 The Theory of Classification Part 2: The Scratch-Built
More informationOverloading, Type Classes, and Algebraic Datatypes
Overloading, Type Classes, and Algebraic Datatypes Delivered by Michael Pellauer Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. September 28, 2006 September 28, 2006 http://www.csg.csail.mit.edu/6.827
More informationProgramming with Math and Logic
.. Programming with Math and Logic an invitation to functional programming Ed Morehouse Wesleyan University The Plan why fp? terms types interfaces The What and Why of Functional Programming Computing
More informationCombining Proofs and Programs in a Dependently Typed Language. Certification of High-level and Low-level Programs
Combining Proofs and Programs in a Dependently Typed Language Stephanie Weirich University of Pennsylvania July 7, 2014 Certification of High-level and Low-level Programs Zombie A functional programming
More informationCS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Dan Grossman Spring 2011
CS152: Programming Languages Lecture 11 STLC Extensions and Related Topics Dan Grossman Spring 2011 Review e ::= λx. e x e e c v ::= λx. e c τ ::= int τ τ Γ ::= Γ, x : τ (λx. e) v e[v/x] e 1 e 1 e 1 e
More informationERC 4th Workshop KAIST. Sukyoung Ryu KAIST. August 26, 2010
ERC 4th Workshop Sukyoung Ryu August 26, 2010 : Members Coq Mechanization of Basic Core Fortress for Type Soundness Adding Pattern Matching to Existing Object- Oriented Languages FortressCheck: Automatic
More informationPolymorphism and Type Inference
Polymorphism and Type Inference Volker Stolz stolz@ifi.uio.no Department of Informatics University of Oslo Initially by Gerardo Schneider. Based on John C. Mitchell s slides (Stanford U.) Compile-time
More informationCSCI.6962/4962 Software Verification Fundamental Proof Methods in Computer Science (Arkoudas and Musser) Sections p.
CSCI.6962/4962 Software Verification Fundamental Proof Methods in Computer Science (Arkoudas and Musser) Sections 10.1-10.3 p. 1/106 CSCI.6962/4962 Software Verification Fundamental Proof Methods in Computer
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2018 Lecture 7b Andrew Tolmach Portland State University 1994-2018 Dynamic Type Checking Static type checking offers the great advantage of catching errors early And
More informationHierarchy in Generic Programming Libraries
Hierarchy in Generic Programming Libraries José Pedro Magalhães 1 and Andres Löh 2 1 jpm@cs.ox.ac.uk. Department of Computer Science, University of Oxford 2 andres@well-typed.com. Well-Typed LLP Abstract.
More informationCS152: Programming Languages. Lecture 24 Bounded Polymorphism; Classless OOP. Dan Grossman Spring 2011
CS152: Programming Languages Lecture 24 Bounded Polymorphism; Classless OOP Dan Grossman Spring 2011 Revenge of Type Variables Sorted lists in ML (partial): type a slist make : ( a -> a -> int) -> a slist
More informationType-indexed functions in Generic Haskell
Type-indexed functions in Generic Haskell Johan Jeuring September 15, 2004 Introduction Today I will talk about: a Types of polymorphism. b Type-indexed functions. c Dependencies. Read about b, and c in
More informationOverview. Elements of Programming Languages. Records. Named variants. Last time: Simple data structures: pairing (product types), choice (sum types)
Overview Elements of Programming Languages Lecture 7: Records, variants, and subtyping James Cheney University of Edinburgh October 12, 2017 Last time: Simple data structures: pairing (product types),
More informationLecture 4: Higher Order Functions
Lecture 4: Higher Order Functions Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense September 26, 2017 HIGHER ORDER FUNCTIONS The order of a function
More informationHaskell: From Basic to Advanced. Part 2 Type Classes, Laziness, IO, Modules
Haskell: From Basic to Advanced Part 2 Type Classes, Laziness, IO, Modules Qualified types In the types schemes we have seen, the type variables were universally quantified, e.g. ++ :: [a] -> [a] -> [a]
More informationObject Oriented Paradigm
Object Oriented Paradigm History Simula 67 A Simulation Language 1967 (Algol 60 based) Smalltalk OO Language 1972 (1 st version) 1980 (standard) Background Ideas Record + code OBJECT (attributes + methods)
More informationTowards a Semantic Web Modeling Language
Towards a Semantic Web Modeling Language Draft Christoph Wernhard Persist AG Rheinstr. 7c 14513 Teltow Tel: 03328/3477-0 wernhard@persistag.com May 25, 2000 1 Introduction The Semantic Web [2] requires
More informationSubsumption. Principle of safe substitution
Recap on Subtyping Subsumption Some types are better than others, in the sense that a value of one can always safely be used where a value of the other is expected. Which can be formalized as by introducing:
More informationFrom Types to Sets in Isabelle/HOL
From Types to Sets in Isabelle/HOL Extented Abstract Ondřej Kunčar 1 and Andrei Popescu 1,2 1 Fakultät für Informatik, Technische Universität München, Germany 2 Institute of Mathematics Simion Stoilow
More informationLambda Calculus and Type Inference
Lambda Calculus and Type Inference Björn Lisper Dept. of Computer Science and Engineering Mälardalen University bjorn.lisper@mdh.se http://www.idt.mdh.se/ blr/ August 17, 2007 Lambda Calculus and Type
More informationTopic 7: Algebraic Data Types
Topic 7: Algebraic Data Types 1 Recommended Exercises and Readings From Haskell: The craft of functional programming (3 rd Ed.) Exercises: 5.5, 5.7, 5.8, 5.10, 5.11, 5.12, 5.14 14.4, 14.5, 14.6 14.9, 14.11,
More informationSoftware Verification for Java 5
Software Verification for Java 5 KeY Symposium 2007 Mattias Ulbrich June 14, 2007 Content KeY + Java 5 Typesafe Enumeration Datatypes Enhanced For Loops Generic Classes 1. Keep pace with the progress of
More informationOn the Logical Foundations of Staged Computation
On the Logical Foundations of Staged Computation Frank Pfenning PEPM 00, Boston, MA January 22, 2000 1. Introduction 2. Judgments and Propositions 3. Intensional Types 4. Run-Time Code Generation 5. The
More informationLogic - CM0845 Introduction to Haskell
Logic - CM0845 Introduction to Haskell Diego Alejandro Montoya-Zapata EAFIT University Semester 2016-1 Diego Alejandro Montoya-Zapata (EAFIT University) Logic - CM0845 Introduction to Haskell Semester
More informationCS152: Programming Languages. Lecture 23 Advanced Concepts in Object-Oriented Programming. Dan Grossman Spring 2011
CS152: Programming Languages Lecture 23 Advanced Concepts in Object-Oriented Programming Dan Grossman Spring 2011 So far... The difference between OOP and records of functions with shared private state
More informationType checking by theorem proving in IDRIS
Type checking by theorem proving in IDRIS p. 1 Type checking by theorem proving in IDRIS Scottish Theorem Proving, 10th February 2012 ecb10@st-andrews.ac.uk University of St Andrews Edwin Brady Type checking
More informationFeatherweight Java (FJ)
x = 1 let x = 1 in... x(1).!x(1) x.set(1) Programming Language Theory Featherweight Java (FJ) Ralf Lämmel This lecture is based on David Walker s lecture: Computer Science 441, Programming Languages, Princeton
More information