{co/contr} variance from LSP

13
SCALA CODESPACE COURSES CO/CONTR & CATEGORY THEORY

Transcript of {co/contr} variance from LSP

SCALA CODESPACE COURSES

CO/CONTR & CATEGORY THEORY

FUNCTION[-A, +B]

f: A => B g: B => C

F[+A] : if A’ <: A then F[‘A] <: F[A]

A’ <: A => if a: A’ then a:A

A A’

F[- A] : if A’ <: A then F[A] <: F[A’]

FUNCTION[-A, +B]

f: A => B g: B => C

F[+A] : if A’ <: A then F[‘A] <: F[A]

A’ <: A => if a: A’ then a:A

A A’

F[- A] : if A’ <: A then F[A] <: F[A’]

‘TT

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g

Liskov Principle: Expr[T], T’ < T => Expr[T’]

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g

Liskov Principle: Expr[T], T’ < T => Expr[T’]

f’ < f; f’ |> g

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g

Liskov Principle: Expr[T], T’ < T => Expr[T’]

f’ < f; f’ |> g f’ : A’ => B’

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf’ g

f’ < f; f’ |> g f’ : A => B’ Let B’ :> B

Problem: g is not defined on B’ - B

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf’ g

f’ < f; f’ |> g f’ : A => B’ Let B’ :< BFunction[.. , +B]

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g’

g’ < g; f |> g’ g’ : B’ => C Let B’ :< BFunction[.. , +B]

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g’

g’ < g; f |> g’ g’ : B’ => C Let B’ :< B

Problem: g’ is not defined on B - B’

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g’

g’ < g; f |> g’ g’ : B’ => C Let B’ :> BFunction[-A , +B]

FUNCTION[-A, +B]

f: A => B g: B => C

f andThen g g(f(x))

f |> g

A B Сf g’

Function[-A , +B] : application of Liskov substitution principle// Barbara Liskov, CLU Language ~ 1974

-A — IN, +A - OUT

Object — bundle of methods (functions)- (in) — any input ; + (out) — any output