# Haskell/List of topics

Here is a non-exhaustive list of topics covered by the book modules (as of now, covering the first three chapters). Right now it is mostly meant as a tool to make it easier for contributors to visualize the structure of the book as a whole, but it is hoped that it will eventually evolve into a full-fledged study guide.
Haskell Basics :
| Old structure Getting set up Installation and start-up Variables and functions Introduction to variables and functions (with first contact with types) Immutability of variables Lists and tuples Introduction to lists List building with (:) Introduction to tuples (with the first example of pattern matching) Next steps Source files Introduction to control structures (if / case, with a teaser to PM) Piece-wise function definition Function composition Let bindings Type basics Introduction / motivation Simple examples (with a teaser to number classes) Functional types Introduction to polymorphic types Type signatures Type inference Simple input and output Introduction / motivation Actions Actions and types IO trail pointers | New structure Getting set up Installation and start-up GHCi as a calculator Defining functions Source files Introduction to definitions (functions, variables), first contact with types Examples only with Int where clause, layout Immutability of variables Truth values (for defining more interesting functions) Examples with booleans 1 == 2 Guards More examples Type basics Introduction / motivation False < 2 Type signatures, type inference Int, Bool, Function types Introduction to polymorphic types, mention of numeric classes for overloading, Double for floating point numbers Tuples and lists Introduction to tuples (pattern matching) - useful for returning multiple results Lists are head + tail, (:) and Pattern matching: (:) and can also be used on the left-hand side Building a vocabulary All syntactic pieces in place, explain that the reader now has to learn lots of types and functions Example program, exercises! Cheat sheet: Prelude types, Prelude functions, sorted by category. Each category comes with a short explanation / overview of the most important concepts / functions; link to subsequent chapters for more detailed explanations. Not sure how to organize this. Functions Lists Strings Input / Output Working with lists List comprehensions Simple input and output Introduction / motivation Actions Actions and types IO trail pointers |
Elementary Haskell :
| Old structure Recursion Introduction to recursion List-based recursion (first example of PM on lists) More about lists Constructing and modifying lists (spiraling review, needs streamlining, teaser to currying) Dot dot notation Infinite lists (first mention of laziness) head / tail map (first mention of point-free style; introduces section-functions without commenting) List processing Folds (first data structure analysis, more discussions on laziness) Scans Filtering List comprehension (maybe the PM example needs to be sweetened) Type declarations Introduction / motivation data / constructor functions Algebraic datatype deconstruction (heavy implicit PM usage) type Pattern matching Detailed explanation of PM Constructors and PM Introduction to records As-patterns PM with literals PM examples Control structures Weakly spiraling review of if (almost redundant) Spiraling review of case (accounting for PM, comparing to piece-wise) Guards More on functions let / where (seen as private function definitions) Lambdas Infix versus prefix (first explicit mention of the syntax variations) Higher-order functions Quicksort examples Associativeness of type signatures (with a very demanding exercise) Currying | New structure Recursion This might fit in basics, somewhere between the two modules on lists, maybe? Introduction to recursion List-based recursion More on functions It seems quite unnatural to have this and Control Structures only at the end of the chapter. let / where (seen as private function definitions) Lambdas (note that all pattern matching examples should ideally return to Pattern Matching) Infix versus prefix (first explicit mention of the syntax variations) More about lists One of the existing list modules in Elementary might be merged away. Dot dot notation Infinite lists map / filter (or maybe in basics, alongside comprehensions?) Folds / Scans (first data structure analysis, more discussions on laziness) Type declarations Introduction / motivation data / constructor functions Algebraic datatype deconstruction type Pattern matching Detailed explanation of PM Constructors and PM Introduction to records As-patterns PM with literals PM examples Control structures This chapter makes a lot more sense with the new Basics if / then / else and comparison to guards case and comparison to piece-wise Indentation Fits with the nearby modules on syntax. In fact, I can even see how a streamlined version of this could be merged into Control Structures Layout Conversion to C-style Using GHCi effectively |
Intermediate Haskell :
| Old structure Modules Introduction / motivation Importing Exporting Indentation Layout Conversion to C-style More on datatypes Enumerations (without deriving context - first usage of deriving) Records Parametrized types (should focus on usage with constructors) (newtype is missing) Trees (and their map and fold) map and fold for arbitrary datatypes Class declarations Classes Deriving Inheritance Prelude classes (diagram only) (desperately lacks discussion on numerical classes) Classes and types Type constraints (on signatures, constructors and instances. Mentions newtype) (stub-like module) Keeping track of state (empty, should be deleted?) | New structure Modules Introduction / motivation Importing Exporting Building a standalone application Currently in Haskell in Practice/General Practices. This definitely should be in the Beginner's trail. Higher-order functions Having this module tucked at the end of Elementary felt kinda restraining Quicksort examples Associativeness of type signatures (with a very demanding exercise) Currying More on datatypes Enumerations (without deriving context - first usage of deriving) Records Parametrized types (should focus on usage with constructors) (newtype is missing) Other data structures Trees (and their map and fold) map and fold for arbitrary datatypes (temporary location) Classes The division between the current modules on classes seem arbitrary, so this proposal merges them. Class declarations Inheritance Type constraints (on signatures, constructors and instances. Mentions newtype) Deriving (note the change in topic order) Standard classes The idea is expanding the diagram currently at Class Declarations to a full-fledged module. This might be a more natural location for exploration of Prelude types than the cheat sheets of Haskell Basics Also, derivation might fit better if moved here as well (although that might make the module too long) Note: Keeping track of state should be deleted, there is probably no good reason to attempt such a module without a proper discussion of monads. |