Haskell/Experimental Modules/Cheat sheet prototype 1
Cheat sheet[edit  edit source]
The table is built with templates to make things less tedious. Bold face usage on the function names is a naïve first approach on how to call the attention of newbies for the breadandbutter functions (when contrasted to the advanced stuff). To trigger bold face, set the "key" parameter of the template to some nonnull value.
Naming the last column "Evaluates to" is quite clever because the entries can be really short that way. Doesn't always work, but I like it.  apfeλmus 19:15, 15 May 2010 (UTC)
We can steal the categorization and such from the Prelude documentation.
Name  Type signature  Evaluates to  Example 

Basic functions  basic  
head 
:: [a] > a 
First element of a list.  head [1,2,3] = 1

tail 
:: [a] > [a] 
All elements after the first one.  tail [1,2,3] = [2,3]

last 
:: [a] > a 
Last element.  last [1,2,3] = 3

init 
:: [a] > [a] 
All elements before the last one.  init [1,2,3] = [1,2]

null 
:: [a] > Bool 
Whether the list is empty.  null ['a','x'] = False null [] = True

length 
:: [a] > Int 
Number of elements.  length [True,False] = 2

(!!) 
:: [a] > Int > a 
Element at a given position, starting at 0  [4,5,6] !! 1 = 5.

reverse 
:: [a] > [a] 
Elements in reverse order.  reverse [1,2,3] = [3,2,1]

map 
:: (a > b) > [a] > [b] 
Apply a function to each element.  map f [1,2,3] = [f 1, f 2, f 3]

filter 
:: (a > Bool) > [a] > [a] 
Return only those elements that satisfy the predicate.  filter odd [1..7] = [1,3,5,7]

(++) 
:: [a] > [a] > [a] 
Append two lists.  [1,2] ++ [3,4] = [1,2,3,4]

[] 
:: [a] 
The empty list.  []

(:) 
:: a > [a] > [a] 
Prepend one element.  [1,2,3] = 1:(2:(3:[]))

Folds and scans  advanced  
foldl 
:: (a > b > a) > a > [b] > a 
Lefttoright fold 

foldl1 
:: (a > a > a) > [a] > a 
Lefttoright fold, initialized with first element 

scanl 
:: (a > b > a) > a > [b] > [a] 
List of partial lefttoright folds 

scanl1 
:: (a > a > a) > [a] > [a] 
List of partial lefttoright folds, initialized with first element 

foldr 
:: (a > b > b) > b > [a] > b 
Righttoleft fold 

foldr1 
:: (a > a > a) > [a] > a 
Righttoleft fold, initialized with first element 

scanr 
:: (a > b > b) > b > [a] > [b] 
List of partial righttoleft folds 

scanr1 
:: (a > a > a) > [a] > [a] 
List of partial righttoleft folds, initialized with first element 

General notes[edit  edit source]
Here we might put some general discussion on the functions. In my opinion, however, general comments would fit better in the actual "Building a vocabulary" module, while the cheat sheet pages would stay as a separate appendices linked from the main body of the book.
Notes on the functions[edit  edit source]
More detailed notes. The autogenerated hyperlinks on the table point to the lv. 3 headers here.
head[edit  edit source]
I don't know if it is a good idea to repeat information from the table on the comments section. If we choose to do so, templates could be used to help with the formatting as well.
Type signature:
[a] > a
Description:
Evaluates to the first element of a given list.
Additional remarks:
Triggers an error if applied on an empty list.
tail[edit  edit source]
Type signature:
[a] > [a]
Description:
Evaluates to the list obtained by dropping the first element of the argument.
Additional remarks:
Triggers an error if applied on an empty list. Evaluates to [] if the list has just a single element.