Share
VIDEOS 1 TO 50
What is STRUCTURAL TYPE SYSTEM? What does STRUCTURAL TYPE SYSTEM mean?
What is STRUCTURAL TYPE SYSTEM? What does STRUCTURAL TYPE SYSTEM mean?
Published: 2017/10/06
Channel: The Audiopedia
The Structural Theory of Pure Type Systems
The Structural Theory of Pure Type Systems
Published: 2016/07/27
Channel: Microsoft Research
What Is A Type System In Programming? Strong vs. Weak
What Is A Type System In Programming? Strong vs. Weak
Published: 2016/02/17
Channel: Chris Hawkes
Compiler Design:  Type System, Type Equivalence,Type Checker
Compiler Design: Type System, Type Equivalence,Type Checker
Published: 2017/02/09
Channel: University Academy- Formerly-IP University CSE/IT
ARE 4.0 Structural Systems (SS): Multiple Choice
ARE 4.0 Structural Systems (SS): Multiple Choice
Published: 2015/02/18
Channel: NCARB
CSE 340 10-7-15 Lecture: "Types Pt. 2"
CSE 340 10-7-15 Lecture: "Types Pt. 2"
Published: 2015/10/07
Channel: Adam Doupé
A Type System From Scratch – Robert Widmann
A Type System From Scratch – Robert Widmann
Published: 2017/04/24
Channel: Functional Swift
CSE 340 S16: 3-30-16 "Hindley-Milner Type Inference pt. 1"
CSE 340 S16: 3-30-16 "Hindley-Milner Type Inference pt. 1"
Published: 2016/03/31
Channel: Adam Doupé
CSE 340 11-16-15 Office Hours "Structural Equivalence"
CSE 340 11-16-15 Office Hours "Structural Equivalence"
Published: 2015/11/17
Channel: Adam Doupé
ABCs of Structural Steel - Part 2: Beam | Metal Supermarkets
ABCs of Structural Steel - Part 2: Beam | Metal Supermarkets
Published: 2017/04/24
Channel: Metal Supermarkets
Structural Joints in Precast Concrete
Structural Joints in Precast Concrete
Published: 2017/02/07
Channel: JSP
Ideate BIMLink - Structural Type Swapping
Ideate BIMLink - Structural Type Swapping
Published: 2014/05/02
Channel: Ideate Software
The Gradualizer: A Methodology and Algorithm for Generating Gradual Type Systems
The Gradualizer: A Methodology and Algorithm for Generating Gradual Type Systems
Published: 2016/04/05
Channel: Ras Bodik
Immunoglobulins Structure and Function /Antibody Structure Types and Function
Immunoglobulins Structure and Function /Antibody Structure Types and Function
Published: 2015/12/06
Channel: MEDSimplified
Damas-Milner type system - Haskell.SG
Damas-Milner type system - Haskell.SG
Published: 2015/07/01
Channel: Engineers.SG
Scala
Scala's Type System: a tutorial
Published: 2012/04/01
Channel: Ben Hutchison
structural classification of neurons
structural classification of neurons
Published: 2011/08/12
Channel: Ren Hartung
Neurons or nerve cells - Structure function and types of neurons | Human Anatomy | 3D Biology
Neurons or nerve cells - Structure function and types of neurons | Human Anatomy | 3D Biology
Published: 2013/04/27
Channel: Elearnin
Types of Neurons - Structural and Functional Classes
Types of Neurons - Structural and Functional Classes
Published: 2016/03/08
Channel: Justin Siebert
"Aggregator: MapReduce in the type system" by Dan Frank
"Aggregator: MapReduce in the type system" by Dan Frank
Published: 2015/09/28
Channel: Strange Loop
Microbiology - Viruses (Structure, Types and Bacteriophage Replication)
Microbiology - Viruses (Structure, Types and Bacteriophage Replication)
Published: 2013/08/06
Channel: Armando Hasudungan
TypeScript Structural Typing
TypeScript Structural Typing
Published: 2015/08/05
Channel: life michael
Philly ETE 2016 #12 - Academese to English: A Practical Tour of Scala’s Type System - Heather Miller
Philly ETE 2016 #12 - Academese to English: A Practical Tour of Scala’s Type System - Heather Miller
Published: 2016/05/10
Channel: ChariotSolutions
What is organizational structure?
What is organizational structure?
Published: 2016/02/11
Channel: BusinessDictionary
Classes vs. Structures in Swift 4, Xcode 9, and iOS 11 - raywenderlich.com
Classes vs. Structures in Swift 4, Xcode 9, and iOS 11 - raywenderlich.com
Published: 2018/01/12
Channel: raywenderlich.com
CSE 340 11-16-15 Office Hours "Type Equivalence"
CSE 340 11-16-15 Office Hours "Type Equivalence"
Published: 2015/11/17
Channel: Adam Doupé
[08/20] Structural vs Nominal typing
[08/20] Structural vs Nominal typing
Published: 2018/01/02
Channel: Javascript.Ninja
Type Systems I - Vladimir Voevodsky
Type Systems I - Vladimir Voevodsky
Published: 2016/08/17
Channel: Institute for Advanced Study
File Directories | Single-Level, Two Level, Tree Structural and Acyclic Graph Directories
File Directories | Single-Level, Two Level, Tree Structural and Acyclic Graph Directories
Published: 2017/04/08
Channel: Easy Engineering Classes
Types In Julia (Inspecting  Abstract and Concrete Types)
Types In Julia (Inspecting Abstract and Concrete Types)
Published: 2017/07/03
Channel: J-Secur1ty
Lambda Days - Konrad Malawski - Types of Types... in Scala
Lambda Days - Konrad Malawski - Types of Types... in Scala
Published: 2014/04/22
Channel: Erlang Solutions
Economic Systems and Macroeconomics: Crash Course Economics #3
Economic Systems and Macroeconomics: Crash Course Economics #3
Published: 2015/07/30
Channel: CrashCourse
CSE 340 F16: 10-19-16 "Types Pt. 4 and Hindley Milner Pt. 1"
CSE 340 F16: 10-19-16 "Types Pt. 4 and Hindley Milner Pt. 1"
Published: 2016/10/19
Channel: Adam Doupé
Cody Roux - Pure Type Systems
Cody Roux - Pure Type Systems
Published: 2015/03/29
Channel: Boston Haskell
Substructural Type Systems and Concurrent Programming 4 - Frank Pfenning - OPLSS 2017
Substructural Type Systems and Concurrent Programming 4 - Frank Pfenning - OPLSS 2017
Published: 2017/06/30
Channel: OPLSS
Conor McBride - Worldly type systems + Linear dependent types
Conor McBride - Worldly type systems + Linear dependent types
Published: 2016/05/06
Channel: Sophie Taylor
UCL PPLV Research Seminar Part One:
UCL PPLV Research Seminar Part One: 'Types & Type-free Lambda Calculus', Dana Scott
Published: 2016/05/27
Channel: UCLComputerScience
An introduction to type systems
An introduction to type systems
Published: 2017/03/26
Channel: Ralf Laemmel
Type Systems - Vladimir Voevodsky
Type Systems - Vladimir Voevodsky
Published: 2017/07/06
Channel: Institute for Advanced Study
QuaDror by Dror - a New Structural Support System, video 1
QuaDror by Dror - a New Structural Support System, video 1
Published: 2011/09/12
Channel: TheHomeToday
Biomolecules (Updated)
Biomolecules (Updated)
Published: 2016/02/12
Channel: Amoeba Sisters
Biology Structural Organization Animals part 3 (Types Animal tissues: Epithelial) CBSE class 11 XI
Biology Structural Organization Animals part 3 (Types Animal tissues: Epithelial) CBSE class 11 XI
Published: 2014/12/12
Channel: ExamFear Education
Abstract data types - Data Structure using C (Hindi / Urdu)
Abstract data types - Data Structure using C (Hindi / Urdu)
Published: 2017/01/23
Channel: Learn By Watch
How to understand power - Eric Liu
How to understand power - Eric Liu
Published: 2014/11/04
Channel: TED-Ed
Proteins
Proteins
Published: 2012/11/13
Channel: Bozeman Science
The Nervous System, Part 1: Crash Course A&P #8
The Nervous System, Part 1: Crash Course A&P #8
Published: 2015/02/23
Channel: CrashCourse
Biology: Cell Structure
Biology: Cell Structure
Published: 2015/03/18
Channel: Nucleus Medical Media
Nathan Sorenson - Domain Specific Type Systems
Nathan Sorenson - Domain Specific Type Systems
Published: 2015/04/21
Channel: ClojureTV
Cockroach - Structural Organisation in Animals - LK Upadhyay | NEET AIIMS | Video Lectures
Cockroach - Structural Organisation in Animals - LK Upadhyay | NEET AIIMS | Video Lectures
Published: 2017/08/02
Channel: NEETprep
SHENZHEN | China Gate | 608m | 1995ft | 169 fl | Pro
SHENZHEN | China Gate | 608m | 1995ft | 169 fl | Pro
Published: 2017/07/09
Channel: Awesome SkyscraperProject
NEXT
GO TO RESULTS [51 .. 100]

