SlideShare a Scribd company logo
Type Systems
Jordan Parmer
@ProfParmer
What is a Type System?
“A set of rules that assigns a property called a ‘type’ to the
various constructs of a computer program such as variables,
expressions, functions, or modules.
These types formalize and enforce the otherwise implicit
categories the programmer users for algebraic data types,
data structures, or other components.”
-Wikipedia
What is a Type System?
“A type system is a tractable syntactic method for proving the
absence of certain program behaviors by classifying phrases
according to the kinds of values they compute.”
- Benjamin Pierce in Types and Programming Languages
What is a Type System?
“Intuitively speaking, you want your type system to induce a
system of logic that is consistent, i.e. that doesn't allow false
theorems to be proven. The more inconsistent the system of
logic induced by the type system is, the less useful the type
system is as a proof of correctness of the code.”
- Jorg Mittag
What are the goals of a type
system?
Type System Goals
◦ Check for bad program behavior
◦ Early detection of program errors
◦ Enable abstractions
◦ Protect integrity of user defined abstractions
◦ Documentation
▫ Easy to reason code’s purpose
▫ Doesn’t drift like code comments
How do we evaluate programming
languages?
We Evaluate Languages By…
1. Domain
2. Community
3. Type System
The More You Use
Your Type System
The More It Works
For You
The More You Use
Your Type System
The More It Works
For You
If you just use
primitive types,
don’t expect much
more than primitive
behavior from your
type system.
Use rich types to
describe your
domain, and you’ll
find your type
system actually
enforcing your
domain!
Expectations of
This Talk
1. Only scratching the surface
2. Not going deep into type theory
3. Code examples biased towards Scala but
concepts apply to many languages
Comic by Cassandra Calin
Fundamental Type System
Classifications
Fundamental Type System Classifications
◦ Type Safety
◦ Static vs Dynamic Type Checking
◦ Type Inference
Type Safety
“A safe language is one that protects
its own abstractions.” - Pierce (TaPL)
Type Safety
Unsafe Behavior
● Dereferencing null pointer
● Accessing array out of
bounds
● Using uninitialized variables
● Casting between types
● Not checking parameter lists
Safe Behavior
● Runtime Exceptions
○ NullPointerException
○ ArrayIndexOutOfBoundsException
● Not allowing uninitialized
variables
● Compile time parameter list
agreement checks
Type Safety
Unsafe Behavior
● Dereferencing null pointer
● Accessing array out of
bounds
● Using uninitialized variables
● Casting between types
● Not checking parameter lists
Safe Behavior
● Runtime Exceptions
○ NullPointerException
○ ArrayIndexOutOfBoundsException
● Not allowing uninitialized
variables
● Compile time parameter list
agreement checks
Type safety is not binary. Languages vary in safety on a per
feature basis (e.g. memory safety, abstraction safety, runtime
safety, cast safety, etc.)
Static vs Dynamic
Static Type Checking
Verify safety of program before
execution.
Dynamic Type Checking
Verify safety of program at
execution.
Question: Why do people
get into religious
arguments over static vs
dynamic type checking?
Kidding! More seriously, what some
of the pros/cons of static vs dynamic
type systems?
Static vs Dynamic
Static Type Checking
◦ Early feedback
◦ More reliable
◦ More optimizable
◦ Longer edit-compile-test cycle
Dynamic Type Checking
◦ Shorter edit-compile-test cycle
◦ More flexible
◦ Good for prototyping
◦ Better at metaprogramming
◦ Get ready for lots and lots of unit testing
Static vs Dynamic: Language Examples
Static
◦ C
◦ C++
◦ Java
◦ C#
◦ Scala
◦ Haskell
◦ Rust
◦ Kotlin
◦ Go
Dynamic
◦ JavaScript
◦ Ruby
◦ Python
◦ Perl
◦ PHP
◦ Lisp
◦ Clojure
◦ R
◦ Bash
Dynamic Static
Weak
Strong
Erlang
Clojure
Python
Groovy
Ruby
Magik
Perl
VB
PHP
JavaScript
C#
F# Haskell
Scala
Java
C
C++
Type Inference
Automatic detection of data type
◦ Feature of some strongly statically typed
languages
◦ Especially prevalent in functional
programming languages
Explicitly Type Annotated Type Inference
val x: Int = 100
val y: Seq[String] = Seq(“apple”, “orange”)
val z: User = new User(“Jordan Parmer”)
val a: Option[String] = findKey(“type”)
val x = 100
val y = Seq(“apple”, “orange”)
val z = new User(“Jordan Parmer”)
val a = findKey(“type”)
Type Inference
Automatic detection of data type
◦ Feature of some strongly statically typed
languages
◦ Especially prevalent in functional
programming languages
Explicitly Type Annotated Type Inference
val x: Int = 100
val y: Seq[String] = Seq(“apple”, “orange”)
val z: User = new User(“Jordan Parmer”)
val a: Option[String] = findKey(“type”)
val x = 100
val y = Seq(“apple”, “orange”)
val z = new User(“Jordan Parmer”)
val a = findKey(“type”)
Still statically typed at
compile time
Strong type inference paves the way
for expressions over statements.
Type Driven Development
Focus on type signatures instead of implementation. With pure-
ish functional languages, if it compiles, you know it is likely
correct.
Lets you fill in the details later.
Rich Type System
Features
Functions as Types
Higher Order Functions
Higher Order Functions
Function that either takes another
function as an argument and/or
returns a function as its result.
Higher Order Functions
Function that either takes another
function as an argument and/or
returns a function as its result.
Higher Order Functions
Function that either takes another
function as an argument and/or
returns a function as its result.
Partial function
application via currying
Returns String => String
Question: So what is the problem with
conditionals anyway?
#ConditionalsAreEvil
Algebraic Data Types
Algebraic Data Types
A variant/union type that supports
sum and product algebras. Pattern
matching capabilities on type shape.
◦ Sum is alternation
A | B, meaning A or B but not both
◦ Product is combination
A B, meaning A and B together
Algebraic Data Types
A variant/union type that supports
sum and product algebras. Pattern
matching capabilities on type shape.
Product Types (A AND B)
◦ Tuples: (Int, Boolean)
◦ Classes: class Foo(x: Int, y: String)
Algebraic Data Types
A variant/union type that supports
sum and product algebras. Pattern
matching capabilities on type shape.
Sum Types (A OR B NOT BOTH)
◦ Option[T] (Some | None)
Maybe[T] (Just | Empty)
◦ Either[B, A] (Left | Right)
◦ Try[T] (Success | Failure)
Algebraic Data Types
Example ADT of Sum Type
Algebraic Data Types
Example ADT of Sum Type
If we don’t include a case for one of the members
of the ADT, we get a compiler warning. Called
exhaustive checking.
ADT’s of the sum algebra look like
‘enum’ types from C/C++ but those
languages internally treat them as
integers.
These are more sophisticated taking
custom type shapes.
Polymorphism
Higher abstractions with type safety
Polymorphism
Parametric Polymorphism
Subtype Polymorphism
Ad-Hoc Polymorphism (aka Type Classes)
Question: When people talk about
polymorphism, what kinds of
problems are they trying to solve?
Parametric Polymorphism
Same as generic types from C#,
Java. Types are parameterized.
Parametric Polymorphism
Parametric Polymorphism
Parametric Polymorphism
Parametric Polymorphism
Parametric Polymorphism
Parametric Polymorphism
Bounds Checking
◦ Upper bounds (supertype)
◦ Lower bounds (subtype)
Partial Orders (from Order Theory)
A partial order is a binary relation <:
over a set P.
When a <: b, we say that a is related
to b but does not imply b is related to
a.
Upper Bounds Checking
Lower Bounds Checking
Existential Types
When you need a parameterized type but you don’t care what
it is.
Existential Types
We need [T] so we can support any “List of type T”
but we don’t actually need to use ‘T’ in the
implementation.
Existential Types
We need [T] so we can support any “List of type T”
but we don’t actually need to use ‘T’ in the
implementation.
Type Variance
What if we want to model a factory
that creates vehicles?
Invariant
Invariant
Covariant
Covariant
Covariant
One more example:
What if we want to limit the models
the factory is able to produce?
Let’s say we can make vehicles as
long as the model isn’t too
specialized.
In other words, control the direction
of the specialization. “Up to this point
and no further”.
Contravariant
Contravariant
When is contravariant subtyping
actually practical?
Practical Contravariant Example
trait Function1[-P, +R] {
def apply(p: P): R
}
Function1[GrandParent, Child] <:
Function1[Parent, Parent]
Functor
A => B
Helpful Explanation: https://www.atlassian.com/blog/software-teams/covariance-and-contravariance-
in-scala
Inputs for A can only have fewer requirements.
Outputs for B must at least be as specialized as
B since caller expects all of B to be available.
Type Classes
Ad-hoc Polymorphism
What are disadvantages to OOP
inheritance?
Inheritance Disadvantages
◦ Violates encapsulation
◦ Layers and layers of state
◦ Difficult to follow hierarchy
◦ Re-use abuse (we bad at correct DRY)
◦ Can’t expand behavior if you don’t own
codebase (e.g. libraries)
What are common alternatives to
inheritance?
Composition over inheritance is one.
Another Way
To
Approach This?
How about adding behavior to types
we don’t own?
How about selectively applying
behaviors in different scopes of our
code base?
How about applying lawful behaviors
to abstractions?
Type classes are the answer
Separation of Data from Behavior
Separation of Data from Behavior
Could implement interfaces and traits…
...but what about cases where we don’t own the code base?
Elements of a type class
1. The type class itself
(desired behavior)
2. Instances of particular types
(implementation of behavior)
3. Interface or API exposed to users
Behavior
Implementation for
Integer
Implementation for
Boolean
Implementation for
User
Implementation for
Record
Implementation for
Json
Function Requiring
Type with Behavior
How Is This Different From Interfaces
In OOP?
Behavior
Implementation for
Integer
Implementation for
Boolean
Implementation for
User
Implementation for
Record
Implementation for
Json
Function Requiring
Type with Behavior
Compiler error if calling
function with type that
doesn’t implement
behavior.
Behavior
Implementation for
Integer
Implementation for
Boolean
Implementation for
User
Implementation for
Record
Implementation for
Json
Function Requiring
Type with Behavior
Implementations can be
imported into specific
scopes.
Behavior
Implementation for
Integer
Implementation for
Boolean
Implementation for
User
Implementation for
Record
Implementation for
Json
Function Requiring
Type with Behavior
Implementations can be
provided for types we don’t own
or have access to code.
Behavior
Implementation for
Integer
Implementation for
Boolean
Implementation for
User
Implementation for
Record
Implementation for
Json
Function Requiring
Type with Behavior
We can easily drop in new
implementations.
Implementation for
NewThing
With type classes we flip the thinking;
instead of types carrying behaviors,
we have templates of behaviors with
interpretations for different types.
1. The Type Class (Desired Behavior)
This is the actual behavior:
A => Json
Code provided by Noel Welsh and Dave Gurnell in book “Scala with Cats”
2. Type class instances (implementations of behavior)
Code provided by Noel Welsh and Dave Gurnell in book “Scala with Cats”
3. Type class access (api to caller)
The compiler finds our implicit
behavior in scope (because of the
localized import) and uses the type’s
implementation in the type class.
Code provided by Noel Welsh and Dave Gurnell in book “Scala with Cats”
Disadvantages?
● Verbose if language doesn’t have native support
○ Haskell has native support
○ Scala does not and requires implicit boilerplate code
● Paradigm shift from traditional OOP/interfaces
Examples
● Haskell
○ It’s type classes all the way down
● Scala
○ ScalaZ
○ Cats
Higher Kinded Types
...another talk...another day...
Thanks!
ANY QUESTIONS?
You can find me on Twitter/LinkedIn at
@ProfParmer
Jordan Parmer

