65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Lists
 | |
| ---
 | |
| 
 | |
| Lists are a widely used datatype in Haskell. In fact, if you have used strings you've used Haskell's lists!
 | |
| 
 | |
| # Definition
 | |
| Haskell's lists are recursively defined as follows:
 | |
| 
 | |
| ```haskell
 | |
| data [] a     -- A List containing type `a`
 | |
|   = []        -- Empty list constructor.
 | |
|   | a : [a]   -- "Construction" constructor, a.k.a. cons.
 | |
| ```
 | |
| 
 | |
| Notice that lists in Haskell are not arrays, but linked lists.
 | |
| 
 | |
| The following are examples of lists:
 | |
| 
 | |
| ```haskell
 | |
| empty :: [()]
 | |
| empty = []
 | |
| 
 | |
| ints :: [Int]
 | |
| ints = 1 : 2 : 3 : []
 | |
| ```
 | |
| 
 | |
| There's syntactic sugar for making lists as well:
 | |
| 
 | |
| ```haskell
 | |
| bools :: [Bool]
 | |
| bools = [True, False, False, True]  -- True : False : False : True : []
 | |
| ```
 | |
| 
 | |
| `String` is just an alias for `[Char]`!
 | |
| 
 | |
| ```haskell
 | |
| chars :: [Char]
 | |
| chars = "This is a character list!"
 | |
| ```
 | |
| 
 | |
| # Functions
 | |
| Lists have many different built in functions. Here's a few:
 | |
| 
 | |
| ```haskell
 | |
| -- Concatenation:
 | |
| -- Stick two lists together.
 | |
| greeting :: String
 | |
| greeting = "Hello, " ++ "World!"    -- "Hello, World!"
 | |
| 
 | |
| -- Map:
 | |
| -- Appy some function to overy element.
 | |
| abc :: [Int]
 | |
| abc = map succ [0, 1, 2]            -- [1, 2, 3]
 | |
| ```
 | |
| 
 | |
| # Pattern matching
 | |
| You can easily pattern match lists to easily recurse over them.
 | |
| 
 | |
| ```haskell
 | |
| map' :: (a -> b) -> [a] -> [b]
 | |
| map' _ [] = []                        -- Base case.
 | |
| map' f (a:as) = f a : map' f as       -- Recursive case.
 | |
| ```
 |