WIKIPEDIA ARTICLE

From Wikipedia, the free encyclopedia
Jump to: navigation, search

A structural type system (or property-based type system) is a major class of type system, in which type compatibility and equivalence are determined by the type's actual structure or definition, and not by other characteristics such as its name or place of declaration. Structural systems are used to determine if types are equivalent and whether a type is a subtype of another. It contrasts with nominative systems, where comparisons are based on the names of the types or explicit declarations, and duck typing, in which only the part of the structure accessed at runtime is checked for compatibility.

Description[edit]

In structural typing, an element is considered to be compatible with another if, for each feature within the second element's type, a corresponding and identical feature exists in the first element's type. Some languages may differ on the details, such as whether the features must match in name. This definition is not symmetric, and includes subtype compatibility. Two types are considered to be identical if each is compatible with the other.

For example, OCaml uses structural typing on methods for compatibility of object types. Go uses structural typing on methods to determine compatibility of a type with an interface. C++ template functions exhibit structural typing on type arguments. Haxe uses structural typing, but classes are not structurally subtyped.

In languages which support subtype polymorphism, a similar dichotomy can be formed based on how the subtype relationship is defined. One type is a subtype of another if and only if it contains all the features of the base type, or subtypes thereof. The subtype may contain added features, such as members not present in the base type, or stronger invariants.

