## Table
| Topic | Description | Confidence |
|-------|-------------|------------|
| Signatures | Checking whether the expression types are correct | 😐 |
| Programming | Writing code to solve an algorithmic problem | 😐 |
| Higher order functions | Demonstrate understanding of higher order functions, usually by chaining them | 😊 |
| List comprehensions | Demonstrate understanding of list comprehensions | 😊 |
| Recursion/infinite lists | Infinitely generating lists, usually by recursion and/or list comprehensions | 😐 |
| ADTs | Algebraic Data Types, usually defining a data type and writing functions that operate on it | 😕 |
| Proof on lists | Proving properties of functions that operate on lists | 😕 |
| Proof on trees/ADTs | Proving properties of functions that operate on trees or ADTs | 😕 |


## Deducing types systematically

### (:).(:)
```hs
expr = (:) . (:)

(:) :: a -> [a] -> [a]
(.) :: (c -> d) -> (b -> c) -> b -> d

=>

a -> ([a] -> [a])  = b -> c

b = a
c = [a] -> [a]

--- 

a' -> [a'] -> [a']  = c -> d
a -> [a] -> [a]  = b -> c

b = a
c = [a] -> [a]

a' = [a] -> [a]
[[a] -> [a]] -> [[a] -> [a]] = d


expr :: b -> d
 =>
expr :: a -> [[a] -> [a]] -> [[a] -> [a]]
```


### `f = \x y -> x (x (x y))` [^1]

```hs
f = \x y -> x (x (x y))
```

## Questions
> How does one do the equations?

> CLI is functional?

> Lazy and singly-linked lists, what's the relation?

> Y combinator?


## Resources
- [course](https://www.cis.upenn.edu/~cis1940/spring15/lectures.html)
- [standard list](https://hackage.haskell.org/package/base-4.21.0.0/docs/Data-List.html)

[^1]: need to find the actual rigorous way of doing this