Skip to the content.

Contributing

We’re delighted by contributions of all sizes:

You do not need to be a Haskell expert to contribute. Give us your thoughts, your hopes, your confusions, your code, and its imperfections; we’ll help polish it up.

If you’ve been frustrated with Haskell but are willing to show up with a constructive attitude, we would like to hear what problems you’ve had and talk about how this guide could help. If you’ve done something you’re proud of that fits the Phrasebook, you’re welcome to come show it off.

If you’d like to contribute and need inspiration, try these sources for topic ideas:

How to contribute code with GitHub

If you are a seasoned GitHub user, you may not need to read this section. If you are unfamiliar with pull requests, read on:

On the project’s main page, click the “Create new file” button. If you don’t have any code, just enter a file name for the example you’d like to see (then once the pull request is open, we can talk about what should go there). Click the “Propose new file” button, then on the next screen the “Create pull request” button.

A pull request includes a discussion thread where we can talk about the code. If necessary you can continue making revisions to the file after you open the pull request. What you submit can be a work in progress.

Content guidelines

Aim for small examples that are just long enough to illustrate one idea.

Each page of the Phrasebook demonstrates a particular thing that someone who doesn’t know Haskell might be wondering how to do. For example:

The Phrasebook itself includes explanations next to the code examples. We’ll appreciate some explanation of code you contribute, but don’t worry too much about this part; we’ll write the Phrasebook’s text to maintain a consistent style.

We believe that Haskell is not so different from any other language that learning it would require unlearning everything else that one may already know about programming. Our goal in this project is not to focus on what makes Haskell unique, but to build bridges to familiar concepts.

Social values

The Phrasebook is run by Type Classes, which consists of Julie Moronuki and Chris Martin. This project serves as our primary introduction for Haskell newcomers, and we want contributors to care about helping all people who may read the Phrasebook.

The nature of the Phrasebook invites comparisons between Haskell and other languages; we will not tolerate needless disparagement of any programming ecosystems. We love learning about the differences between languages, and we obviously have our own preferences among them, but undue emphasis on value judgements tends to incidentally insult entire degrees and careers.

For more on what we’re about, please see our Type Classes statement of values.

License

All of the code in this repository is offered under the Creative Commons CC BY-NC 4.0 license, which allows free non-commercial use with attribution. We will only accept contributions that are licensed under these same terms. Please let us know what name and URL you’d like to have listed on the contributors page.

Style guide

Each Phrasebook example should define a main action which prints something that demonstrates the program’s behavior.

Try to minimize the prerequisite knowledge for each example program.

Introduce new library dependencies as necessary, but try to stick to the libraries we have chosen.

Use language extensions as necessary, but not to excess.

Don’t include quite as many type signatures as you might in typical code.

The ($) operator tends to be an obstacle for unpracticed Haskell readers, so prefer parentheses. Do use ($) to avoid parenthesizing multi-line arguments. We do not want to use the BlockOperators extension yet.

The maximum line length is 68 characters. (This constraint is imposed by the format of the website.)