More Related Content

What's hot

Rust Primer
Rust PrimerRust Primer
Rust Primer
Knoldus Inc.
 
Why you should care about Go (Golang)
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)
Aaron Schlesinger
 
Advanced C
Advanced C Advanced C
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
Aniruddha Chakrabarti
 
Storage class in C Language
Storage class in C LanguageStorage class in C Language
Storage class in C Language
Nitesh Kumar Pandey
 
Templates in c++
Templates in c++Templates in c++
Templates in c++
ThamizhselviKrishnam
 
Encapsulation in C++
Encapsulation in C++Encapsulation in C++
Encapsulation in C++
Hitesh Kumar
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
Amal Mohan N
 
Programming in C Presentation upto FILE
Programming in C Presentation upto FILEProgramming in C Presentation upto FILE
Programming in C Presentation upto FILE
Dipta Saha
 
java 8 new features
java 8 new features java 8 new features
java 8 new features
Rohit Verma
 
Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming Language
Jaeju Kim
 
Abstract Class & Abstract Method in Core Java
Abstract Class & Abstract Method in Core JavaAbstract Class & Abstract Method in Core Java
Abstract Class & Abstract Method in Core Java
MOHIT AGARWAL
 
Operators in java
Operators in javaOperators in java
Operators in java
Madishetty Prathibha
 
