About the repository¶
Source Code¶
There is only one solution in the csharp-functional repository:
Structure of the solution¶
Description | Type | NuGet | Location |
---|---|---|---|
The Maybe monad | Source | MaybeMonad NuGet | MaybeMonad |
The Result monad | Source | ResultMonad NuGet | ResultMonad |
The HttpResult monad | Source | HttpResultMonad NuGet | HttpResultMonad |
The Result monad extensions | Source | ResultMonad.Extensions NuGet | ResultMonad.Extensions |
The HttpResult monad extensions | Source | HttpResultMonad.Extensions NuGet | HttpResultMonad.Extensions |
The Result monad extensions that transforms them into HttpResult monad | Source | ResultMonad.Extensions.HttpResultMonad NuGet | ResultMonad.Extensions.HttpResultMonad |
The Maybe monad extensions that transforms them into Result monad | Source | MaybeMonad.Extensions.ResultMonad NuGet | MaybeMonad.Extensions.ResultMonad |
Simple application of HttpResult monad on a class by using it with System.Net.Http.HttpClient | Source | HttpResultMonad.HttpResultOnHttpClient NuGet | HttpResultMonad.HttpResultOnHttpClient |
Tests for the Maybe monad | Test | N/A | MaybeMonad.Tests |
Tests for the Result monad | Test | N/A | ResultMonad.Tests |
Tests for the HttpResult monad | Test | N/A | HttpResultMonad.Tests |
Tests for the Result monad extensions | Test | N/A | ResultMonad.Extensions.Tests |
Tests for the HttpResult monad extensions | Test | N/A | HttpResultMonad.Extensions.Tests |
Tests for the Result monad extensions that transforms them into HttpResult monad | Test | N/A | ResultMonad.Extensions.HttpResultMonad.Tests |
Tests for the Maybe monad extensions that transforms them into Result monad | Test | N/A | MaybeMonad.Extensions.ResultMonad.Tests |
Tests for the simple example of applying HttpResult monad on a class by using it with System.Net.Http.HttpClient | Test | N/A | HttpResultMonad.HttpResultOnHttpClient.Tests |
Shared code between test projects | Test Library | N/A | Tests.Shared |
Building the solution and running tests¶
This repository adheres to the F5 manifesto so you should be able to clone, open the solution in Visual Studio and build/run tests.
Documentation¶
The documentation for the repository can be found at the Docs folder.
Read this to understand how the documentation was created and how you can build it.
Building the docs¶
To build the docs you need:
- Python;
- Sphinx;
- Sphinx read the docs theme.
- Pylint (not required but recommended)
You can install Python from here or if you have chocolatey you can do the following from PowerShell:
choco install python
Sphinx is a tool that makes it easy to create beautiful documentation. Assuming you have Python already, install Sphinx by executing the following on PowerShell:
pip install sphinx sphinx-autobuild
The read the docs theme is configured in the conf.py file. To get this theme execute the following on PowerShell:
pip install sphinx_rtd_theme
For more information about the read the docs theme see its repo.
To install Pylint execute the following from PowerShell:
pip install pylint
Once you have setup your environment you can build the docs by running the make.bat file. You can also build the docs from Visual Studio Code as explained in the next section.
Note
These build instructions are focused for Windows users. If you are using a different OS then the instructions can’t be taken word by word but the same requirements apply. Furthermore there is a makefile available for non Windows users.
Editing the docs with Visual Studio Code¶
Although you can use your editor of preference to work with reStructuredText files, I have found Visual Studio Code to be very good for this task.
After installing Visual Studio Code I recommend installing the following extensions:
These will greatly increase your productivity while editing the documentation. For instance:
- The Code Spell Checker will highlight words it does not recognize and then you can use Ctrl+. on those words to correct them.
- The reStructuredText extension will
- Visual Studio Code contains numerous features that will improve your productivity. Something as simple as providing auto-complete suggestions from the words already available on your documentation speeds up your typing a lot.
In the .vscode folder you have 4 configuration files:
cSpell.json: contains configuration for the Code Spell Checker extension. You can add words to this file by using the Ctrl+. shortcut on words that the spell checker does not recognize and chose “Add to project dictionary”.
settings.json: contains the configuration for the reStructuredText extensions.
tasks.json: contains 3 tasks for Visual Studio Code:
- build-docs: The default build task. In Visual Studio Code go to “Tasks->Run Task” and select the build-docs task or “Tasks->Run Build Task”. If you’re using Visual Studio Code from a non Windows OS then you should change the command to execute the makefile instead of the make.bat.
- open-docs: A task to open the docs. In Visual Studio Code go to “Tasks->Run Task” and select the open-docs task. That should open the index.html using your default browser. The documents must have been built first.
- build-open-docs: A task to build and then open the docs. In Visual Studio Code go to “Tasks->Run Task” and select the build-open-docs task. That should build the docs and then open the index.html using your default browser.
keybindings.json: contains some bindings that help you build and open the docs. If you want to use them you have to go to “File->Preferences->Keyboard Shortcuts” then on the top left you will see a message saying “For advanced customizations open and edit the keybindings.json”. Select the link under keybindings.json and edit the file to add the contents from the this file. This will add 4 keybindings:
- shift+f5 : opens the run task menu;
- f6 : runs the build task;
- f5 : runs the build-open-docs task;
- f10 : runs the open-docs task.
Once you have installed Visual Studio code and the recommended extensions you can edit and build the docs by going to “File->Open Folder” and choosing the “/Docs/source” directory. If you do not open the source folder the build task will fail to run.