mathematical structures for data types with restricted
play

Mathematical Structures for Data Types with Restricted - PowerPoint PPT Presentation

Mathematical Structures for Data Types with Restricted Parametricity Trends in Functional Programming, 12-14th June, St. Andrews Dominic Orchard Alan Mycroft Mathematically structured programming e.g. monoids, groups, functors , monads ,


  1. Mathematical Structures for Data Types with Restricted Parametricity Trends in Functional Programming, 12-14th June, St. Andrews Dominic Orchard Alan Mycroft

  2. Mathematically structured programming • e.g. monoids, groups, functors , monads , comonads, monoidal functors (idioms), etc. • Design pattern • Abstraction (detail hiding) • Generalisation (e.g. for all functors...) • Eases writing, reading, and reasoning

  3. Parametric data types in Haskell as functors class Functor f where fmap :: ( a → b ) → f a → f b instance [ ] where fmap = map • fmap is polymorphic in a , b i.e. ∀ a,b • f is a parametric data type , meaning ∀ a . a ∈ Type ⇒ f a ∈ Type

  4. ... but some data types are restricted in their parametricity • e.g. sets implemented by balanced binary trees i.e. ∀ a . a ∈ Type ∧ a is ordered ⇒ Set a ∈ Type • e.g. unboxed arrays of primitive (fixed size) types i.e. ∀ a . a ∈ Type ∧ a is primitive ⇒ UArray a ∈ Type • Efficient data types often restricted

  5. Is Set a functor? Set.map :: ( Ord a, Ord b ) ⇒ ( a → b ) → Set a → Set b ( ) class Ord a where ... class Functor f where fmap has no fmap :: ( a → b ) → f a → f b constraints i.e. polymorphic; instance Functor Set where fmap = Set.map Set.map is constrained No instances for (Ord b, Ord a) i.e. restricted arising from a use of `Set.map' polymorphic In the expression: Set.map In an equation for `fmap': fmap = Set.map In the instance declaration for `Functor Set'

  6. This paper... • Data types with restricted parametricity: ‣ usually real-world, efficient data types, but ‣ do not fit the language abstractions used; ‣ do not fit the mathematics used. • This paper, for functors , monads , and comonads : ‣ fixes the mathematics; ‣ shows a language approach. • Essential insight: restricted parametricity = subcategories

  7. Parametric polymorphism • Universal quantification ∀ α . α fmap :: ∀ a,b . ( a → b ) → ( f a → f b ) • Uniform behaviour at any parameter type

  8. Restricted parametric polymorphism • Quantification over a subset of types ∀ α . α ∈ A ⇒ α • Described by ad-hoc polymorphism ‣ Behaviour may vary at parameter type • In Haskell, type classes and class constraints Set.map :: ∀ a,b . ( Ord a , Ord b ) ⇒ ( a → b ) → ( f a → f b )

  9. What is the categorical interpretation of restricted parametricity?

  10. Categorical interpretation of programs • Programs make definitions in Hask • objects = types • morphisms (maps between objects) = functions id String f id Int Int String g g ◦ f .... Bool id Bool

  11. Functors • Map between objects & morphisms of categories F D C F ( A ) A F ( f ) f F ( B ) F ( g ◦ f ) B g ◦ f g F ( g ) F ( C ) C

  12. Categorical interpretation: Functor class • Data type: data F a = ... ‣ object-mapping on Hask i.e. F : |Hask| → |Hask| • Instance of Functor class Functor f where fmap :: ( a → b ) → f a → f b Hask objects ∀ a . a Hask morphisms ∀ a,b . a → b ‣ morphism-mapping on Hask via fmap ∴ Functor describes endofunctors on Hask (from a category back to the same category)

  13. Categorical interpretation: Functor class [ a ] Hask Hask [ A ] A map f f [ B ] map B g ◦ f ( g ◦ f ) g map g [ C ] C

  14. Categorical interpretation of class constraints • Instances of a type class define a subset of all types Eq ⊆ | Hask| i.e. class Eq a where ( == ) :: a → a → Bool instance Eq Int where ... instance Eq Bool where ... • A type class C defines a subcategory of Hask ‣ objects: ∀ a . C a ⇒ a ‣ morphisms: ∀ a,b . ( C a, C b ) ⇒ a → b

  15. Set is a functor Set.map :: ( Ord a, Ord b ) ⇒ ( a → b ) → Set a → Set b maps morphisms of Ord -subcategory ∴ Set is a functor from Ord - subcategory to Hask Set : Ord → Hask • but Functor describes endofunctors on Hask i.e. F : Hask → Hask • Type error manifests the mathematical mismatch • How then to describe this in Haskell?

  16. Language solution: use constraint families * class ExoFunctor f where constraint SubCat f a fmap :: (SubCat f a, SubCat f b) ⇒ (a → b) → f a → f b • Allows constraint per instance of the Functor class instance ExoFunctor Set where constraint SubCat Set a = Ord a fmap = Set.map *[Orchard, Schrijvers, 2010]

  17. Language solution (current): constraint-kinded type families * class ExoFunctor f where type SubCat f a :: Constraint fmap :: ( SubCat f a, SubCat f b ) ⇒ ( a → b ) → f a → f b • Allows constraint per instance of the Functor class instance ExoFunctor Set where type SubCat Set a = Ord a fmap = Set.map *[implemented by Bolingbroke, 2011, http://blog.omega-prime.co.uk/?p=127]

  18. Generalisation... class ExoFunctor f where type SubCat f a b :: Constraint fmap :: ( SubCat f a b ) ⇒ ( a → b ) → f a → f b • Allows more interesting structures e.g. ∀ a,b . ( Show a ) ⇒ a → b • Pre-proceeding: (non-full) subcategory of Hask with all Hask objects but only morphisms from Show objects • Actually slightly more subtle (see post-proceeding)

  19. Conclusion • Slogan : restricted parametricity = subcategories • Extended to relative monads (Altenkirch et. al) and relative comonads (with underlying non-endofunctor) • All details in paper • Provides elegant mathematical structuring to real-world, efficient data types Thank you. http://dorchard.co.uk

  20. Additional slides

  21. Ad-hoc polymorphism • Restricted quantification ∀ α . α ∈ A ⇒ α • Behaviour may vary at parameter type eq :: Eq t ⇒ t → t → Bool Haskell eq : ‘‘ t → ‘‘ t → bool SML Java ‹ T extends Comparable › boolean eq ( T x, T y )

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend