Basically, the objective of this project is to use some objects and also the algebra among them (fuctors, monads, functor algebras , monad algebras), originating from Category Theory, with the help of Haskell PL to create alternative solution strategies to the problems (failure detection, purity, avoiding side-effects, ...) existing in Computer Science, particularly, in the context of functional programming.
1. Category Theory - As a mathematical background
· Categories
· Functors
· Natural Transformations
· Monads
2. Haskell programming language
· Basic Classifications of programming languages
· What is Functional Programming
· What is Haskell
· Haskell's Type System (Static and Strong)
o Type Signature
o Type Variables
o Type Classes
o Creating new types in Haskell
o Definition of Haskell's HASK category (Types are Objects, Functions between objects are Morphisms)
3. Functors of Haskell
· From theory to coding (theory and its representation in Haskell)
· Proofs
o Maybe as a functor
o List as a functor
o State as a functor
o Continuation as a functor
o Either as a functor
o Reader as a functor
o Writer as a functor
4. Monads of Haskell
· From theory to coding (theory and its representation in Haskell)
· Proofs
o Maybe as a monad -- Failure Detection
o List as a monad -- Non Determinism
o State as a monad -- Providing Purity
o Continuation as a monad -- Providing Continuation
o Either as a monad -- Exception Detection
o Reader as a monad -- Dependency
o Writer as a monad -- Output
o IO as an impure monad with the help of State monad -- Avoiding Side Effects
· Examples of monadic programming to show the advantages of each.
· Monad Transformers of Haskell
o MaybeT
o ListT
o StateT
o Examples
5. Functor Algebras
· Theory
o F-Algebras
o Initial Algebras
o Catamorphisms
o Paramorphisms
· Haskell Representations (if possible)
6. Monad Algebras
· Theory
o T-Algebra
· Haskell Representations (if possible)
7. Conclusion