A distinction exists between structural substitution for inferred and non-inferred polymorphism. Some languages, such as Haskell, do not substitute structurally in the case where an expected type is declared (i.e., not inferred), e.g., only substitute for functions that are signature-based polymorphic via type inference.[1] Then it is not possible to accidentally subtype a non-inferred type, although it may still be possible to provide an explicit conversion to a non-inferred type, which is invoked implicitly.

Structural subtyping is arguably more flexible than nominative subtyping, as it permits the creation of ad hoc types and protocols; in particular, it permits creation of a type which is a supertype of an existing type, without modifying the definition of the latter. However, this may not be desirable where the programmer wishes to create closed abstractions.

A pitfall of structural typing versus nominative typing is that two separately defined types intended for different purposes, but accidentally holding the same properties (e.g. both composed of a pair of integers), could be considered the same type by the type system, simply because they happen to have identical structure. One way this can be avoided is by creating one algebraic data type for each use.

In 1990, Cook, et al., proved that inheritance is not subtyping in structurally-typed OO languages.[2]

Example[edit]

Objects in OCaml are structurally typed by the names and types of their methods.

Objects can be created directly (immediate objects) without going through a nominative class. Classes only serve as functions for creating objects.

 # let x =
     object
       val mutable x = 5
       method get_x = x
       method set_x y = x <- y
     end;;
 val x : < get_x : int; set_x : int -> unit > = <obj>

Here the OCaml interactive runtime prints out the inferred type of the object for convenience. Its type (< get_x : int; set_x : int -> unit >) is defined only by its methods. In other words, the type of x is defined by the method types "get_x : int" and "set_x : int -> unit" rather than by any name.[3]

To define another object, which has the same methods and types of methods:

 # let y =
     object
       method get_x = 2
       method set_x y = Printf.printf "%d\n" y
     end;;
 val y : < get_x : int; set_x : int -> unit > = <obj>

OCaml considers them the same type. For example, the equality operator is typed to only take two values of the same type:

 # x = y;;
 - : bool = false

So they must be the same type, or else this wouldn't even type-check. This shows that equivalence of types is structural.

One can define a function that invokes a method:

 # let set_to_10 a = a#set_x 10;;
 val set_to_10 : < set_x : int -> 'a; .. > -> 'a = <fun>

The inferred type for the first argument (< set_x : int -> 'a; .. >) is interesting. The .. means that the first argument can be any object which has a "set_x" method, which takes an int as argument.

So it can be used on object x:

 # set_to_10 x;;
 - : unit = ()

Another object can be made that happens to have that method and method type; the other methods are irrelevant:

 # let z =
     object
       method blahblah = 2.5
       method set_x y = Printf.printf "%d\n" y
     end;;
 val z : < blahblah : float; set_x : int -> unit > = <obj>

The "set_to_10" function also works on it:

 # set_to_10 z;;
 10
 - : unit = ()

This shows that compatibility for things like method invocation is determined by structure.

Let us define a type synonym for objects with only a "get_x" method and no other methods:

 # type simpler_obj = < get_x : int >;;
 type simpler_obj = < get_x : int >

The object x is not of this type; but structurally, x is of a subtype of this type, since x contains a superset of its methods. So x can be coerced to this type:

 # (x :> simpler_obj);;
 - : simpler_obj = <obj>
 # (x :> simpler_obj)#get_x;;
 - : int = 10

But not object z, because it is not a structural subtype:

 # (z :> simpler_obj);;
 This expression cannot be coerced to type simpler_obj = < get_x : int >;
 it has type < blahblah : float; set_x : int -> unit > but is here used with type
   < get_x : int; .. >
 The first object type has no method get_x

This shows that compatibility for widening coercions are structural.

References[edit]

  1. ^ "Signature-based polymorphism". 
  2. ^ Cook, W.R.; Hill, W.L.; Canning, P.S. (January 1990). "Inheritance is not subtyping". Proceedings of the Seventeenth Annual ACM Symposium on Principles of Programming Languages. San Francisco, California: 125–135. doi:10.1145/96709.96721. 
  3. ^ "Object types". 

External links[edit]

Disclaimer

None of the audio/visual content is hosted on this site. All media is embedded from other sites such as GoogleVideo, Wikipedia, YouTube etc. Therefore, this site has no control over the copyright issues of the streaming media.

All issues concerning copyright violations should be aimed at the sites hosting the material. This site does not host any of the streaming media and the owner has not uploaded any of the material to the video hosting servers. Anyone can find the same content on Google Video or YouTube by themselves.

The owner of this site cannot know which documentaries are in public domain, which has been uploaded to e.g. YouTube by the owner and which has been uploaded without permission. The copyright owner must contact the source if he wants his material off the Internet completely.

Powered by YouTube
Wikipedia content is licensed under the GFDL and (CC) license