C++
C++C++
Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).ppt
Alok Kumar
 
Control statements in java
Control statements in javaControl statements in java
Control statements in java
Madishetty Prathibha
 
Decision statements in c language
Decision statements in c languageDecision statements in c language
Decision statements in c language
tanmaymodi4
 
Namespaces in C#
Namespaces in C#Namespaces in C#
Namespaces in C#
yogita kachve
 
Java Presentation For Syntax
Java Presentation For SyntaxJava Presentation For Syntax
Java Presentation For Syntax
PravinYalameli
 
Compiler construction tools
Compiler construction toolsCompiler construction tools
Compiler construction tools
Akhil Kaushik
 

What's hot (20)

Rust Primer
Rust PrimerRust Primer
Rust Primer
 
Why you should care about Go (Golang)
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)
 
Advanced C
Advanced C Advanced C
Advanced C
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
 
Storage class in C Language
Storage class in C LanguageStorage class in C Language
Storage class in C Language
 
Templates in c++
Templates in c++Templates in c++
Templates in c++
 
Encapsulation in C++
Encapsulation in C++Encapsulation in C++
Encapsulation in C++
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
 
Programming in C Presentation upto FILE
Programming in C Presentation upto FILEProgramming in C Presentation upto FILE
Programming in C Presentation upto FILE
 
