Start to flesh out outline
This commit is contained in:
parent
7d916e2c14
commit
a10ca72751
6 changed files with 190 additions and 71 deletions
23
content/all-about-exceptions.md
Normal file
23
content/all-about-exceptions.md
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
title: All About Exceptions
|
||||||
|
author: Michael Snoyman <michael@fpcomplete.com>
|
||||||
|
description: All of the necessary information to understand exceptions
|
||||||
|
first-written: 2015-02-24
|
||||||
|
last-updated: 2015-02-24
|
||||||
|
last-reviewed: 2015-02-24
|
||||||
|
---
|
||||||
|
|
||||||
|
Should cover:
|
||||||
|
|
||||||
|
* Throwing exceptions
|
||||||
|
* Catching exceptions
|
||||||
|
* Exceptions in pure code
|
||||||
|
* Difference between `throw` and `throwIO`
|
||||||
|
* Async exceptions
|
||||||
|
* Catching all exceptions
|
||||||
|
* http://www.yesodweb.com/blog/2014/05/exceptions-cont-monads
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/general-haskell/exceptions/exceptions-and-monad-transformers
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/general-haskell/exceptions/catching-all-exceptions
|
||||||
|
* Exceptions problems. Can't wrap. Can't have two exceptions. No idea how exception was thrown.
|
||||||
|
* [Wrap exceptions to provide context](http://stackoverflow.com/questions/27346380/how-to-wrap-exceptions-to-provide-context)
|
||||||
|
* [General dislike of exceptions](http://www.reddit.com/r/haskell/comments/2ety9f/new_blog_post_dealing_with_asynchronous/ck3fkbp)
|
17
content/basic-tooling-guide.md
Normal file
17
content/basic-tooling-guide.md
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Basic Tooling Guide
|
||||||
|
author: Michael Snoyman <michael@fpcomplete.com>
|
||||||
|
description: Getting up-and-running to develop Haskell code
|
||||||
|
first-written: 2015-02-24
|
||||||
|
last-updated: 2015-02-24
|
||||||
|
last-reviewed: 2015-02-24
|
||||||
|
---
|
||||||
|
|
||||||
|
Needs to be written. Basics:
|
||||||
|
|
||||||
|
* [Installing dev tools](http://www.stackage.org/install)
|
||||||
|
* Overview of different command line tools (ghc, cabal)
|
||||||
|
* Stackage
|
||||||
|
* Sandboxing
|
||||||
|
* Starting a project
|
||||||
|
* http://www.yesodweb.com/blog/2014/09/woes-multiple-package-versions
|
21
content/common-language-extensions.md
Normal file
21
content/common-language-extensions.md
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
title: Common Language Extensions
|
||||||
|
author: Michael Snoyman <michael@fpcomplete.com>
|
||||||
|
description: Explanation of some of common GHC-supported language extensions
|
||||||
|
first-written: 2015-02-24
|
||||||
|
last-updated: 2015-02-24
|
||||||
|
last-reviewed: 2015-02-24
|
||||||
|
---
|
||||||
|
|
||||||
|
Should be filled out. For now, take a [link to some School of Haskell
|
||||||
|
content](https://www.fpcomplete.com/school/to-infinity-and-beyond/pick-of-the-week/guide-to-ghc-extensions).
|
||||||
|
|
||||||
|
* OverloadedStrings
|
||||||
|
* ViewPatterns
|
||||||
|
* PatternGuards
|
||||||
|
* TypeFamilies
|
||||||
|
* FunDeps
|
||||||
|
* MPTC
|
||||||
|
* GADT
|
||||||
|
* TemplateHaskell
|
||||||
|
* QuasiQuotes
|
13
content/common-typeclasses.md
Normal file
13
content/common-typeclasses.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
title: Common Type Classes
|
||||||
|
author: Michael Snoyman <michael@fpcomplete.com>
|
||||||
|
description: Commonly used typeclasses
|
||||||
|
first-written: 2015-02-24
|
||||||
|
last-updated: 2015-02-24
|
||||||
|
last-reviewed: 2015-02-24
|
||||||
|
---
|
||||||
|
|
||||||
|
Should be filled out. For now, take a [link to the typeclassopedia
|
||||||
|
](https://wiki.haskell.org/Typeclassopedia)
|
||||||
|
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/general-haskell/basics/functors-applicative-functors-and-monads
|
14
content/monad-transformers.md
Normal file
14
content/monad-transformers.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
title: Monad Transformers
|
||||||
|
author: Michael Snoyman <michael@fpcomplete.com>
|
||||||
|
description: What transformers are, why they're useful, what to be aware of
|
||||||
|
first-written: 2015-02-24
|
||||||
|
last-updated: 2015-02-24
|
||||||
|
last-reviewed: 2015-02-24
|
||||||
|
---
|
||||||
|
|
||||||
|
* Basic transformers
|
||||||
|
* Simple examples of usage
|
||||||
|
* Pitfalls of Writer laziness
|
||||||
|
* Dealing with exceptions and control structures (monad-control and exceptions packages), and losing state
|
||||||
|
* Monad transformers: [EitherT vs IO](http://stackoverflow.com/questions/25752900/exceptions-and-monad-transformers/25753497#25753497)
|
|
@ -20,68 +20,133 @@ the issue tracker.
|
||||||
__NOTE__ This list was copy-pasted from MezzoHaskell, and needs to be
|
__NOTE__ This list was copy-pasted from MezzoHaskell, and needs to be
|
||||||
restructured correctly into outline format.
|
restructured correctly into outline format.
|
||||||
|
|
||||||
## "Core"
|
## Core information
|
||||||
|
|
||||||
* Exception handling
|
You understand the basics of Haskell syntax and some common library functions.
|
||||||
* Asynchronous exceptions
|
This section should get you up to speed with many commonly used features of
|
||||||
* [Exceptions best practices](../content/exceptions-best-practices.md)
|
Haskell, to provide a foundation for understanding code in general, and to
|
||||||
* Basic typeclasses (Monoid, Applicative, Alternative)
|
follow the rest of this outline in particular.
|
||||||
|
|
||||||
## Common techniques
|
* [Basic Tooling Guide](../content/basic-tooling-guide.md)
|
||||||
|
* [Common Typeclasses](../content/common-typeclasses.md)
|
||||||
|
* [Common Language Extensions](../content/common-language-extensions.md)
|
||||||
|
* [All About Exceptions](../content/all-about-exceptions.md)
|
||||||
|
* Haskell glossary. Define commonly used but not-commonly-understood terms (example: covariant, contravaraint, positive position, negative position)
|
||||||
|
|
||||||
* Monad transformers
|
## General patterns
|
||||||
* monad-control
|
|
||||||
* CPS
|
|
||||||
|
|
||||||
## Language extensions
|
This section demonstrates some common Haskell coding patterns, how they work,
|
||||||
|
when they're useful, and possible pitfalls.
|
||||||
|
|
||||||
* OverloadedStrings
|
* [Monad Transformers](../content/monad-transformers.md)
|
||||||
* ViewPatterns
|
* Continuation Passing Style
|
||||||
* PatternGuards
|
|
||||||
* TypeFamilies
|
|
||||||
* FunDeps
|
|
||||||
* MPTC
|
|
||||||
* GADT
|
|
||||||
* TemplateHaskell
|
|
||||||
* QuasiQuotes
|
|
||||||
|
|
||||||
## Data structures
|
## Data structures
|
||||||
|
|
||||||
|
Covers some of the most commonly used data structures in Haskell, and the
|
||||||
|
libraries providing them.
|
||||||
|
|
||||||
* vector
|
* vector
|
||||||
* containers
|
* containers
|
||||||
* unordered-containers
|
* unordered-containers
|
||||||
* text
|
* text
|
||||||
* bytestring
|
* bytestring
|
||||||
|
|
||||||
|
## Standard programming needs
|
||||||
|
|
||||||
|
* Calling external processes (can include [Data.Conduit.Process](https://www.fpcomplete.com/user/snoyberg/library-documentation/data-conduit-process))
|
||||||
|
* Builders and difference lists
|
||||||
|
|
||||||
|
## Concurrency and parallelism
|
||||||
|
|
||||||
|
Simon Marlow's book [Parallel and Concurrent Programming in
|
||||||
|
Haskell](http://chimera.labs.oreilly.com/books/1230000000929/index.html) is a
|
||||||
|
highly recommended read on the subject. In addition, we have the following
|
||||||
|
topics:
|
||||||
|
|
||||||
|
* The async package
|
||||||
|
* Common concurrency patterns (e.g., the auto-update package)
|
||||||
|
* Concurrency patterns: worker threads, signals, blocking on TVars
|
||||||
|
* STM: blocking semantics around mutable variables
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
* QuickCheck
|
||||||
|
* hspec, tasty, others?
|
||||||
|
|
||||||
|
## Streaming data
|
||||||
|
|
||||||
|
Streaming data libraries allow you to process large amounts of input with
|
||||||
|
reliable resource usage, be that memory, file descriptors, or other resources.
|
||||||
|
There are a number of different libraries for doing this in Haskell. Instead of
|
||||||
|
a single library, each library can have its own subsection here. In addition,
|
||||||
|
the following provides an overview of the different options.
|
||||||
|
|
||||||
|
* [Overview of Streaming Data Libraries](../content/overview-streaming-data-libraries.md)
|
||||||
|
|
||||||
|
### conduit
|
||||||
|
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/library-documentation/conduit-overview
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/library-documentation/resourcet
|
||||||
|
* http://www.yesodweb.com/blog/2014/03/network-conduit-async
|
||||||
|
* https://www.fpcomplete.com/user/snoyberg/library-documentation/vectorbuilder
|
||||||
|
|
||||||
|
## Web programming
|
||||||
|
|
||||||
|
Web programming is another topic with many different approaches. Like streaming
|
||||||
|
data, we need an overview of the different options, and then a drilldown on
|
||||||
|
individual approaches. For now:
|
||||||
|
|
||||||
|
* [Web Application Interface](https://github.com/yesodweb/yesodweb.com-content/blob/master/book/asciidoc/web-application-interface.asciidoc)
|
||||||
|
* [Yesod Web Framework](http://www.yesodweb.com/book)
|
||||||
|
|
||||||
|
## Advanced topics
|
||||||
|
|
||||||
|
* [Primitive Haskell](../content/primitive-haskell.md)
|
||||||
|
* https://wiki.haskell.org/Evaluation_order_and_state_tokens
|
||||||
|
* Cabal trickery for backwards compatibility: Cabal CPP macros. Paths module. Flags. How to test for windows. Defaulting macros for ghci. Flags to either use new library version or another package (bytestring-builder) and set a CPP variable.
|
||||||
|
|
||||||
|
## Big library guide
|
||||||
|
|
||||||
|
The following libraries are somewhat "large" in the sense that they address
|
||||||
|
many different concerns.
|
||||||
|
|
||||||
|
* lens
|
||||||
|
* mono-traversable
|
||||||
|
|
||||||
|
### Alternate Preludes
|
||||||
|
|
||||||
|
Sometimes it is useful to use an alternative to the standard `Prelude`. Reasons
|
||||||
|
include avoiding cross-version incompatibility, support for better data
|
||||||
|
structures, and avoiding partial functions. Here are some commonly used
|
||||||
|
preludes (in alphabetical order).
|
||||||
|
|
||||||
|
* base-prelude
|
||||||
|
* basic-prelude
|
||||||
|
* classy-prelude
|
||||||
|
|
||||||
|
## Best practices
|
||||||
|
|
||||||
|
* [Exceptions best practices](../content/exceptions-best-practices.md)
|
||||||
|
* Typeclasses versus records
|
||||||
|
* "Good" use of typeclass extensions
|
||||||
|
* Proper error reporting (Either, Maybe, ErrorT, exceptions package and using MonadThrow)
|
||||||
|
|
||||||
## Serialization
|
## Serialization
|
||||||
|
|
||||||
* binary/cereal
|
* binary/cereal
|
||||||
* blaze-builder
|
* blaze-builder/bytestring-builder
|
||||||
* blaze-html
|
* blaze-html
|
||||||
* attoparsec
|
* attoparsec
|
||||||
* aeson
|
* aeson
|
||||||
* yaml
|
* yaml
|
||||||
* xml-conduit
|
* xml-conduit
|
||||||
|
|
||||||
## Other libraries
|
## Database Programming
|
||||||
|
|
||||||
* system-filepath
|
* persistent
|
||||||
* esqueleto
|
* esqueleto
|
||||||
|
* opaleye
|
||||||
## Open debates
|
|
||||||
|
|
||||||
* Streaming data
|
|
||||||
* conduit
|
|
||||||
* iteratee/enumerator
|
|
||||||
* pipes
|
|
||||||
* Typeclasses versus records
|
|
||||||
* "Good" use of typeclass extensions
|
|
||||||
* Proper error reporting (Either, Maybe, ErrorT)
|
|
||||||
|
|
||||||
## Tools
|
|
||||||
|
|
||||||
* cabal
|
|
||||||
* Test framework
|
|
||||||
|
|
||||||
## Debugging/optimizing
|
## Debugging/optimizing
|
||||||
|
|
||||||
|
@ -93,37 +158,3 @@ restructured correctly into outline format.
|
||||||
* Pragmas (UNPACK, INLINE, ...)
|
* Pragmas (UNPACK, INLINE, ...)
|
||||||
* Heap profiling
|
* Heap profiling
|
||||||
* Looking at GHC core
|
* Looking at GHC core
|
||||||
|
|
||||||
## Misc topics (not sorted in yet, just added now)
|
|
||||||
|
|
||||||
* Builders
|
|
||||||
* Monad transformers: [EitherT vs IO](http://stackoverflow.com/questions/25752900/exceptions-and-monad-transformers/25753497#25753497)
|
|
||||||
* [Wrap exceptions to provide context](http://stackoverflow.com/questions/27346380/how-to-wrap-exceptions-to-provide-context)
|
|
||||||
* [General dislike of exceptions](http://www.reddit.com/r/haskell/comments/2ety9f/new_blog_post_dealing_with_asynchronous/ck3fkbp)
|
|
||||||
* STM: blocking semantics around mutable variables
|
|
||||||
* The async package
|
|
||||||
* exceptions package and using MonadThrow
|
|
||||||
* Tutorial on Vector
|
|
||||||
* Concurrency patterns: worker threads, signals, blocking on TVars
|
|
||||||
* Cabal CPP macros. Paths module. Flags. How to test for windows. Defaulting macros for ghci. Flags to either use new library version or another package (bytestring-builder) and set a CPP variable.
|
|
||||||
* Exceptions problems. Can't wrap. Can't have two exceptions. No idea how exception was thrown.
|
|
||||||
* Proper way to call external programs
|
|
||||||
* Haskell glossary. Define commonly used but not-commonly-understood terms (example: covariant, contravaraint, positive position, negative position)
|
|
||||||
* [Primitive Haskell](../content/primitive-haskell.md)
|
|
||||||
|
|
||||||
## External content worth importing:
|
|
||||||
|
|
||||||
This is starting off as a biased list of my own content. Others should feel free to add to it themselves.
|
|
||||||
|
|
||||||
* Everything from: https://www.fpcomplete.com/user/snoyberg/library-documentation, especially once we have export-to-SoH functionality
|
|
||||||
* https://www.fpcomplete.com/user/snoyberg/general-haskell/exceptions/exceptions-and-monad-transformers
|
|
||||||
* https://www.fpcomplete.com/user/snoyberg/general-haskell/exceptions/catching-all-exceptions
|
|
||||||
* https://www.fpcomplete.com/user/snoyberg/general-haskell/basics/functors-applicative-functors-and-monads
|
|
||||||
* https://github.com/yesodweb/yesodweb.com-content/blob/master/book/asciidoc/web-application-interface.asciidoc
|
|
||||||
* http://www.yesodweb.com/blog/2014/09/woes-multiple-package-versions
|
|
||||||
* http://www.yesodweb.com/blog/2014/05/exceptions-cont-monads
|
|
||||||
* http://www.yesodweb.com/blog/2014/03/network-conduit-async
|
|
||||||
|
|
||||||
Stuff from Haskell Wiki?
|
|
||||||
|
|
||||||
* https://wiki.haskell.org/Evaluation_order_and_state_tokens
|
|
||||||
|
|
Loading…
Reference in a new issue