# The "Map and Bind and Apply, Oh my!" Series

In this series of posts, I'll attempt to describe some of the core functions for dealing with generic data types (such as `Option` and `List`). This is a follow-up post to [my talk on functional patterns](http://fsharpforfunandprofit.com/fppatterns/).

Yes, I know that [I promised not to do this kind of thing](https://swlaschin.gitbook.io/fsharpforfunandprofit/other/why-i-wont-be-writing-a-monad-tutorial), but for this post I thought I'd take a different approach from most people. Rather than talking about abstractions such as type classes, I thought it might be useful to focus on the core functions themselves and how they are used in practice.

In other words, a sort of "man page" for `map`, `return`, `apply`, and `bind`.

So, there is a section for each function, describing their name (and common aliases), common operators, their type signature, and then a detailed description of why they are needed and how they are used, along with some visuals (which I always find helpful).

* [Understanding map and apply](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world). A toolset for working with elevated worlds.
* [Understanding bind](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-2). Or, how to compose world-crossing functions.
* [Using the core functions in practice](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-3). Working with independent and dependent data.
* [Understanding traverse and sequence](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-4). Mixing lists and elevated values.
* [Using map, apply, bind and sequence in practice](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-5). A real-world example that uses all the techniques.
* [Reinventing the Reader monad](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-6). Or, designing your own elevated world.
* [Map and Bind and Apply, a summary](https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my/elevated-world-7). .


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://swlaschin.gitbook.io/fsharpforfunandprofit/functional-patterns/map-and-bind-and-apply-oh-my.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