java 8 new features
java 8 new features java 8 new features
java 8 new features
 
Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming Language
 
Abstract Class & Abstract Method in Core Java
Abstract Class & Abstract Method in Core JavaAbstract Class & Abstract Method in Core Java
Abstract Class & Abstract Method in Core Java
 
Operators in java
Operators in javaOperators in java
Operators in java
 
C++
C++C++
C++
 
Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).ppt
 
Control statements in java
Control statements in javaControl statements in java
Control statements in java
 
Decision statements in c language
Decision statements in c languageDecision statements in c language
Decision statements in c language
 
Namespaces in C#
Namespaces in C#Namespaces in C#
Namespaces in C#
 
Java Presentation For Syntax
Java Presentation For SyntaxJava Presentation For Syntax
Java Presentation For Syntax
 
Compiler construction tools
Compiler construction toolsCompiler construction tools
Compiler construction tools
 

Similar to Type Systems

what is Type Systems and Type Inference.pptx
what is Type Systems and Type Inference.pptxwhat is Type Systems and Type Inference.pptx
what is Type Systems and Type Inference.pptx
UsmanAshraf656960
 
Type Checking(Compiler Design) #ShareThisIfYouLike
Type Checking(Compiler Design) #ShareThisIfYouLikeType Checking(Compiler Design) #ShareThisIfYouLike
Type Checking(Compiler Design) #ShareThisIfYouLike
United International University
 
Unsafe to typesafe
Unsafe to typesafeUnsafe to typesafe
Unsafe to typesafe
regisleray
 
