@@ -31,47 +31,59 @@ follow the rest of this outline in particular.
31
31
* [ All About Exceptions] ( ../content/all-about-exceptions.md )
32
32
* Basics of lazy evaluation
33
33
34
- ## General patterns
35
-
36
- This section demonstrates some common Haskell coding patterns, how they work,
37
- when they're useful, and possible pitfalls.
38
-
39
- * [ Monad Transformers] ( ../content/monad-transformers.md )
40
- * Continuation Passing Style
41
-
42
34
## Data structures
43
35
44
36
Covers some of the most commonly used data structures in Haskell, and the
45
37
libraries providing them.
46
38
47
- * vector
39
+ * vector (cover vector-algorithms)
48
40
* containers
49
41
* unordered-containers
50
- * text
42
+ * text (cover text-icu)
51
43
* bytestring
52
44
53
- ## Standard programming needs
54
-
55
- * Calling external processes (can include [ Data.Conduit.Process] ( https://www.fpcomplete.com/user/snoyberg/library-documentation/data-conduit-process ) )
56
- * Builders and difference lists
57
-
58
- ## Concurrency and parallelism
45
+ ## General patterns
59
46
60
- Simon Marlow's book [ Parallel and Concurrent Programming in
61
- Haskell] ( http://chimera.labs.oreilly.com/books/1230000000929/index.html ) is a
62
- highly recommended read on the subject. In addition, we have the following
63
- topics:
47
+ This section demonstrates some common Haskell coding patterns, how they work,
48
+ when they're useful, and possible pitfalls.
64
49
65
- * The async package
66
- * Common concurrency patterns (e.g., the auto-update package)
67
- * Concurrency patterns: worker threads, signals, blocking on TVars
68
- * STM: blocking semantics around mutable variables
50
+ * [ Monad Transformers] ( ../content/monad-transformers.md )
51
+ * Continuation Passing Style
52
+ * Builders and difference lists
69
53
70
54
## Testing
71
55
72
56
* QuickCheck
73
57
* hspec, tasty, others?
74
58
59
+ ## Serialization
60
+
61
+ * binary/cereal
62
+ * blaze-builder/bytestring-builder
63
+ * blaze-html
64
+ * attoparsec
65
+ * aeson
66
+ * yaml
67
+ * xml-conduit/html-conduit
68
+ * base16-bytestring/base64-bytestring
69
+
70
+ ## Standard programming needs
71
+
72
+ * Calling external processes (can include [ Data.Conduit.Process] ( https://www.fpcomplete.com/user/snoyberg/library-documentation/data-conduit-process ) )
73
+ * HTTP client library
74
+ * Command line argument parsing optparse-applicative
75
+ * cryptohash
76
+ * time
77
+ * Random number generation (mwc-random)
78
+ * Possibly others from: https://www.fpcomplete.com/school/using-fphc/recommended-libraries
79
+
80
+ ## Best practices
81
+
82
+ * [ Exceptions best practices] ( ../content/exceptions-best-practices.md )
83
+ * Typeclasses versus records
84
+ * "Good" use of typeclass extensions
85
+ * Proper error reporting (Either, Maybe, ErrorT, exceptions package and using MonadThrow)
86
+
75
87
## Streaming data
76
88
77
89
Streaming data libraries allow you to process large amounts of input with
@@ -88,6 +100,20 @@ the following provides an overview of the different options.
88
100
* https://www.fpcomplete.com/user/snoyberg/library-documentation/resourcet
89
101
* http://www.yesodweb.com/blog/2014/03/network-conduit-async
90
102
* https://www.fpcomplete.com/user/snoyberg/library-documentation/vectorbuilder
103
+ * conduit-combinators
104
+
105
+ ## Concurrency and parallelism
106
+
107
+ Simon Marlow's book [ Parallel and Concurrent Programming in
108
+ Haskell] ( http://chimera.labs.oreilly.com/books/1230000000929/index.html ) is a
109
+ highly recommended read on the subject. In addition, we have the following
110
+ topics:
111
+
112
+ * The async package
113
+ * Common concurrency patterns (e.g., the auto-update package)
114
+ * Concurrency patterns: worker threads, signals, blocking on TVars
115
+ * STM: blocking semantics around mutable variables
116
+ * resource-pool
91
117
92
118
## Web programming
93
119
@@ -98,12 +124,6 @@ individual approaches. For now:
98
124
* [ Web Application Interface] ( https://github.com/yesodweb/yesodweb.com-content/blob/master/book/asciidoc/web-application-interface.asciidoc )
99
125
* [ Yesod Web Framework] ( http://www.yesodweb.com/book )
100
126
101
- ## Advanced topics
102
-
103
- * [ Primitive Haskell] ( ../content/primitive-haskell.md )
104
- * https://wiki.haskell.org/Evaluation_order_and_state_tokens
105
- * 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.
106
-
107
127
## Big library guide
108
128
109
129
The following libraries are somewhat "large" in the sense that they address
@@ -123,28 +143,19 @@ preludes (in alphabetical order).
123
143
* basic-prelude
124
144
* classy-prelude
125
145
126
- ## Best practices
127
-
128
- * [ Exceptions best practices] ( ../content/exceptions-best-practices.md )
129
- * Typeclasses versus records
130
- * "Good" use of typeclass extensions
131
- * Proper error reporting (Either, Maybe, ErrorT, exceptions package and using MonadThrow)
132
-
133
- ## Serialization
146
+ ## Advanced topics
134
147
135
- * binary/cereal
136
- * blaze-builder/bytestring-builder
137
- * blaze-html
138
- * attoparsec
139
- * aeson
140
- * yaml
141
- * xml-conduit
148
+ * [ Primitive Haskell] ( ../content/primitive-haskell.md )
149
+ * https://wiki.haskell.org/Evaluation_order_and_state_tokens
150
+ * 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.
142
151
143
152
## Database Programming
144
153
145
154
* persistent
146
155
* esqueleto
147
156
* opaleye
157
+ * mysql-simple
158
+ * postgresql-simple
148
159
149
160
## Debugging/optimizing
150
161
0 commit comments