{co/contr} variance from LSP
-
Upload
ruslan-shevchenko -
Category
Software
-
view
41 -
download
0
Transcript of {co/contr} variance from LSP
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