Typescript: Beginner to Advanced
Typescript: Beginner to AdvancedTypescript: Beginner to Advanced
Typescript: Beginner to Advanced
Talentica Software
 
Generics
GenericsGenerics
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type Checking
Eelco Visser
 
Generics Module 2Generics Module Generics Module 2.pptx
Generics Module 2Generics Module Generics Module 2.pptxGenerics Module 2Generics Module Generics Module 2.pptx
Generics Module 2Generics Module Generics Module 2.pptx
AlvasCSE
 
Type Checking
Type CheckingType Checking
Type Checking
A. S. M. Shafi
 
Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6
Daniyal Mughal
 
DTS s03e04 Typing
DTS s03e04 TypingDTS s03e04 Typing
DTS s03e04 Typing
Tuenti
 
Full CSE 310 Unit 1 PPT.pptx for java language
Full CSE 310 Unit 1 PPT.pptx for java languageFull CSE 310 Unit 1 PPT.pptx for java language
Full CSE 310 Unit 1 PPT.pptx for java language
ssuser2963071
 
Typescript
TypescriptTypescript
Typescript
Nikhil Thomas
 
Java for android developers
Java for android developersJava for android developers
Java for android developers
Aly Abdelkareem
 
Complete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScriptComplete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScript
EPAM Systems
 
Type system
Type systemType system
Type Classes
Type ClassesType Classes
Type Classes
Julien Wetterwald
 
C# Generics
C# GenericsC# Generics
C# Generics
Praveen Kumar
 
Modern_2.pptx for java
Modern_2.pptx for java Modern_2.pptx for java
Modern_2.pptx for java
MayaTofik
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
Aniruddha Chakrabarti
 
X++ 1.pptx
X++ 1.pptxX++ 1.pptx
X++ 1.pptx
Vijay Shukla
 

Similar to Type Systems (20)

what is Type Systems and Type Inference.pptx
what is Type Systems and Type Inference.pptxwhat is Type Systems and Type Inference.pptx
what is Type Systems and Type Inference.pptx
 
Type Checking(Compiler Design) #ShareThisIfYouLike
Type Checking(Compiler Design) #ShareThisIfYouLikeType Checking(Compiler Design) #ShareThisIfYouLike
Type Checking(Compiler Design) #ShareThisIfYouLike
 
Unsafe to typesafe
Unsafe to typesafeUnsafe to typesafe
Unsafe to typesafe
 
Typescript: Beginner to Advanced
Typescript: Beginner to AdvancedTypescript: Beginner to Advanced
Typescript: Beginner to Advanced
 
Generics
GenericsGenerics
Generics
 
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type Checking
 
Generics Module 2Generics Module Generics Module 2.pptx
Generics Module 2Generics Module Generics Module 2.pptxGenerics Module 2Generics Module Generics Module 2.pptx
Generics Module 2Generics Module Generics Module 2.pptx
 
Type Checking
Type CheckingType Checking
Type Checking
 
Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6
 
DTS s03e04 Typing
DTS s03e04 TypingDTS s03e04 Typing
DTS s03e04 Typing
 
Full CSE 310 Unit 1 PPT.pptx for java language
Full CSE 310 Unit 1 PPT.pptx for java languageFull CSE 310 Unit 1 PPT.pptx for java language
Full CSE 310 Unit 1 PPT.pptx for java language
 
Typescript
TypescriptTypescript
Typescript
 
Java for android developers
Java for android developersJava for android developers
Java for android developers
 
Complete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScriptComplete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScript
 
Type system
Type systemType system
Type system
 
Type Classes
Type ClassesType Classes
Type Classes
 
C# Generics
C# GenericsC# Generics
C# Generics
 
Modern_2.pptx for java
Modern_2.pptx for java Modern_2.pptx for java
Modern_2.pptx for java
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 
X++ 1.pptx
X++ 1.pptxX++ 1.pptx
X++ 1.pptx
 

Recently uploaded

Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 

Recently uploaded (20)

Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 

Type Systems