T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat...
Transcript of T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat...
![Page 1: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/1.jpg)
Type-Safe Two-Level Data Transformation
Alcino Cunha, Jose Nuno Oliveira, and Joost Visser
Universidade do Minho, Portugal
FM’06, August 24th
![Page 2: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/2.jpg)
Introduction Data Refinement Implementation Example Conclusion
Outline
1 Introduction
2 Data Refinement
3 Implementation
4 Example
5 Conclusion
![Page 3: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/3.jpg)
Introduction Data Refinement Implementation Example Conclusion
Motivation
Two-level Type-level transformation of a data format coupledwith the corresponding value-level transformation ofdata instances.
Type-safe Type-checking guarantees that the data migrationfunctions are well-formed with respect to thetype-level transformation.
User-driven XML schema evolution coupled with documentmigration.
Automated Data mappings for storing XML in relationaldatabases.
![Page 4: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/4.jpg)
Introduction Data Refinement Implementation Example Conclusion
Motivation
Two-level Type-level transformation of a data format coupledwith the corresponding value-level transformation ofdata instances.
Type-safe Type-checking guarantees that the data migrationfunctions are well-formed with respect to thetype-level transformation.
User-driven XML schema evolution coupled with documentmigration.
Automated Data mappings for storing XML in relationaldatabases.
![Page 5: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/5.jpg)
Introduction Data Refinement Implementation Example Conclusion
Motivation
Two-level Type-level transformation of a data format coupledwith the corresponding value-level transformation ofdata instances.
Type-safe Type-checking guarantees that the data migrationfunctions are well-formed with respect to thetype-level transformation.
User-driven XML schema evolution coupled with documentmigration.
Automated Data mappings for storing XML in relationaldatabases.
![Page 6: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/6.jpg)
Introduction Data Refinement Implementation Example Conclusion
Ingredients
Concrete data models are abstracted as Haskell data types.
Type-level transformations are data refinements.
Strategic programming to compose flexible rewrite systems.
![Page 7: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/7.jpg)
Introduction Data Refinement Implementation Example Conclusion
Data Refinement
An abstract type A is mapped to a concrete type B
Representation Injective and total.
Abstraction Surjective and possibly partial. A
to
!!! B
from
""
![Page 8: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/8.jpg)
Introduction Data Refinement Implementation Example Conclusion
Examples of Refinements
Format evolution
A
inject##
! A + B
isleft
"" A
pairwith(b)##
! A" B
project
""
Hierarchical to relational mappings
A ! (B " (C ! D))
unnjoin$$
! (A ! B)" (A" C ! D)
njoin
%%
![Page 9: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/9.jpg)
Introduction Data Refinement Implementation Example Conclusion
Examples of Refinements
Format evolution
A
inject##
! A + B
isleft
"" A
pairwith(b)##
! A" B
project
""
Hierarchical to relational mappings
A ! (B " (C ! D))
unnjoin$$
! (A ! B)" (A" C ! D)
njoin
%%
![Page 10: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/10.jpg)
Introduction Data Refinement Implementation Example Conclusion
Composition of Refinements
Sequential composition
A
to
!!! B
from
"" # B
to!
!!! C
from!
"" $ A
to!·to!!! C
from·from!
""
Nesting
A
to
!!! B
from
"" $ F A
F to&&
! F B
F from
''
![Page 11: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/11.jpg)
Introduction Data Refinement Implementation Example Conclusion
Composition of Refinements
Sequential composition
A
to
!!! B
from
"" # B
to!
!!! C
from!
"" $ A
to!·to!!! C
from·from!
""
Nesting
A
to
!!! B
from
"" $ F A
F to&&
! F B
F from
''
![Page 12: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/12.jpg)
Introduction Data Refinement Implementation Example Conclusion
Strategic Programming
Apply refinement steps . . .in what order?how often?at what depth?under which conditions?
Compose rewrite systems from:basic rewrite rules andcombinators for traversal construction.
Combinators
(>>>) :: Rule -> Rule -> Rule(|||) :: Rule -> Rule -> Rulenop :: Rulemany :: Rule -> Ruleonce :: Rule -> Rule
![Page 13: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/13.jpg)
Introduction Data Refinement Implementation Example Conclusion
Strategic Programming
Apply refinement steps . . .in what order?how often?at what depth?under which conditions?
Compose rewrite systems from:basic rewrite rules andcombinators for traversal construction.
Combinators
(>>>) :: Rule -> Rule -> Rule(|||) :: Rule -> Rule -> Rulenop :: Rulemany :: Rule -> Ruleonce :: Rule -> Rule
![Page 14: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/14.jpg)
Introduction Data Refinement Implementation Example Conclusion
Strategic Programming
Apply refinement steps . . .in what order?how often?at what depth?under which conditions?
Compose rewrite systems from:basic rewrite rules andcombinators for traversal construction.
Combinators
(>>>) :: Rule -> Rule -> Rule(|||) :: Rule -> Rule -> Rulenop :: Rulemany :: Rule -> Ruleonce :: Rule -> Rule
![Page 15: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/15.jpg)
Introduction Data Refinement Implementation Example Conclusion
Representation of Types
The Type of Types
data Type a whereInt :: Type IntString :: Type StringOne :: Type ()List :: Type a -> Type [a]Map :: Type a -> Type b -> Type (Map a b)Either :: Type a -> Type b -> Type (Either a b)Prod :: Type a -> Type b -> Type (a,b)Tag :: String -> Type a -> Type a
![Page 16: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/16.jpg)
Introduction Data Refinement Implementation Example Conclusion
Type-Changing Rewrite Rules
How to combine strategic programming with type-changing rules?
Masquerade Changes as Views
data Rep a b = Rep {to :: a -> b, from :: b -> a}
data View a whereView :: Rep a b -> Type b -> View (Type a)
The Type of Rules
type Rule = forall a . Type a -> Maybe (View (Type a))
![Page 17: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/17.jpg)
Introduction Data Refinement Implementation Example Conclusion
Type-Changing Rewrite Rules
How to combine strategic programming with type-changing rules?
Masquerade Changes as Views
data Rep a b = Rep {to :: a -> b, from :: b -> a}
data View a whereView :: Rep a b -> Type b -> View (Type a)
The Type of Rules
type Rule = forall a . Type a -> Maybe (View (Type a))
![Page 18: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/18.jpg)
Introduction Data Refinement Implementation Example Conclusion
Examples of Rules
Refine Lists by Maps
A!
seq2index((
! IN ! A
list
''
Rule Implementation
listmap :: Rulelistmap (List a) = Just (View rep (Map Int a))
where rep = Rep {to = seq2index, from = list}listmap _ = Nothing
Rewrite System for Hierarchical-to-Relational Mapping
flatten :: Ruleflatten = many (once (listmap ||| mapprodmap ||| ...))
![Page 19: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/19.jpg)
Introduction Data Refinement Implementation Example Conclusion
Examples of Rules
Refine Lists by Maps
A!
seq2index((
! IN ! A
list
''
Rule Implementation
listmap :: Rulelistmap (List a) = Just (View rep (Map Int a))
where rep = Rep {to = seq2index, from = list}listmap _ = Nothing
Rewrite System for Hierarchical-to-Relational Mapping
flatten :: Ruleflatten = many (once (listmap ||| mapprodmap ||| ...))
![Page 20: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/20.jpg)
Introduction Data Refinement Implementation Example Conclusion
Examples of Rules
Refine Lists by Maps
A!
seq2index((
! IN ! A
list
''
Rule Implementation
listmap :: Rulelistmap (List a) = Just (View rep (Map Int a))
where rep = Rep {to = seq2index, from = list}listmap _ = Nothing
Rewrite System for Hierarchical-to-Relational Mapping
flatten :: Ruleflatten = many (once (listmap ||| mapprodmap ||| ...))
![Page 21: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/21.jpg)
Introduction Data Refinement Implementation Example Conclusion
Unleashing the Migration Functions
The target type is existentially quantified in a view.
Since its not known statically we can use a staged approach:1 Apply the intended transformation to compute it dynamically
and get its string representation using showType.2 Incorporate that string in the source and unleash the migration
functions.
forth :: View (Type a) -> Type b -> a -> Maybe bback :: View (Type a) -> Type b -> b -> Maybe a
data Equal a b where Eq :: Equal a ateq :: Type a -> Type b -> Maybe (Equal a b)
![Page 22: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/22.jpg)
Introduction Data Refinement Implementation Example Conclusion
Evolution of a Music Album Format
Concrete XML Schema
<element name="Album" type="AlbumType"/><complexType name="AlbumType">
<attribute name="ASIN" type="string"/><attribute name="Title" type="string"/><attribute name="Artist" type="string"/><attribute name="Format"><simpleType base="string">
<enumeration value="LP"/><enumeration value="CD"/></simpleType></attribute>
</complexType>
![Page 23: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/23.jpg)
Introduction Data Refinement Implementation Example Conclusion
Evolution of a Music Album Format
Abstract Haskell Type
albumFormat = Tag "Album" (Prod (Tag "ASIN" String) (Prod (Tag "Title" String) (Prod (Tag "Artist" String) (
Tag "Format" (Either (Tag "LP" One)(Tag "CD" One))))))
evolve =
once (inside "Format" (addalt (Tag "DVD" One))) >>>once (inside "Album" (addfield (List String) query))
![Page 24: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/24.jpg)
Introduction Data Refinement Implementation Example Conclusion
Evolution of a Music Album Format
Abstract Haskell Type
albumFormat = Tag "Album" (Prod (Tag "ASIN" String) (Prod (Tag "Title" String) (Prod (Tag "Artist" String) (
Tag "Format" (Either (Tag "LP" One)(Tag "CD" One))))))
evolve =
once (inside "Format" (addalt (Tag "DVD" One))) >>>once (inside "Album" (addfield (List String) query))
![Page 25: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/25.jpg)
Introduction Data Refinement Implementation Example Conclusion
Mapping Albums to Relational Tables
tordb =once enum2int >>> removetags >>> flatten
Computing the Target Type
> let (Just vw) = evolve >>> tordb (List albumFormat)> showType vwProd (Map Int
(Prod (Prod (Prod String String) String) Int))(Map (Prod Int Int) String)
![Page 26: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/26.jpg)
Introduction Data Refinement Implementation Example Conclusion
Mapping Albums to Relational Tables
tordb =once enum2int >>> removetags >>> flatten
Computing the Target Type
> let (Just vw) = evolve >>> tordb (List albumFormat)> showType vwProd (Map Int
(Prod (Prod (Prod String String) String) Int))(Map (Prod Int Int) String)
![Page 27: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/27.jpg)
Introduction Data Refinement Implementation Example Conclusion
Data Migration
Sample
lp = ("B000002UB2",("Abbey Road",("Beatles",Left ())))cd = ("B000002HCO",("Debut",("Bjork",Right ())))
Migrating Data
> let dbs = Prod (Map ...) (Map (Prod Int Int) String)> let (Just db) = forth vw dbs [lp,cd]> db({0 := ((("B000002UB2","Abbey Road"),"Beatles"),0),
1 := ((("B000002HCO","Debut"),"Bjork"),1)},{(0,0) := "Come Together",(0,1) := "Something",...})
![Page 28: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/28.jpg)
Introduction Data Refinement Implementation Example Conclusion
Data Migration
Sample
lp = ("B000002UB2",("Abbey Road",("Beatles",Left ())))cd = ("B000002HCO",("Debut",("Bjork",Right ())))
Migrating Data
> let dbs = Prod (Map ...) (Map (Prod Int Int) String)> let (Just db) = forth vw dbs [lp,cd]> db({0 := ((("B000002UB2","Abbey Road"),"Beatles"),0),
1 := ((("B000002HCO","Debut"),"Bjork"),1)},{(0,0) := "Come Together",(0,1) := "Something",...})
![Page 29: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/29.jpg)
Introduction Data Refinement Implementation Example Conclusion
Conclusion
Conclusions:Type-safe formalization of two-level data transformations.Haskell’s type system, namely GADTs, allows a direct andelegant implementation.Allows flexible rewrite systems but termination and confluenceis not guaranteed.Restricted to single-recursive data types.
Current status:Coupled transformation of data processing programs, such asqueries expressed in a point-free notation.Front-ends for XML and SQL database schemas.
Future work:Bi-directional programming.Data types with invariants.Mutually-recursive data types.
![Page 30: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/30.jpg)
Introduction Data Refinement Implementation Example Conclusion
Conclusion
Conclusions:Type-safe formalization of two-level data transformations.Haskell’s type system, namely GADTs, allows a direct andelegant implementation.Allows flexible rewrite systems but termination and confluenceis not guaranteed.Restricted to single-recursive data types.
Current status:Coupled transformation of data processing programs, such asqueries expressed in a point-free notation.Front-ends for XML and SQL database schemas.
Future work:Bi-directional programming.Data types with invariants.Mutually-recursive data types.
![Page 31: T yp e-Safe Tw o-Level Dat a T ran sfo rm ationjno/ps/fm06slides.pdf · T yp e-Safe Tw o-Level Dat a T ran sfo rm ation Alci no Cunha , Jos «e N uno O live ira, an d Jo os t Visse](https://reader033.fdocuments.in/reader033/viewer/2022041611/5e37efae7ea5a406467f1483/html5/thumbnails/31.jpg)
Introduction Data Refinement Implementation Example Conclusion
Conclusion
Conclusions:Type-safe formalization of two-level data transformations.Haskell’s type system, namely GADTs, allows a direct andelegant implementation.Allows flexible rewrite systems but termination and confluenceis not guaranteed.Restricted to single-recursive data types.
Current status:Coupled transformation of data processing programs, such asqueries expressed in a point-free notation.Front-ends for XML and SQL database schemas.
Future work:Bi-directional programming.Data types with invariants.Mutually-recursive data types.