diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml new file mode 100644 index 00000000..57db00f1 --- /dev/null +++ b/.github/workflows/cache.yml @@ -0,0 +1,30 @@ +name: cachix + +on: + pull_request: + push: + branches: + - main + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - macos-latest + - ubuntu-latest + steps: + - uses: actions/checkout@v2.3.2 + + - name: "Install Nix️" + uses: cachix/install-nix-action@v15 + + - name: "Install Cachix️" + uses: cachix/cachix-action@v10 + with: + name: typelevel + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + + - name: "Build dev shell" + run: nix develop -c true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..3f5cc736 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,24 @@ +name: nix-flake-check + +on: + pull_request: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.3.2 + + - name: "Install Nix️" + uses: cachix/install-nix-action@v16 + + - name: "Install Cachix️" + uses: cachix/cachix-action@v10 + with: + name: typelevel + + - name: "Nix Flake Check" + run: nix -L flake check diff --git a/Gemfile.lock b/Gemfile.lock index 0f90e75f..e29fec31 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,6 +61,7 @@ GEM unicode-display_width (1.8.0) PLATFORMS + x86_64-darwin-17 x86_64-darwin-18 DEPENDENCIES @@ -69,4 +70,4 @@ DEPENDENCIES jekyll-paginate BUNDLED WITH - 2.2.32 + 2.2.24 diff --git a/README.md b/README.md new file mode 100644 index 00000000..d894ceb6 --- /dev/null +++ b/README.md @@ -0,0 +1,179 @@ +typelevel website +================= + +This is the website of typelevel.scala. It is built on Jekyll and served at [typelevel.org](https://typelevel.org). + +## Getting Started (the short version) + +If you just want to add a blog post or fix a typo in the content, here's how to get started. + +### Creating a blog post + +1. Create a new file in the `posts` directory or copy an existing post. Its name should have the format `YYYY-MM-DD-short_title.md`. +2. Set the `title` (short title of the post, appears as the HTML ``) and `author` (your GitHub user name) in the front matter. MathJax is available via `mathjax: true` inside the front matter. +3. If this is your first blog post, please indicate if you want your name and a profile picture to appear on the post. If not, you can remove the `author` field from the front matter. Add your details in `_data/authors.yml`. +4. Write your content using Markdown. For code highlighting, use the usual GitHub syntax: + +```scala +def yourCode: Here +``` + +If you haven't written a post before, please add yourself to `_data/authors.yml`. + +That's it, we'll take care of the rest. If you wish, you can also submit just a plain Markdown file and we'll be happy to integrate it. + +You can also use `tut` in posts. See `posts/2016-09-30-subtype-typeclasses.md` for an example. + +### Previewing your changes + +#### Bundler + +To preview your changes, you have to install [Bundler](https://bundler.io/) first. +To download and set up all necessary dependencies, run + +```console +$ bundle install +... lots of text ... +Bundle complete! 1 Gemfile dependency, 81 gems now installed. +Bundled gems are installed into `./vendor/bundle` +``` + +Then, you can generate the site by running + +```console +$ bundle exec jekyll serve -wl --baseurl '' +``` + +The generated site will end up in the `_site` directory. + +#### Nix + +A fully configured Jekyll is available as a Nix app. Assumes that you have [installed Nix](https://nixos.org/download.html) and [enabled flakes](https://nixos.wiki/wiki/Flakes#Installing_flakes). You may optionally use the [Typelevel Cachix](https://app.cachix.org/cache/typelevel#pull). + +```console +$ nix run github:typelevel/typelevel.github.com#jekyll build +warning: Git tree '/Users/ross.baker/src/typelevel.github.com' is dirty +Configuration file: /Users/ross.baker/src/typelevel.github.com/_config.yml + Source: /Users/ross.baker/src/typelevel.github.com + Destination: /Users/ross.baker/src/typelevel.github.com/_site + Incremental build: disabled. Enable with --incremental + Generating... + done in 3.635 seconds. + Auto-regeneration: disabled. Use --watch to enable. +``` + +There is also a devshell for direct invocation, and a convenient alias: + +```console +$ nix develop github:typelevel/typelevel.github.com +🔨 Welcome to typelevel-org-shell + +[general commands] + + jekyll - a jekyll bundled with this site's dependencies + menu - prints this menu + tl-preview - preview the Jekyll site + +$ tl-preview +Configuration file: /home/you/src/typelevel.github.com/_config.yml + Source: /home/you/src/typelevel.github.com + Destination: /home/you/src/typelevel.github.com/_site + Incremental build: disabled. Enable with --incremental + Generating... + done in 3.336 seconds. + Auto-regeneration: enabled for '/home/you/src/typelevel.github.com' +LiveReload address: http://127.0.0.1:35729 + Server address: http://127.0.0.1:4000/ + Server running... press ctrl-c to stop. +``` + + + +## License + +Unless otherwise noted, all website content is licensed under a [Creative Commons Attribution 3.0 Unported License](https://creativecommons.org/licenses/by/3.0/deed.en_US). + +## Development + +### CSS + +The stylesheets are written in SASS, and can be found in the `css` and `_scss` directories. +It is being processed/compiled into regular CSS by Jekyll. + +``` +├── css/ +│ ├── main.scss # Custom CSS, brings all stylesheets together +├── _scss/ +│ ├── _fonts.scss # @font-face embedding. +│ ├── _mixins.scss # SASS mixins +│ ├── _reset.scss # Normalize stylesheet +│ ├── _syntax.scss # Syntax highlighting by Pygments +│ ├── _variables.scss # SASS variables (colors, fonts, etc.) +``` + +### Javascript + +Javascript can be found in the `js/` folder, which also includes its dependencies. + +### Templates + +All templates/layouts can be found in the `_layouts` folder, except the blog layout, which is located inside its own subfolder `blog/`. + +### Images + +Images for styling purposes are located inside `img/`, photos inside `img/media/`. + +### Adding a project + +There are four types of projects: core/featured projects, regular projects, incubator projects, and macros. + +To add a regular project, create a new markdown file in the `_projects` folder with the following front matter: + +```yml +layout: post +title: "Cats" +category: "Functional Programming" +description: "An experimental library intended to provide abstractions for functional programming in Scala, leveraging its unique features. Design goals are approachability, modularity, documentation and efficiency." +permalink: "https://non.github.io/cats/" +github: "https://github.com/non/cats" +``` + +Right now nothing more than the correct front matter is required. + +Do the same for a **core/featured** project, but also add `core: true`. +To add companions or extensions to these projects, use the front matter, too: + +```yml +extensions: + - title: "Alleycats" + description: "Lawless classes & illegal instances" + github: "https://github.com/non/alleycats" +``` + +Incubator projects and macros are created a little differently. They are located in `_data/incubator.yml` and `_data/macros.yml` respectively, and look like this: + +```yml +- title: "imp" + description: "Summoning implicit values" + github: "https://github.com/non/imp" +``` + +### Adding a page + +To add a page, create a HTML or Markdown file in the root of the project. The site navigation is not fully dynamic for simplification purposes. It can be changed in the default layout (`_layouts/default.html`). + +Sample front matter for a page: + +```yml +layout: page +title: "Code of Conduct" +``` + +### Help, CI is failing on a Dependabot PR + +We need to update the gemset as well. + +```sh +nix run nixpkgs#bundix +git commit -am "Update gemset" +``` diff --git a/_data/filter-blog.yml b/_data/filter-blog.yml index 73b24a13..320886e3 100644 --- a/_data/filter-blog.yml +++ b/_data/filter-blog.yml @@ -1,9 +1,15 @@ - title: All Posts url: /blog/ category: allPosts +- title: Governance + url: /blog/governance/ + category: governance +- title: Social + url: /blog/social/ + category: social - title: Technical url: /blog/technical/ category: technical -- title: Social - url: /blog/social/ - category: social \ No newline at end of file +- title: Summits + url: /blog/summits/ + category: summits diff --git a/_data/nav-social.yml b/_data/nav-social.yml index 242c2b17..c652c527 100644 --- a/_data/nav-social.yml +++ b/_data/nav-social.yml @@ -6,11 +6,10 @@ url: https://twitter.com/typelevel icon: "fab fa-twitter" -- title: Gitter - url: https://gitter.im/typelevel/home - icon: "fab fa-gitter" +- title: Discord + url: https://discord.gg/XF3CXcMzqD + icon: "fab fa-discord" - title: Email url: "mailto:info@typelevel.org" icon: "fas fa-envelope" - \ No newline at end of file diff --git a/_data/nav.yml b/_data/nav.yml index a1be4fd0..b12f91ea 100644 --- a/_data/nav.yml +++ b/_data/nav.yml @@ -20,9 +20,9 @@ navSocial: url: https://twitter.com/typelevel icon: "fab fa-twitter" - - title: Gitter - url: https://gitter.im/typelevel/home - icon: "fab fa-gitter" + - title: Discord + url: https://discord.gg/XF3CXcMzqD + icon: "fab fa-discord" - title: Email url: "mailto:info@typelevel.org" diff --git a/_includes/_code-of-conduct.html b/_includes/_code-of-conduct.html index 383c9e43..261bdcff 100644 --- a/_includes/_code-of-conduct.html +++ b/_includes/_code-of-conduct.html @@ -69,8 +69,6 @@ choose who you are talking to: * [Ross A. Baker](mailto:ross@rossabaker.com) * [Christopher Davenport](mailto:chris@chrisdavenport.tech) - * [Erik Osheim](mailto:d_m@plastic-idolatry.com) - * [Miles Sabin](mailto:miles@milessabin.com) * [Kailuo Wang](mailto:kailuo.wang@gmail.com) ### Examples of unacceptable behavior diff --git a/_layouts/post.html b/_layouts/post.html index 5de90bb9..2890e2ab 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -31,4 +31,4 @@ <h1><span>{{ page.title }}</span></h1> {% include _js-bottom.html %} </body> -</html> \ No newline at end of file +</html> diff --git a/blog/governance.html b/blog/governance.html new file mode 100644 index 00000000..405815fe --- /dev/null +++ b/blog/governance.html @@ -0,0 +1,50 @@ +--- +layout: page +title: Blog +permalink: /blog/governance/ +--- + +<div id="section-page"> + <div class="container"> + <div class="masthead-page"> + <h1><span>{{ page.title }}</span></h1> + <p>{{site.data.description.blogDescription}}</p> + {% include _tab.html %} + </div> + + <div class="blog-list"> + + + {% for post in site.posts %} + {% if post.category == "governance" %} + <a href="{{ site.baseurl }}{{ post.url }}" class="blog-item"> + <div class="blog-item-content"> + + + {% if post.image contains ".jpg" or post.image contains ".png" %} + <img src="{{ site.baseurl }}{{ post.image }}" alt=""> + {% else %} + <img src="{{ site.baseurl }}/img/blog/placeholder-typelevel.jpg" alt=""> + {% endif %} + + + <div> + <h3>{{ post.title }}</h3> + {% assign author = site.data.authors[post.meta.author] %} + {% if author %} + + by {{ author.full_name }} + {% endif %} + on {{ post.date | date: "%b %d, %Y" }}</p> + </div> + </div> + <div class="blog-item-tag"> + <p>{{ post.category }}</p> + </div> + </a> + {% endif %} + {% endfor %} + </div> + </div> +</div> +{% include _cta-newsletter.html %} diff --git a/blog/index.html b/blog/index.html index 4d3a2192..eb582a2f 100644 --- a/blog/index.html +++ b/blog/index.html @@ -33,7 +33,7 @@ <h3>{{ post.title }}</h3> </div> </div> - {% if post.category == "social" or post.category == "technical" %} + {% if post.category %} <div class="blog-item-tag"> <p>{{ post.category }}</p> </div> @@ -45,4 +45,4 @@ <h3>{{ post.title }}</h3> </div> </div> </div> -{% include _cta-blog.html %} \ No newline at end of file +{% include _cta-blog.html %} diff --git a/blog/summits.html b/blog/summits.html new file mode 100644 index 00000000..750966bb --- /dev/null +++ b/blog/summits.html @@ -0,0 +1,50 @@ +--- +layout: page +title: Blog +permalink: /blog/summits/ +--- + +<div id="section-page"> + <div class="container"> + <div class="masthead-page"> + <h1><span>{{ page.title }}</span></h1> + <p>{{site.data.description.blogDescription}}</p> + {% include _tab.html %} + </div> + + <div class="blog-list"> + + + {% for post in site.posts %} + {% if post.category == "summits" %} + <a href="{{ site.baseurl }}{{ post.url }}" class="blog-item"> + <div class="blog-item-content"> + + + {% if post.image contains ".jpg" or post.image contains ".png" %} + <img src="{{ site.baseurl }}{{ post.image }}" alt=""> + {% else %} + <img src="{{ site.baseurl }}/img/blog/placeholder-typelevel.jpg" alt=""> + {% endif %} + + + <div> + <h3>{{ post.title }}</h3> + {% assign author = site.data.authors[post.meta.author] %} + {% if author %} + + by {{ author.full_name }} + {% endif %} + on {{ post.date | date: "%b %d, %Y" }}</p> + </div> + </div> + <div class="blog-item-tag"> + <p>{{ post.category }}</p> + </div> + </a> + {% endif %} + {% endfor %} + </div> + </div> +</div> +{% include _cta-newsletter.html %} diff --git a/collections/_posts/2013-04-04-inauguration.md b/collections/_posts/2013-04-04-inauguration.md index dccb8b5d..90ae4f63 100644 --- a/collections/_posts/2013-04-04-inauguration.md +++ b/collections/_posts/2013-04-04-inauguration.md @@ -1,6 +1,7 @@ --- layout: post title: Inaugurating the typelevel.scala blog +category: governance meta: nav: blog diff --git a/collections/_posts/2013-06-24-deriving-instances-1.md b/collections/_posts/2013-06-24-deriving-instances-1.md index 2502c7e0..f807b6df 100644 --- a/collections/_posts/2013-06-24-deriving-instances-1.md +++ b/collections/_posts/2013-06-24-deriving-instances-1.md @@ -1,6 +1,7 @@ --- layout: post title: Deriving Type Class Instances +category: technical meta: nav: blog diff --git a/collections/_posts/2013-07-07-generic-numeric-programming.md b/collections/_posts/2013-07-07-generic-numeric-programming.md index dd1135cc..84f74ca0 100644 --- a/collections/_posts/2013-07-07-generic-numeric-programming.md +++ b/collections/_posts/2013-07-07-generic-numeric-programming.md @@ -1,6 +1,7 @@ --- layout: post title: An Intro to Generic Numeric Programming with Spire +category: technical meta: nav: blog diff --git a/collections/_posts/2013-09-11-using-scalaz-Unapply.md b/collections/_posts/2013-09-11-using-scalaz-Unapply.md index d1455c65..b9af96df 100644 --- a/collections/_posts/2013-09-11-using-scalaz-Unapply.md +++ b/collections/_posts/2013-09-11-using-scalaz-Unapply.md @@ -1,6 +1,7 @@ --- layout: post title: Using scalaz.Unapply +category: technical meta: nav: blog diff --git a/collections/_posts/2013-10-13-spires-ops-macros.md b/collections/_posts/2013-10-13-spires-ops-macros.md index 6322c58c..d282a61a 100644 --- a/collections/_posts/2013-10-13-spires-ops-macros.md +++ b/collections/_posts/2013-10-13-spires-ops-macros.md @@ -1,6 +1,7 @@ --- layout: post title: How to use Spire's Ops macros in your own project +category: technical meta: nav: blog diff --git a/collections/_posts/2013-10-13-towards-scalaz-1.md b/collections/_posts/2013-10-13-towards-scalaz-1.md index 999b6ed6..1e4ff8c2 100644 --- a/collections/_posts/2013-10-13-towards-scalaz-1.md +++ b/collections/_posts/2013-10-13-towards-scalaz-1.md @@ -1,6 +1,7 @@ --- layout: post title: Towards Scalaz (Part 1) +category: technical meta: nav: blog diff --git a/collections/_posts/2013-10-18-treelog.md b/collections/_posts/2013-10-18-treelog.md index b17bbfbc..152fca00 100644 --- a/collections/_posts/2013-10-18-treelog.md +++ b/collections/_posts/2013-10-18-treelog.md @@ -1,6 +1,7 @@ --- layout: post title: Treelog +category: technical meta: nav: blog diff --git a/collections/_posts/2013-11-17-discipline.md b/collections/_posts/2013-11-17-discipline.md index c7bf0ab8..5b5df4b4 100644 --- a/collections/_posts/2013-11-17-discipline.md +++ b/collections/_posts/2013-11-17-discipline.md @@ -1,6 +1,7 @@ --- layout: post title: Law Enforcement using Discipline +category: technical meta: nav: blog diff --git a/collections/_posts/2013-12-15-towards-scalaz-2.md b/collections/_posts/2013-12-15-towards-scalaz-2.md index 961e0085..32384dde 100644 --- a/collections/_posts/2013-12-15-towards-scalaz-2.md +++ b/collections/_posts/2013-12-15-towards-scalaz-2.md @@ -1,6 +1,7 @@ --- layout: post title: Towards Scalaz (Part 2) +category: technical meta: nav: blog diff --git a/collections/_posts/2014-01-18-implicitly_existential.md b/collections/_posts/2014-01-18-implicitly_existential.md index f1d3ac3b..0bba4d98 100644 --- a/collections/_posts/2014-01-18-implicitly_existential.md +++ b/collections/_posts/2014-01-18-implicitly_existential.md @@ -1,6 +1,7 @@ --- layout: post title: When implicitly isn't specific enough +category: technical meta: nav: blog diff --git a/collections/_posts/2014-02-21-error-handling.md b/collections/_posts/2014-02-21-error-handling.md index dc0f347f..ea4666dd 100644 --- a/collections/_posts/2014-02-21-error-handling.md +++ b/collections/_posts/2014-02-21-error-handling.md @@ -1,6 +1,7 @@ --- layout: post title: How do I error handle thee? +category: technical meta: nav: blog author: adelbertc diff --git a/collections/_posts/2014-03-09-liskov_lifting.md b/collections/_posts/2014-03-09-liskov_lifting.md index 7bd27700..41fc7d7d 100644 --- a/collections/_posts/2014-03-09-liskov_lifting.md +++ b/collections/_posts/2014-03-09-liskov_lifting.md @@ -1,6 +1,7 @@ --- layout: post title: When can Liskov be lifted? +category: technical meta: nav: blog diff --git a/collections/_posts/2014-04-14-fix.md b/collections/_posts/2014-04-14-fix.md index 8daa50f9..cc2f2219 100644 --- a/collections/_posts/2014-04-14-fix.md +++ b/collections/_posts/2014-04-14-fix.md @@ -1,6 +1,7 @@ --- layout: post title: Primitive recursion with fix and Mu +category: technical meta: nav: blog diff --git a/collections/_posts/2014-06-22-mapping-sets.md b/collections/_posts/2014-06-22-mapping-sets.md index 71080edf..6c448f7d 100644 --- a/collections/_posts/2014-06-22-mapping-sets.md +++ b/collections/_posts/2014-06-22-mapping-sets.md @@ -1,6 +1,7 @@ --- layout: post title: How can we map a Set? +category: technical meta: nav: blog diff --git a/collections/_posts/2014-07-02-type_equality_to_leibniz.md b/collections/_posts/2014-07-02-type_equality_to_leibniz.md index fe8923f6..4e84b039 100644 --- a/collections/_posts/2014-07-02-type_equality_to_leibniz.md +++ b/collections/_posts/2014-07-02-type_equality_to_leibniz.md @@ -1,6 +1,7 @@ --- layout: post title: A function from type equality to Leibniz +category: technical meta: nav: blog diff --git a/collections/_posts/2014-07-06-singleton_instance_trick_unsafe.md b/collections/_posts/2014-07-06-singleton_instance_trick_unsafe.md index 97c0fe47..7ddedea8 100644 --- a/collections/_posts/2014-07-06-singleton_instance_trick_unsafe.md +++ b/collections/_posts/2014-07-06-singleton_instance_trick_unsafe.md @@ -1,6 +1,7 @@ --- layout: post title: The singleton instance trick is unsafe +category: technical meta: nav: blog diff --git a/collections/_posts/2014-09-02-typelevel-scala.md b/collections/_posts/2014-09-02-typelevel-scala.md index aeb1f859..91199a36 100644 --- a/collections/_posts/2014-09-02-typelevel-scala.md +++ b/collections/_posts/2014-09-02-typelevel-scala.md @@ -1,6 +1,7 @@ --- layout: post title: Typelevel Scala and the future of the Scala ecosystem +category: technical meta: nav: blog diff --git a/collections/_posts/2014-09-20-higher_leibniz.md b/collections/_posts/2014-09-20-higher_leibniz.md index dd59f20a..d453ec06 100644 --- a/collections/_posts/2014-09-20-higher_leibniz.md +++ b/collections/_posts/2014-09-20-higher_leibniz.md @@ -1,6 +1,7 @@ --- layout: post title: Higher Leibniz +category: technical meta: nav: blog diff --git a/collections/_posts/2014-11-10-why_is_adt_pattern_matching_allowed.md b/collections/_posts/2014-11-10-why_is_adt_pattern_matching_allowed.md index ccbd4776..c4fdb118 100644 --- a/collections/_posts/2014-11-10-why_is_adt_pattern_matching_allowed.md +++ b/collections/_posts/2014-11-10-why_is_adt_pattern_matching_allowed.md @@ -1,6 +1,7 @@ --- layout: post title: Why is ADT pattern matching allowed? +category: technical meta: nav: blog diff --git a/collections/_posts/2015-02-26-rawtypes.md b/collections/_posts/2015-02-26-rawtypes.md index 67aeef0b..f6c9d90b 100644 --- a/collections/_posts/2015-02-26-rawtypes.md +++ b/collections/_posts/2015-02-26-rawtypes.md @@ -1,6 +1,7 @@ --- layout: post title: Existential types are not raw types +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-13-type-members-parameters.md b/collections/_posts/2015-07-13-type-members-parameters.md index a05855b9..168d2590 100644 --- a/collections/_posts/2015-07-13-type-members-parameters.md +++ b/collections/_posts/2015-07-13-type-members-parameters.md @@ -1,6 +1,7 @@ --- layout: post title: Type members are [almost] type parameters +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-16-method-equiv.md b/collections/_posts/2015-07-16-method-equiv.md index 1064fcf1..7719f16c 100644 --- a/collections/_posts/2015-07-16-method-equiv.md +++ b/collections/_posts/2015-07-16-method-equiv.md @@ -1,6 +1,7 @@ --- layout: post title: When are two methods alike? +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-19-forget-refinement-aux.md b/collections/_posts/2015-07-19-forget-refinement-aux.md index f221d0c6..00ab60e7 100644 --- a/collections/_posts/2015-07-19-forget-refinement-aux.md +++ b/collections/_posts/2015-07-19-forget-refinement-aux.md @@ -1,6 +1,7 @@ --- layout: post title: What happens when I forget a refinement? +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-23-type-projection.md b/collections/_posts/2015-07-23-type-projection.md index f5d6b625..8662c6fc 100644 --- a/collections/_posts/2015-07-23-type-projection.md +++ b/collections/_posts/2015-07-23-type-projection.md @@ -1,6 +1,7 @@ --- layout: post title: Type projection isn't that specific +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-27-nested-existentials.md b/collections/_posts/2015-07-27-nested-existentials.md index c9e3e471..09efddab 100644 --- a/collections/_posts/2015-07-27-nested-existentials.md +++ b/collections/_posts/2015-07-27-nested-existentials.md @@ -1,6 +1,7 @@ --- layout: post title: Nested existentials +category: technical meta: nav: blog diff --git a/collections/_posts/2015-07-30-values-never-change-types.md b/collections/_posts/2015-07-30-values-never-change-types.md index 465d508e..4b498b48 100644 --- a/collections/_posts/2015-07-30-values-never-change-types.md +++ b/collections/_posts/2015-07-30-values-never-change-types.md @@ -1,6 +1,7 @@ --- layout: post title: Values never change types +category: technical meta: nav: blog diff --git a/collections/_posts/2015-08-06-machinist.md b/collections/_posts/2015-08-06-machinist.md index 1ebd70c9..ca1dedc2 100644 --- a/collections/_posts/2015-08-06-machinist.md +++ b/collections/_posts/2015-08-06-machinist.md @@ -1,6 +1,7 @@ --- layout: post title: Machinist vs. value classes +category: technical meta: nav: blog diff --git a/collections/_posts/2015-08-07-symbolic-operators.md b/collections/_posts/2015-08-07-symbolic-operators.md index b3cd50fb..16d96a27 100644 --- a/collections/_posts/2015-08-07-symbolic-operators.md +++ b/collections/_posts/2015-08-07-symbolic-operators.md @@ -1,6 +1,7 @@ --- layout: post title: Symbolic operators and type classes for Cats +category: technical meta: nav: blog diff --git a/collections/_posts/2015-09-21-change-values.md b/collections/_posts/2015-09-21-change-values.md index 2b4ceee8..f294c6a5 100644 --- a/collections/_posts/2015-09-21-change-values.md +++ b/collections/_posts/2015-09-21-change-values.md @@ -1,6 +1,7 @@ --- layout: post title: To change types, change values +category: technical meta: nav: blog diff --git a/collections/_posts/2015-12-11-announcement_summit.md b/collections/_posts/2015-12-11-announcement_summit.md index e8e3e36b..88a96088 100644 --- a/collections/_posts/2015-12-11-announcement_summit.md +++ b/collections/_posts/2015-12-11-announcement_summit.md @@ -1,6 +1,7 @@ --- layout: post title: "Announcement: Typelevel Summits coming up in 2016" +category: summits meta: nav: blog diff --git a/collections/_posts/2016-01-14-summit_assistance.md b/collections/_posts/2016-01-14-summit_assistance.md index c2340258..35f765d4 100644 --- a/collections/_posts/2016-01-14-summit_assistance.md +++ b/collections/_posts/2016-01-14-summit_assistance.md @@ -1,6 +1,7 @@ --- layout: post title: "Assistance and Bursaries for the Typelevel Summits" +category: summits meta: nav: blog diff --git a/collections/_posts/2016-01-20-summit_keynote.md b/collections/_posts/2016-01-20-summit_keynote.md index be71fdba..e5e2efeb 100644 --- a/collections/_posts/2016-01-20-summit_keynote.md +++ b/collections/_posts/2016-01-20-summit_keynote.md @@ -1,6 +1,7 @@ --- layout: post title: "Keynote at the Philadelphia Summit" +category: summits meta: nav: blog diff --git a/collections/_posts/2016-01-28-existential-inside.md b/collections/_posts/2016-01-28-existential-inside.md index d68463dc..b6c94fc2 100644 --- a/collections/_posts/2016-01-28-existential-inside.md +++ b/collections/_posts/2016-01-28-existential-inside.md @@ -1,6 +1,7 @@ --- layout: post title: It’s existential on the inside +category: technical meta: nav: blog diff --git a/collections/_posts/2016-01-28-summit_programme.md b/collections/_posts/2016-01-28-summit_programme.md index eb46df66..a6e30412 100644 --- a/collections/_posts/2016-01-28-summit_programme.md +++ b/collections/_posts/2016-01-28-summit_programme.md @@ -1,6 +1,7 @@ --- layout: post title: "First batch of talks at the Philadelphia Summit" +category: summits meta: nav: blog diff --git a/collections/_posts/2016-02-04-variance-and-functors.md b/collections/_posts/2016-02-04-variance-and-functors.md index 676d654b..859b394b 100644 --- a/collections/_posts/2016-02-04-variance-and-functors.md +++ b/collections/_posts/2016-02-04-variance-and-functors.md @@ -1,6 +1,7 @@ --- layout: post title: Of variance and functors +category: technical meta: nav: blog diff --git a/collections/_posts/2016-03-13-information-hiding.md b/collections/_posts/2016-03-13-information-hiding.md index a39db6b4..e192c059 100644 --- a/collections/_posts/2016-03-13-information-hiding.md +++ b/collections/_posts/2016-03-13-information-hiding.md @@ -1,6 +1,7 @@ --- layout: post title: Information hiding, enforced +category: technical meta: nav: blog diff --git a/collections/_posts/2016-03-24-typelevel-boulder.md b/collections/_posts/2016-03-24-typelevel-boulder.md index 2959a9cf..de53321b 100644 --- a/collections/_posts/2016-03-24-typelevel-boulder.md +++ b/collections/_posts/2016-03-24-typelevel-boulder.md @@ -1,6 +1,7 @@ --- layout: post title: "The Typelevel Summit in Boulder is Cancelled" +category: summits meta: nav: blog diff --git a/collections/_posts/2016-05-10-internal-state.md b/collections/_posts/2016-05-10-internal-state.md index 5d6ebe74..2abc0958 100644 --- a/collections/_posts/2016-05-10-internal-state.md +++ b/collections/_posts/2016-05-10-internal-state.md @@ -1,6 +1,7 @@ --- layout: post title: Making internal state functional +category: technical meta: nav: blog diff --git a/collections/_posts/2016-08-21-hkts-moving-forward.md b/collections/_posts/2016-08-21-hkts-moving-forward.md index 4fe59459..fa4b2a6a 100644 --- a/collections/_posts/2016-08-21-hkts-moving-forward.md +++ b/collections/_posts/2016-08-21-hkts-moving-forward.md @@ -1,6 +1,7 @@ --- layout: post title: "Higher-kinded types: the difference between giving up, and moving forward" +category: technical meta: nav: blog diff --git a/collections/_posts/2016-09-19-variance-phantom.md b/collections/_posts/2016-09-19-variance-phantom.md index 00be2c4e..e4bf4d4e 100644 --- a/collections/_posts/2016-09-19-variance-phantom.md +++ b/collections/_posts/2016-09-19-variance-phantom.md @@ -1,6 +1,7 @@ --- layout: post title: Choosing variance for a phantom type +category: technical meta: nav: blog diff --git a/collections/_posts/2016-09-21-edsls-part-1.md b/collections/_posts/2016-09-21-edsls-part-1.md index 3b4929b2..b12a8b38 100644 --- a/collections/_posts/2016-09-21-edsls-part-1.md +++ b/collections/_posts/2016-09-21-edsls-part-1.md @@ -1,6 +1,7 @@ --- layout: post title: It's programs all the way down +category: technical meta: nav: blog diff --git a/collections/_posts/2016-09-30-subtype-typeclasses.md b/collections/_posts/2016-09-30-subtype-typeclasses.md index 9cdfb0db..4bffe7dd 100644 --- a/collections/_posts/2016-09-30-subtype-typeclasses.md +++ b/collections/_posts/2016-09-30-subtype-typeclasses.md @@ -1,6 +1,7 @@ --- layout: post title: Subtype type classes don't work +category: technical meta: nav: blog diff --git a/collections/_posts/2016-10-17-minicheck.md b/collections/_posts/2016-10-17-minicheck.md index 78ddfa36..73d0a7bc 100644 --- a/collections/_posts/2016-10-17-minicheck.md +++ b/collections/_posts/2016-10-17-minicheck.md @@ -1,6 +1,7 @@ --- layout: post title: Let's build ourselves a small ScalaCheck +category: technical meta: nav: blog diff --git a/collections/_posts/2016-10-18-scala-center.md b/collections/_posts/2016-10-18-scala-center.md index 5b96bfa8..14dd31f7 100644 --- a/collections/_posts/2016-10-18-scala-center.md +++ b/collections/_posts/2016-10-18-scala-center.md @@ -1,6 +1,7 @@ --- layout: post title: Typelevel representative at the Scala Center Advisory Board +category: governance meta: nav: blog diff --git a/collections/_posts/2016-10-26-edsls-part-2.md b/collections/_posts/2016-10-26-edsls-part-2.md index 78305d4a..e927ef97 100644 --- a/collections/_posts/2016-10-26-edsls-part-2.md +++ b/collections/_posts/2016-10-26-edsls-part-2.md @@ -1,6 +1,7 @@ --- layout: post title: EDSLs as functions +category: technical meta: nav: blog diff --git a/collections/_posts/2016-11-17-heaps.md b/collections/_posts/2016-11-17-heaps.md index 1c7a9104..781ddceb 100644 --- a/collections/_posts/2016-11-17-heaps.md +++ b/collections/_posts/2016-11-17-heaps.md @@ -1,6 +1,7 @@ --- layout: post title: API Design for Heaps (aka Priority Queues) +category: technical meta: nav: blog diff --git a/collections/_posts/2016-12-17-scala-coc.md b/collections/_posts/2016-12-17-scala-coc.md index 1584d1d3..c7f781b4 100644 --- a/collections/_posts/2016-12-17-scala-coc.md +++ b/collections/_posts/2016-12-17-scala-coc.md @@ -1,6 +1,7 @@ --- layout: post title: "Endorsing the new Scala Code of Conduct" +category: governance meta: nav: blog diff --git a/collections/_posts/2017-02-13-more-types-than-classes.md b/collections/_posts/2017-02-13-more-types-than-classes.md index f15b968b..e6da904d 100644 --- a/collections/_posts/2017-02-13-more-types-than-classes.md +++ b/collections/_posts/2017-02-13-more-types-than-classes.md @@ -1,6 +1,7 @@ --- layout: post title: There are more types than classes +category: technical meta: nav: blog diff --git a/collections/_posts/2017-03-01-four-ways-to-escape-a-cake.md b/collections/_posts/2017-03-01-four-ways-to-escape-a-cake.md index 1086c731..f624f710 100644 --- a/collections/_posts/2017-03-01-four-ways-to-escape-a-cake.md +++ b/collections/_posts/2017-03-01-four-ways-to-escape-a-cake.md @@ -1,6 +1,7 @@ --- layout: post title: Four ways to escape a cake +category: technical meta: nav: blog diff --git a/collections/_posts/2017-04-02-equivalence-vs-equality.md b/collections/_posts/2017-04-02-equivalence-vs-equality.md index 3db80d0d..456a138e 100644 --- a/collections/_posts/2017-04-02-equivalence-vs-equality.md +++ b/collections/_posts/2017-04-02-equivalence-vs-equality.md @@ -1,6 +1,7 @@ --- layout: post title: Equivalence versus Equality +category: technical meta: nav: blog diff --git a/collections/_posts/2017-05-02-io-monad-for-cats.md b/collections/_posts/2017-05-02-io-monad-for-cats.md index 08a6f598..46a9e588 100644 --- a/collections/_posts/2017-05-02-io-monad-for-cats.md +++ b/collections/_posts/2017-05-02-io-monad-for-cats.md @@ -1,6 +1,7 @@ --- layout: post title: An IO monad for cats +category: technical meta: nav: blog diff --git a/collections/_posts/2017-06-13-libra.md b/collections/_posts/2017-06-13-libra.md index 9b5eb5a7..9b4735d8 100644 --- a/collections/_posts/2017-06-13-libra.md +++ b/collections/_posts/2017-06-13-libra.md @@ -1,6 +1,7 @@ --- layout: post title: Compile time dimensional analysis with Libra +category: technical meta: nav: blog diff --git a/collections/_posts/2017-06-21-ciris.md b/collections/_posts/2017-06-21-ciris.md index 233a677d..3e552de3 100644 --- a/collections/_posts/2017-06-21-ciris.md +++ b/collections/_posts/2017-06-21-ciris.md @@ -1,6 +1,7 @@ --- layout: post title: Validated Configurations with Ciris +category: technical meta: nav: blog diff --git a/collections/_posts/2017-08-04-cats-1.0-mf.md b/collections/_posts/2017-08-04-cats-1.0-mf.md index 3f59d594..c40fbff5 100644 --- a/collections/_posts/2017-08-04-cats-1.0-mf.md +++ b/collections/_posts/2017-08-04-cats-1.0-mf.md @@ -1,6 +1,7 @@ --- layout: post title: "Announcement: cats 1.0.0-MF" +category: technical meta: nav: blog diff --git a/collections/_posts/2017-09-05-three-types-of-strings.md b/collections/_posts/2017-09-05-three-types-of-strings.md index e46fee05..af76d3da 100644 --- a/collections/_posts/2017-09-05-three-types-of-strings.md +++ b/collections/_posts/2017-09-05-three-types-of-strings.md @@ -1,6 +1,7 @@ --- layout: post title: There are at least three types of strings +category: technical meta: nav: blog diff --git a/collections/_posts/2017-12-20-who-implements-typeclass.md b/collections/_posts/2017-12-20-who-implements-typeclass.md index 45f0a526..8acc2132 100644 --- a/collections/_posts/2017-12-20-who-implements-typeclass.md +++ b/collections/_posts/2017-12-20-who-implements-typeclass.md @@ -1,6 +1,7 @@ --- layout: post title: Who implements the typeclass instance? +category: technical meta: nav: blog diff --git a/collections/_posts/2017-12-25-cats-1.0.0.md b/collections/_posts/2017-12-25-cats-1.0.0.md index 6688222c..8f772d31 100644 --- a/collections/_posts/2017-12-25-cats-1.0.0.md +++ b/collections/_posts/2017-12-25-cats-1.0.0.md @@ -1,6 +1,7 @@ --- layout: post title: "Announcement: cats 1.0.0" +category: technical meta: nav: blog diff --git a/collections/_posts/2017-12-27-optimizing-final-tagless.md b/collections/_posts/2017-12-27-optimizing-final-tagless.md index 98fad6ba..0b95aa57 100644 --- a/collections/_posts/2017-12-27-optimizing-final-tagless.md +++ b/collections/_posts/2017-12-27-optimizing-final-tagless.md @@ -1,6 +1,7 @@ --- layout: post title: Optimizing Tagless Final – Saying farewell to Free +category: technical meta: nav: blog diff --git a/collections/_posts/2018-04-13-rethinking-monaderror.md b/collections/_posts/2018-04-13-rethinking-monaderror.md index fa693738..bc6427c4 100644 --- a/collections/_posts/2018-04-13-rethinking-monaderror.md +++ b/collections/_posts/2018-04-13-rethinking-monaderror.md @@ -1,6 +1,7 @@ --- layout: post title: Rethinking MonadError +category: technical meta: nav: blog diff --git a/collections/_posts/2018-05-09-product-with-serializable.md b/collections/_posts/2018-05-09-product-with-serializable.md index fb7e2fe5..f5fdf1b3 100644 --- a/collections/_posts/2018-05-09-product-with-serializable.md +++ b/collections/_posts/2018-05-09-product-with-serializable.md @@ -1,6 +1,7 @@ --- layout: post title: Product with Serializable +category: technical meta: nav: blog diff --git a/collections/_posts/2018-05-09-tagless-final-streaming.md b/collections/_posts/2018-05-09-tagless-final-streaming.md index 0ae70644..3ed5fcab 100644 --- a/collections/_posts/2018-05-09-tagless-final-streaming.md +++ b/collections/_posts/2018-05-09-tagless-final-streaming.md @@ -1,6 +1,7 @@ --- layout: post -title: Tagless Final algebras and Streaming +title: Tagless Final Algebras and Streaming +category: technical meta: nav: blog diff --git a/collections/_posts/2018-06-07-shared-state-in-fp.md b/collections/_posts/2018-06-07-shared-state-in-fp.md index 261b4e7b..711ca6d7 100644 --- a/collections/_posts/2018-06-07-shared-state-in-fp.md +++ b/collections/_posts/2018-06-07-shared-state-in-fp.md @@ -1,6 +1,7 @@ --- layout: post title: Shared State in Functional Programming +category: technical meta: nav: blog diff --git a/collections/_posts/2018-06-15-typedapi.md b/collections/_posts/2018-06-15-typedapi.md index 127af520..66a1a330 100644 --- a/collections/_posts/2018-06-15-typedapi.md +++ b/collections/_posts/2018-06-15-typedapi.md @@ -1,6 +1,7 @@ --- layout: post title: Typedapi or how to derive your clients and servers from types +category: technical meta: nav: blog diff --git a/collections/_posts/2018-06-27-optimizing-tagless-final-2.md b/collections/_posts/2018-06-27-optimizing-tagless-final-2.md index 513eb45c..21c5a403 100644 --- a/collections/_posts/2018-06-27-optimizing-tagless-final-2.md +++ b/collections/_posts/2018-06-27-optimizing-tagless-final-2.md @@ -1,6 +1,7 @@ --- layout: post title: Optimizing Tagless Final – Part 2 – Monadic programs +category: technical meta: nav: blog @@ -421,4 +422,4 @@ Today we've seen a way to make optimizing monadic tagless final programs easier What do you think about this optimization scheme? Maybe you just prefer using `StateT` and being done with it, or maybe you like to use a typeclass based approach like the one we used last time? -Would love to hear from you all in the comments! \ No newline at end of file +Would love to hear from you all in the comments! diff --git a/collections/_posts/2018-07-12-testing-in-the-wild.md b/collections/_posts/2018-07-12-testing-in-the-wild.md index 739ebda9..9300cce8 100644 --- a/collections/_posts/2018-07-12-testing-in-the-wild.md +++ b/collections/_posts/2018-07-12-testing-in-the-wild.md @@ -1,6 +1,7 @@ --- layout: post title: Testing in the wild +category: technical meta: nav: blog diff --git a/collections/_posts/2018-08-07-refactoring-monads.md b/collections/_posts/2018-08-07-refactoring-monads.md index 2851c95f..bc3f5d43 100644 --- a/collections/_posts/2018-08-07-refactoring-monads.md +++ b/collections/_posts/2018-08-07-refactoring-monads.md @@ -1,6 +1,7 @@ --- layout: post title: Refactoring with Monads +category: technical meta: nav: blog diff --git a/collections/_posts/2018-08-25-http4s-error-handling-mtl.md b/collections/_posts/2018-08-25-http4s-error-handling-mtl.md index 24f81dfc..12fe5095 100644 --- a/collections/_posts/2018-08-25-http4s-error-handling-mtl.md +++ b/collections/_posts/2018-08-25-http4s-error-handling-mtl.md @@ -1,6 +1,7 @@ --- layout: post title: Error handling in Http4s with classy optics +category: technical meta: nav: blog diff --git a/collections/_posts/2018-09-04-chain-replacing-the-list-monoid.md b/collections/_posts/2018-09-04-chain-replacing-the-list-monoid.md index e2a4a23d..bb6a1256 100644 --- a/collections/_posts/2018-09-04-chain-replacing-the-list-monoid.md +++ b/collections/_posts/2018-09-04-chain-replacing-the-list-monoid.md @@ -1,6 +1,7 @@ --- layout: post title: Chain – Replacing the List Monoid +category: technical meta: nav: blog diff --git a/collections/_posts/2018-09-29-monad-transformer-variance.md b/collections/_posts/2018-09-29-monad-transformer-variance.md index a4ed6230..a1fe0324 100644 --- a/collections/_posts/2018-09-29-monad-transformer-variance.md +++ b/collections/_posts/2018-09-29-monad-transformer-variance.md @@ -1,6 +1,7 @@ --- layout: post title: Variance of Monad Transformers +category: technical meta: nav: blog diff --git a/collections/_posts/2018-10-06-intro-to-mtl.md b/collections/_posts/2018-10-06-intro-to-mtl.md index f37cc251..87ba1850 100644 --- a/collections/_posts/2018-10-06-intro-to-mtl.md +++ b/collections/_posts/2018-10-06-intro-to-mtl.md @@ -1,6 +1,7 @@ --- layout: post title: A comprehensive introduction to Cats-mtl +category: technical meta: nav: blog diff --git a/collections/_posts/2018-11-02-semirings.md b/collections/_posts/2018-11-02-semirings.md index c85d5a46..61f9d5b1 100644 --- a/collections/_posts/2018-11-02-semirings.md +++ b/collections/_posts/2018-11-02-semirings.md @@ -1,6 +1,7 @@ --- layout: post title: A tale on Semirings +category: technical meta: nav: blog diff --git a/collections/_posts/2018-11-28-http4s-error-handling-mtl-2.md b/collections/_posts/2018-11-28-http4s-error-handling-mtl-2.md index a2cf533b..555cdbd9 100644 --- a/collections/_posts/2018-11-28-http4s-error-handling-mtl-2.md +++ b/collections/_posts/2018-11-28-http4s-error-handling-mtl-2.md @@ -1,6 +1,7 @@ --- layout: post title: Error handling in Http4s with classy optics – Part 2 +category: technical meta: nav: blog diff --git a/collections/_posts/2019-01-30-cats-ecosystem-community-survey-results.md b/collections/_posts/2019-01-30-cats-ecosystem-community-survey-results.md index b09d3200..a2c95544 100644 --- a/collections/_posts/2019-01-30-cats-ecosystem-community-survey-results.md +++ b/collections/_posts/2019-01-30-cats-ecosystem-community-survey-results.md @@ -1,6 +1,7 @@ --- layout: post title: Cats Ecosystem Community Survey 2018 Results +category: technical meta: nav: blog diff --git a/collections/_posts/2019-02-06-algebraic-api-design.md b/collections/_posts/2019-02-06-algebraic-api-design.md index c55b20a4..8017520a 100644 --- a/collections/_posts/2019-02-06-algebraic-api-design.md +++ b/collections/_posts/2019-02-06-algebraic-api-design.md @@ -1,6 +1,7 @@ --- layout: post title: Algebraic API Design - Types, Functions, Properties +category: technical meta: nav: blog diff --git a/collections/_posts/2019-04-24-typelevel-sustainability-program-announcement.md b/collections/_posts/2019-04-24-typelevel-sustainability-program-announcement.md index 3a38b440..d13e6c7d 100644 --- a/collections/_posts/2019-04-24-typelevel-sustainability-program-announcement.md +++ b/collections/_posts/2019-04-24-typelevel-sustainability-program-announcement.md @@ -1,6 +1,7 @@ --- layout: post title: Typelevel Sustainability Program Announcement +category: governance meta: nav: blog @@ -80,4 +81,4 @@ For individual developers, another way to support us monetarily is to help our f Please don't hesitate to reach out with questions. Our contact address is sponsor-contact@typelevel.org. Thank you for reading this and considering supporting us. -<a class="dbox-donation-button" href="https://donorbox.org/typelevel-sustainability-program-2019?default_interval=m" style="background:#F95A66 url(https://d1iczxrky3cnb2.cloudfront.net/white_logo.png) no-repeat 37px center; color: #fff;text-decoration: none;font-family: Verdana,sans-serif;display: inline-block;font-size: 16px;padding: 15px 38px 15px 75px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; box-shadow: 0 1px 0 0 #ae3e47; text-shadow: 0 1px rgba(0, 0, 0, 0.3);" >Donate</a> +<a href="https://opencollective.com/typelevel">Donate at OpenCollective</a> diff --git a/collections/_posts/2019-05-01-typelevel-switches-to-scala-code-of-conduct.md b/collections/_posts/2019-05-01-typelevel-switches-to-scala-code-of-conduct.md index edc6e231..65f47ae6 100644 --- a/collections/_posts/2019-05-01-typelevel-switches-to-scala-code-of-conduct.md +++ b/collections/_posts/2019-05-01-typelevel-switches-to-scala-code-of-conduct.md @@ -1,6 +1,7 @@ --- layout: post title: Typelevel Switches to the Scala Code of Conduct +category: governance meta: nav: blog diff --git a/collections/_posts/2019-05-29-support-typelevel-thanks-to-triplequote-hydra.md b/collections/_posts/2019-05-29-support-typelevel-thanks-to-triplequote-hydra.md index a354a560..0525d11a 100644 --- a/collections/_posts/2019-05-29-support-typelevel-thanks-to-triplequote-hydra.md +++ b/collections/_posts/2019-05-29-support-typelevel-thanks-to-triplequote-hydra.md @@ -1,6 +1,7 @@ --- layout: post title: Support Typelevel thanks to Triplequote Hydra and compile Scala faster! +category: governance meta: nav: blog diff --git a/collections/_posts/2019-09-05-jdg.md b/collections/_posts/2019-09-05-jdg.md index c5b4ec93..a59414d7 100644 --- a/collections/_posts/2019-09-05-jdg.md +++ b/collections/_posts/2019-09-05-jdg.md @@ -2,7 +2,7 @@ layout: post title: "Contributors and Community" image: /img/blog/discord-migration.jpg -category: technical +category: governance meta: nav: blog diff --git a/collections/_posts/2019-11-13-Update-about-sustainability-program.md b/collections/_posts/2019-11-13-Update-about-sustainability-program.md index 2fd65f7c..2984eabe 100644 --- a/collections/_posts/2019-11-13-Update-about-sustainability-program.md +++ b/collections/_posts/2019-11-13-Update-about-sustainability-program.md @@ -1,6 +1,7 @@ --- layout: post title: "Update About Sustainability Program" +category: governance meta: nav: blog diff --git a/collections/_posts/2020-06-17-confronting-racism.md b/collections/_posts/2020-06-17-confronting-racism.md index 8c323294..b7599109 100644 --- a/collections/_posts/2020-06-17-confronting-racism.md +++ b/collections/_posts/2020-06-17-confronting-racism.md @@ -1,6 +1,7 @@ --- layout: post title: Confronting Racism +category: social meta: nav: blog @@ -128,7 +129,7 @@ commonly-cited resources: * [Stamped from the Beginning](https://www.ibramxkendi.com/stamped) by [Ibrahim Kendi](https://www.ibramxkendi.com/) -* [How to Be an Anti-Racist](https://www.ibramxkendi.com/how-to-be-an-antiracist-1) by Ibrahim Kendi +* [How to Be an Anti-Racist](https://web.archive.org/web/20201001105306/https://www.ibramxkendi.com/how-to-be-an-antiracist-1) by Ibrahim Kendi * [So You Want to Talk About Race](https://www.hachettebookgroup.com/titles/ijeoma-oluo/so-you-want-to-talk-about-race/9781580056779/) by [Ijeoma Oluo](http://www.ijeomaoluo.com/) * [White Fragility](https://robindiangelo.com/publications/) by [Robin DiAngelo](https://robindiangelo.com/) diff --git a/collections/_posts/2020-10-30-concurrency-in-ce3.md b/collections/_posts/2020-10-30-concurrency-in-ce3.md index e14642a0..576dfd76 100644 --- a/collections/_posts/2020-10-30-concurrency-in-ce3.md +++ b/collections/_posts/2020-10-30-concurrency-in-ce3.md @@ -1,6 +1,7 @@ --- layout: post title: Concurrency in Cats Effect 3 +category: technical meta: nav: blog @@ -194,11 +195,11 @@ object ExampleOne extends IOApp.Simple { for { fa <- (repeat("A") *> repeat("B")).as("foo!").start fb <- (repeat("C") *> repeat("D")).as("bar!").start - // joinAndEmbedNever is a variant of join that asserts + // joinWithNever is a variant of join that asserts // the fiber has an outcome of Succeeded and returns the // associated value. - ra <- fa.joinAndEmbedNever - rb <- fb.joinAndEmbedNever + ra <- fa.joinWithNever + rb <- fb.joinWithNever _ <- IO.println(s"\ndone: a says: $ra, b says: $rb") } yield () } diff --git a/collections/_posts/2021-04-27-community-safety.md b/collections/_posts/2021-04-27-community-safety.md index fc430cd8..4f2a67d8 100644 --- a/collections/_posts/2021-04-27-community-safety.md +++ b/collections/_posts/2021-04-27-community-safety.md @@ -2,7 +2,7 @@ layout: post title: "Community Safety" image: /img/blog/discord-migration.jpg -category: technical +category: social meta: nav: blog diff --git a/collections/_posts/2021-07-05-post-example.md b/collections/_posts/2021-07-05-post-example.md deleted file mode 100644 index 2fbc385e..00000000 --- a/collections/_posts/2021-07-05-post-example.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -layout: post -title: Post Example -image: /img/blog/discord-migration.jpg -category: social - - -meta: - nav: blog - author: typelevel ---- - -## Titlte h2 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed vehicula ligula. Praesent sit amet lectus non dolor rutrum tristique. Morbi posuere erat ut tellus finibus, vitae imperdiet quam porta. Praesent ac sapien quis nisi pulvinar fringilla. Sed pretium ullamcorper quam, sit amet malesuada sem bibendum eget. Sed fringilla, dui ut volutpat luctus, ante diam vulputate nisl, in scelerisque magna quam quis mi. Suspendisse vehicula ullamcorper mollis. Ut iaculis sed nibh congue molestie. Vestibulum ultricies orci quis ante molestie, a ultricies enim condimentum. - - -### Titlte h3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed vehicula ligula. Praesent sit amet lectus non dolor rutrum tristique. - -#### Titlte h4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed vehicula ligula. Praesent sit amet lectus non dolor rutrum tristique. - -##### Titlte h5 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sed vehicula ligula. Praesent sit amet lectus non dolor rutrum tristique. - -## Emphasis - -Lorem ipsum dolor sit amet, *consectetur* adipiscing elit. Integer _sed vehicula_ ligula. Lorem ipsum dolor sit amet, **consectetur** adipiscing elit. Integer __sed vehicula__ ligula. Lorem ipsum dolor sit amet, **consectetur _adipiscing_** elit. Integer sed vehicula ligula. Lorem ipsum dolor sit amet, consectetur ~~adipiscing~~ elit. Integer sed vehicula ligula. - -## List - -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Lorem ipsum dolor sit amet, consectetur adipiscing elit -- Lorem ipsum dolor sit amet, consectetur adipiscing elit - -1. Lorem ipsum dolor sit amet, consectetur adipiscing elit -2. Lorem ipsum dolor sit amet, consectetur adipiscing elit -3. Lorem ipsum dolor sit amet, consectetur adipiscing elit -4. Lorem ipsum dolor sit amet, consectetur adipiscing elit - -## Code - -Lorem `ipsum dolor` sit amet, consectetur adipiscing elit - -```scala -val data: Array[Int] = // ... -var i = 0 -while (i < data.length) { - data(i) *= 2 - i += 1 -} -``` - -## Tables - -| First | Second | Third | -| ------------- |---------------| ------------| -| Lorem | ipsum dolor | ipsum dolor | -| Lorem | `ipsum dolor` | ipsum dolor | -| ipsum dolor | ipsum dolor | ipsum dolor | diff --git a/collections/_posts/2021-11-15-on-recent-events.md b/collections/_posts/2021-11-15-on-recent-events.md new file mode 100644 index 00000000..600957d9 --- /dev/null +++ b/collections/_posts/2021-11-15-on-recent-events.md @@ -0,0 +1,29 @@ +--- +layout: post +title: On Recent Events +category: governance + +meta: + nav: blog + author: typelevel +--- + +Open source developers are free to choose the projects they contribute to and the communities they support. Martin Odersky’s recent objection to an exercise of this freedom threw the community into turmoil. We believe that those who questioned his intervention and spoke out were justified in doing so. Regardless, we encourage everyone to consider the tone and weight of their words before hitting “send”. + +We stand with those who feel excluded by the notion of politics being somehow optional, a notion we disagree with. Typelevel was founded with a mission to provide an inclusive, welcoming and safe environment, and we remain committed to that goal. We believe that human rights cannot be dismissed as mere “politics”. + +The Scala Center, which has a long and celebrated history of success in education and technical improvement to the tooling we use daily, has repeatedly been expected to take on a community management role beyond its chartered goals, for which it is ill-equipped and underfunded. We acknowledge the challenges they face and we support the Scala Community Management and Governance strategy under consideration as a promising way forward. + +Typelevel has functioned with a not-very-formal governance structure of volunteers for some time. This group is known as the [Typelevel Steering Committee](/steering.html). In the coming weeks we will formalize how leadership is selected and what the roles and responsibilities are. + +The Typelevel Steering Committee: +* Ross A. Baker +* Oscar Boykin +* Christopher Davenport +* Luka Jacobowitz +* Alexandru Nedelcu +* Rob Norris +* Michael Pilquist +* Miles Sabin +* Daniel Spiewak +* Kailuo Wang diff --git a/collections/_posts/2022-01-19-governing-documents.md b/collections/_posts/2022-01-19-governing-documents.md new file mode 100644 index 00000000..971f6022 --- /dev/null +++ b/collections/_posts/2022-01-19-governing-documents.md @@ -0,0 +1,31 @@ +--- +layout: post +title: Governing Documents +category: governance + +meta: + nav: blog + author: typelevel +--- + +As a first step in our effort to increase transparency in the Typelevel organization, the [Steering Commitee](https://github.com/typelevel/governance/blob/main/STEERING-COMMITTEE.md) have approved and released an initial set of [Governing Documents](https://github.com/typelevel/governance). + +The most important document is the [Charter](https://github.com/typelevel/governance/blob/main/CHARTER.md), which specifies the role of the Steering Committee and criteria for member projects. The most notable change is that Typelevel no longer distinguishes "full" and "incubator" projects, but instead recognizes: + +- **Affiliate Projects**. These projects agree to use an approved license and adhere to organization policies, including the Code of Conduct. + +- **Organization Projects**. In addition to the requirements for Affiliate membership, these projects agree to be hosted by the Typelevel organization, and to abide by the guidance and direction of the Steering Commitee (which may specify policies for binary compatibility, documentation, contributor base, and so on). It is our hope that these changes will help clarify maintenance expectations for users of foundational libraries like Cats and Cats-Effect. + +Most projects that are now hosted by Typelevel will become Organization Projects, and most that are hosted elsewhere will become Affiliate Projects. Final designations will be reviewed with maintainers and cataloged on the Typelevel website. + +### Next Steps + +First, the Governing Documents provide high-level structure, but do not specify fine-grained policies and procedures for Organization Projects, events, moderation, and so on. These will be discussed and added to the Governance repository in the coming months, under the voting procedures specified by the Charter. Notable policy changes will be accompanied by an announcement here. + +Second, the [Typelevel website](https://typelevel.org) does not yet reflect the Governing Documents or membership policy changes. The current website will be updated minimally, until the redesigned website (in progress) becomes available sometime in the next few months. + +Finally, we recognize that the Steering Committee does not currently represent the diversity of the Typelevel community. We expect to appoint many new faces and see the retirement of many longstanding members over the next year. + + + + diff --git a/collections/_posts/2022-04-01-call-for-steering-committee-members.md b/collections/_posts/2022-04-01-call-for-steering-committee-members.md new file mode 100644 index 00000000..9d6174dd --- /dev/null +++ b/collections/_posts/2022-04-01-call-for-steering-committee-members.md @@ -0,0 +1,68 @@ +--- +layout: post +title: Call for Steering Committee Members +category: governance + +meta: + nav: blog + author: typelevel +--- + +The [Typelevel Steering Committee][committee] is opening a call for +new members as we continue to build a [more transparent and +sustainable community][governing documents]. + +In 2021, co-founders Lars Hupel and Miles Sabin stepped down from +leadership. We are all grateful for what they created and their +several years of service. What remains is a generation of leadership +that has not expanded in a few years. Retirements and additions alike +are healthy, balancing institutional memory with fresh energy. It is +again a time for renewal. + +Historically, leadership has invited prominent techical contributors +to join them. This results in homogenous talent, experience, and +identity. Our hope is that this open call for leaders will be heard +by a more well-rounded and diverse set of candidates to realize +Typelevel's mission. + +## Mission + +Typelevel is an association of projects and individuals united to +foster an inclusive, welcoming, and safe environment around functional +programming in Scala. + +## Responsibilities + +* Together, we are coders, organizers, writers, educators, publicists, + moderators, recruiters, academics, and strategists. You aren't all + of these, but you think you can add something that's scarce. + +* Membership is not a heavy burden, but neither is it an honorific. + You will participate in [governance discussions][governance + discussions], and are excited to reimagine the way we run. + +* The current charter defines no fixed term. You'll try to leave it + better than you found it and when you're ready, hand the baton to + someone who will do the same. + +## Applying + +Send an e-mail to [volunteer@typelevel.org](mailto:volunteer@typelevel.org) +to put yourself forward for consideration, optionally with a brief +case why you wish to serve. The e-mail is visible only to the +[committee membership][committee]. We will thoughtfully consider all +serious applications and be discreet in our deliberation. Accepted +candidacies will be public, but we will not disclose the identity of +anyone else. We hope to hear from some who surprise us, or even yet +had the pleasure of meeting. We are not looking for third-party +nominations, but if there's someone you'd like to see, encourage them +to apply! + +The charter does not prescribe a committee size, but we hope to +welcome two to six new members this cycle, and consider more as +ambitions and capacity warrant. + +[committee]: https://github.com/typelevel/governance/blob/main/STEERING-COMMITTEE.md +[governing documents]: https://typelevel.org/blog/2022/01/19/governing-documents.html +[governance discussions]: https://github.com/typelevel/governance/issues +[volunteeer@typelevel.org]: mailto:volunteer@typelevel.org diff --git a/collections/_projects/banana-rdf.md b/collections/_projects/banana-rdf.md new file mode 100644 index 00000000..23cf3a61 --- /dev/null +++ b/collections/_projects/banana-rdf.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "banana-rdf" +description: "RDF, SPARQL and Linked Data technologies" +github: "https://github.com/banana-rdf/banana-rdf" +affiliate: true +--- diff --git a/collections/_projects/case-insensitive.md b/collections/_projects/case-insensitive.md new file mode 100644 index 00000000..d2d4c251 --- /dev/null +++ b/collections/_projects/case-insensitive.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "case-insensitive" +description: "A case-insensitive string for Scala" +github: "https://github.com/typelevel/case-insensitive" +--- diff --git a/collections/_projects/catbird.md b/collections/_projects/catbird.md new file mode 100644 index 00000000..7fb914f5 --- /dev/null +++ b/collections/_projects/catbird.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "catbird" +description: "Cats instances for various Twitter Open Source Scala projects" +github: "https://github.com/travisbrown/catsbird" +--- \ No newline at end of file diff --git a/collections/_projects/cats-parse.md b/collections/_projects/cats-parse.md new file mode 100644 index 00000000..ff9f14d4 --- /dev/null +++ b/collections/_projects/cats-parse.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "cats-parse" +description: "A parsing library for the cats ecosystem" +github: "https://github.com/typelevel/cats-parse" +--- \ No newline at end of file diff --git a/collections/_projects/cats-scalatest.md b/collections/_projects/cats-scalatest.md new file mode 100644 index 00000000..9fd05315 --- /dev/null +++ b/collections/_projects/cats-scalatest.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "cats-scalatest" +description: "Scalatest bindings for Cats." +github: "https://github.com/IronCoreLabs/cats-scalatest" +affiliate: true +--- diff --git a/collections/_projects/cats.md b/collections/_projects/cats.md index d75d2cba..09cb7e67 100644 --- a/collections/_projects/cats.md +++ b/collections/_projects/cats.md @@ -28,7 +28,7 @@ extensions: link: "https://github.com/typelevel/cats" - title: "Mouse" description: "Enrichments to standard library classes to ease functional programming" - link: "https://github.com/typelevel/mouse" + link: "https://typelevel.org/mouse/" - title: "Kittens" description: "Automatic type class derivation" link: "https://github.com/milessabin/kittens" diff --git a/collections/_projects/ciris.md b/collections/_projects/ciris.md new file mode 100644 index 00000000..4b0bfcb6 --- /dev/null +++ b/collections/_projects/ciris.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Ciris" +description: "Functional Configurations for Scala" +github: "https://github.com/vlovgr/ciris" +affiliate: true +--- diff --git a/collections/_projects/coulomb.md b/collections/_projects/coulomb.md new file mode 100644 index 00000000..8c4b0432 --- /dev/null +++ b/collections/_projects/coulomb.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "coulomb" +description: "A statically typed unit analysis library for Scala" +github: "https://github.com/erikerlandson/coulomb" +affiliate: true +--- diff --git a/collections/_projects/cron4s.md b/collections/_projects/cron4s.md new file mode 100644 index 00000000..570b18d7 --- /dev/null +++ b/collections/_projects/cron4s.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "cron4s" +description: "Cross-platform CRON expression parsing for Scala" +github: "https://github.com/alonsodomin/cron4s" +affiliate: true +--- diff --git a/collections/_projects/decline.md b/collections/_projects/decline.md index ffdcbfcf..a38088c3 100644 --- a/collections/_projects/decline.md +++ b/collections/_projects/decline.md @@ -4,4 +4,5 @@ title: "decline" category: "Command-line parsing" description: "A composable command-line parser for Scala." github: "https://github.com/bkirwi/decline" +affiliate: true --- diff --git a/collections/_projects/doobie.md b/collections/_projects/doobie.md index 044b69fc..6f9c46c5 100644 --- a/collections/_projects/doobie.md +++ b/collections/_projects/doobie.md @@ -4,4 +4,5 @@ title: "doobie" category: "Principled database access" description: "A pure functional JDBC layer for Scala. It is not an ORM, nor is it a relational algebra; it just provides a principled way to construct programs (and higher-level libraries) that use JDBC." github: "https://github.com/tpolecat/doobie" +affiliate: true --- diff --git a/collections/_projects/eff.md b/collections/_projects/eff.md index 7b9bf176..e02002b8 100644 --- a/collections/_projects/eff.md +++ b/collections/_projects/eff.md @@ -6,4 +6,5 @@ description: "Extensible effects are an alternative to monad transformers for co permalink: "http://atnos-org.github.io/eff" github: "https://github.com/atnos-org/eff" +affiliate: true --- diff --git a/collections/_projects/extruder.md b/collections/_projects/extruder.md new file mode 100644 index 00000000..6a3803aa --- /dev/null +++ b/collections/_projects/extruder.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Extruder" +description: "Populate case classes from any configuration source" +github: "https://github.com/janstenpickle/extruder" +affiliate: true +--- diff --git a/collections/_projects/fetch.md b/collections/_projects/fetch.md new file mode 100644 index 00000000..f3191917 --- /dev/null +++ b/collections/_projects/fetch.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Fetch" +description: "Library built on top of Cats that provides efficient data access from heterogeneous dataurces" +github: "https://github.com/47deg/fetch" +affiliate: true +--- diff --git a/collections/_projects/finch.md b/collections/_projects/finch.md new file mode 100644 index 00000000..b0c87658 --- /dev/null +++ b/collections/_projects/finch.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Finch" +description: "Purely functional basic blocks atop of Finagle for building composable HTTP APIs" +github: "https://github.com/finagle/finch" +affiliate: true +--- diff --git a/collections/_projects/fs2-grpc.md b/collections/_projects/fs2-grpc.md new file mode 100644 index 00000000..555c68e0 --- /dev/null +++ b/collections/_projects/fs2-grpc.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "fs2-grpc" +description: "gRPC implementation for FS2/cats-effect" +github: "https://github.com/typelevel/fs2-grpc" +--- \ No newline at end of file diff --git a/collections/_projects/hammock.md b/collections/_projects/hammock.md new file mode 100644 index 00000000..d124722a --- /dev/null +++ b/collections/_projects/hammock.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Hammock" +description: "Purely functional HTTP client" +github: "https://github.com/pepegar/hammock" +affiliate: true +--- diff --git a/collections/_projects/http4s.md b/collections/_projects/http4s.md new file mode 100644 index 00000000..af905040 --- /dev/null +++ b/collections/_projects/http4s.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "http4s" +description: "A typeful, purely functional HTTP library for client and server applications" +github: "https://github.com/http4s/http4s" +affiliate: true +--- diff --git a/collections/_projects/jawn-fs2.md b/collections/_projects/jawn-fs2.md new file mode 100644 index 00000000..836561f4 --- /dev/null +++ b/collections/_projects/jawn-fs2.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "jawn-fs2" +description: "Integration of jawn and fs2 for streaming, incremental JSON parsing" +github: "https://github.com/typelevel/jawn-fs2" +--- \ No newline at end of file diff --git a/collections/_projects/keypool.md b/collections/_projects/keypool.md new file mode 100644 index 00000000..cc950aec --- /dev/null +++ b/collections/_projects/keypool.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "keypool" +description: "A Keyed Pool Implementation for Scala" +github: "https://github.com/typelevel/keypool" +--- \ No newline at end of file diff --git a/collections/_projects/libisabelle.md b/collections/_projects/libisabelle.md new file mode 100644 index 00000000..5fc93c7d --- /dev/null +++ b/collections/_projects/libisabelle.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "libisabelle" +description: "A Scala library which talks to Isabelle" +github: "https://github.com/larsrh/libisabelle" +affiliate: true +--- diff --git a/collections/_projects/libra.md b/collections/_projects/libra.md new file mode 100644 index 00000000..dff50822 --- /dev/null +++ b/collections/_projects/libra.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Libra" +description: "Compile time dimensional analysis for any problem domain" +github: "https://github.com/to-ithaca/libra" +affiliate: true +--- diff --git a/collections/_projects/log4cats.md b/collections/_projects/log4cats.md new file mode 100644 index 00000000..8e469738 --- /dev/null +++ b/collections/_projects/log4cats.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "log4cats" +description: "Logging Tools For Interaction with cats-effect" +github: "https://github.com/typelevel/log4cats" +--- \ No newline at end of file diff --git a/collections/_projects/monix.md b/collections/_projects/monix.md index 4e36dc1e..ac7a67c7 100644 --- a/collections/_projects/monix.md +++ b/collections/_projects/monix.md @@ -5,4 +5,5 @@ category: "Asynchronous, Reactive Programming" description: "High-performance library for composing asynchronous, event-based programs, exposing a Reactive Streams implementation along with primitives for dealing with concurrency and side-effects." github: "https://github.com/monix/monix" permalink: "https://monix.io" +affiliate: true --- diff --git a/collections/_projects/monocle.md b/collections/_projects/monocle.md index 3c7972dd..cab2c5b2 100644 --- a/collections/_projects/monocle.md +++ b/collections/_projects/monocle.md @@ -4,4 +4,5 @@ title: "Monocle" category: "Lenses for Scala" description: "Strongly inspired by Haskell's lens library, Monocle is an Optics library where Optics gather the concepts of Lens, Traversal, Optional, Prism and Iso." github: "https://github.com/julien-truffaut/Monocle" +affiliate: true --- diff --git a/collections/_projects/otel4s.md b/collections/_projects/otel4s.md new file mode 100644 index 00000000..5fea4279 --- /dev/null +++ b/collections/_projects/otel4s.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "otel4s" +description: "An OpenTelemetry library based on cats-effect" +github: "https://github.com/typelevel/otel4s" +--- \ No newline at end of file diff --git a/collections/_projects/outwatch.md b/collections/_projects/outwatch.md new file mode 100644 index 00000000..181735e6 --- /dev/null +++ b/collections/_projects/outwatch.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Outwatch" +description: "The Functional and Reactive Web-Frontend Library for Scala.js" +github: "https://github.com/outwatch/outwatch" +affiliate: true +--- diff --git a/collections/_projects/pureconfig.md b/collections/_projects/pureconfig.md new file mode 100644 index 00000000..f7313f97 --- /dev/null +++ b/collections/_projects/pureconfig.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "PureConfig" +description: "A boilerplate-free library for loading configuration files" +github: "https://github.com/pureconfig/pureconfig" +affiliate: true +--- diff --git a/collections/_projects/refined.md b/collections/_projects/refined.md index ccb53df3..14b348bc 100644 --- a/collections/_projects/refined.md +++ b/collections/_projects/refined.md @@ -4,4 +4,5 @@ title: "refined" category: "Constraints on types" description: "Tools for refining types with type-level predicates which constrain the set of values described by the refined type, for example restricting to positive or negative numbers." github: "https://github.com/fthomas/refined" +affiliate: true --- diff --git a/collections/_projects/scala-exercises.md b/collections/_projects/scala-exercises.md new file mode 100644 index 00000000..7340a999 --- /dev/null +++ b/collections/_projects/scala-exercises.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Scala Exercises" +description: "Platform and framework for Scala devs to learn about Scala libraries" +github: "https://github.com/scala-exercises/scala-exercises" +affiliate: true +--- diff --git a/collections/_projects/scala-steward.md b/collections/_projects/scala-steward.md new file mode 100644 index 00000000..6e9cb10d --- /dev/null +++ b/collections/_projects/scala-steward.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "scala-steward" +description: "A robot that helps keeping Scala projects up-to-date" +github: "https://github.com/fthomas/scala-steward" +affiliate: true +--- diff --git a/collections/_projects/scala.md b/collections/_projects/scala.md index c14621d2..7356fbf8 100644 --- a/collections/_projects/scala.md +++ b/collections/_projects/scala.md @@ -5,4 +5,5 @@ category: "Our fork of the Scala compiler" description: "We wish to work with all stakeholders in the Scala ecosystem to safeguard the interests of the entire Scala community." github: "https://github.com/typelevel/scala" permalink: "https://typelevel.org/scala/" +affiliate: true --- diff --git a/collections/_projects/scodec.md b/collections/_projects/scodec.md index 941b1adc..7db87a97 100644 --- a/collections/_projects/scodec.md +++ b/collections/_projects/scodec.md @@ -4,4 +4,5 @@ title: "scodec" category: "Binary serialization" description: "scodec is a combinator library for working with binary data. It focuses on contract-first and pure functional encoding and decoding of binary data and provides integration with shapeless." github: "https://github.com/scodec/scodec" +affiliate: true --- diff --git a/collections/_projects/scoverage.md b/collections/_projects/scoverage.md new file mode 100644 index 00000000..9a8f9a56 --- /dev/null +++ b/collections/_projects/scoverage.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Scoverage" +description: "Code coverage tool for Scala" +github: "https://github.com/scoverage/scalac-scoverage-plugin" +affiliate: true +--- diff --git a/collections/_projects/shapeless.md b/collections/_projects/shapeless.md index 07843297..e92f5187 100644 --- a/collections/_projects/shapeless.md +++ b/collections/_projects/shapeless.md @@ -4,7 +4,7 @@ title: "Shapeless" category: "Generic Programming" description: "Shapeless is a generic programming library. Starting with implementations of Scrap your boilerplate and higher rank polymorphism in Scala, it quickly grew to provide advanced abstract tools like heterogenous lists and automatic instance derivation for type classes." github: "https://github.com/milessabin/shapeless" - +affiliate: true core: true extensions: - title: "argonaut-shapeless" diff --git a/collections/_projects/simulacrum-scalafix.md b/collections/_projects/simulacrum-scalafix.md new file mode 100644 index 00000000..3e18ef07 --- /dev/null +++ b/collections/_projects/simulacrum-scalafix.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "Simulacrum Scalafix" +description: "Simulacrum as Scalafix rules" +github: "https://github.com/typelevel/simulacrum-scalafix" +--- diff --git a/collections/_projects/singleton-ops.md b/collections/_projects/singleton-ops.md new file mode 100644 index 00000000..be4b3e07 --- /dev/null +++ b/collections/_projects/singleton-ops.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "singleton-ops" +description: "Operations for primitive and String singleton types" +github: "https://github.com/fthomas/singleton-ops" +affiliate: true +--- diff --git a/collections/_projects/sonic.md b/collections/_projects/sonic.md new file mode 100644 index 00000000..eaf41315 --- /dev/null +++ b/collections/_projects/sonic.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "sonic" +description: "Property-based testing with integrated shrinking" +github: "https://github.com/melrief/sonic" +affiliate: true +--- diff --git a/collections/_projects/specs2.md b/collections/_projects/specs2.md index 54d1f3db..2bd8f2bb 100644 --- a/collections/_projects/specs2.md +++ b/collections/_projects/specs2.md @@ -5,4 +5,5 @@ category: "Expressive specifications" description: "specs2 is a library for writing executable software specifications, aiming for conciseness, readability and extensibility." github: "https://github.com/etorreborre/specs2" permalink: "http://specs2.org/" +affiliate: true --- diff --git a/collections/_projects/spire.md b/collections/_projects/spire.md index 0726be82..c78c537d 100644 --- a/collections/_projects/spire.md +++ b/collections/_projects/spire.md @@ -4,6 +4,6 @@ title: "spire" category: "Numeric abstractions" description: "Spire is a numeric library for Scala which is intended to be generic, fast, and precise. Using features such as specialization, macros, type classes, and implicits, Spire works hard to defy conventional wisdom around performance and precision trade-offs." github: "https://github.com/non/spire" - +affiliate: true core: true --- diff --git a/collections/_projects/squants.md b/collections/_projects/squants.md new file mode 100644 index 00000000..3674eb6b --- /dev/null +++ b/collections/_projects/squants.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "Squants" +description: "The Scala API for Quantities, Units of Measure and Dimensional Analysis" +github: "https://github.com/garyKeorkunian/squants" +affiliate: true +--- diff --git a/collections/_projects/structures.md b/collections/_projects/structures.md index cbd7d13b..2739d4f9 100644 --- a/collections/_projects/structures.md +++ b/collections/_projects/structures.md @@ -4,4 +4,5 @@ title: "structures" category: "Functional type classes" description: "Zero-dependency Scala library that defines commonly used type classes for functional programming." github: "https://github.com/mpilquist/structures" +affiliate: true --- diff --git a/collections/_projects/two-tails.md b/collections/_projects/two-tails.md new file mode 100644 index 00000000..caa56f2a --- /dev/null +++ b/collections/_projects/two-tails.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "TwoTails" +description: "A compiler plugin adding support for mutual tail recursion" +github: "https://github.com/wheaties/TwoTails" +affiliate: true +--- diff --git a/collections/_projects/typelevel-nix.md b/collections/_projects/typelevel-nix.md new file mode 100644 index 00000000..421bd22f --- /dev/null +++ b/collections/_projects/typelevel-nix.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "typelevel-nix" +description: "Development tools for Typelevel projects" +github: "https://github.com/typelevel/typelevel-nix" +--- \ No newline at end of file diff --git a/collections/_projects/typelevel.g8.md b/collections/_projects/typelevel.g8.md new file mode 100644 index 00000000..97e4d54b --- /dev/null +++ b/collections/_projects/typelevel.g8.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "typelevel.g8" +description: "A Giter8 template for sbt-typelevel" +github: "https://github.com/typelevel/typelevel.g8" +--- \ No newline at end of file diff --git a/collections/_projects/uniform-scala.md b/collections/_projects/uniform-scala.md new file mode 100644 index 00000000..cbe4cec1 --- /dev/null +++ b/collections/_projects/uniform-scala.md @@ -0,0 +1,7 @@ +--- +layout: libraries +title: "uniform-scala" +description: "Functional user journeys" +github: "https://github.com/ltbs/uniform-scala" +affiliate: true +--- diff --git a/collections/_projects/unique.md b/collections/_projects/unique.md new file mode 100644 index 00000000..4512c700 --- /dev/null +++ b/collections/_projects/unique.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "unique" +description: "Unique Functional Values for Scala" +github: "https://github.com/typelevel/unique" +--- \ No newline at end of file diff --git a/collections/_projects/vault.md b/collections/_projects/vault.md new file mode 100644 index 00000000..f5553763 --- /dev/null +++ b/collections/_projects/vault.md @@ -0,0 +1,6 @@ +--- +layout: libraries +title: "vault" +description: "Type-safe, persistent storage for values of arbitrary types" +github: "https://github.com/typelevel/vault" +--- \ No newline at end of file diff --git a/conduct.md b/conduct.md index edf82a77..a318a98d 100644 --- a/conduct.md +++ b/conduct.md @@ -19,7 +19,8 @@ Community staff will be happy to help participants contact local law enforcement We expect participants to follow these rules at all Typelevel-supported venues --including online venues-- and social events associated with Typelevel. These venues include but are not necessarily limited to: -- All GitHub repositories and comments under the [Typelevel organization](https://github.com/typelevel) +- All GitHub repositories and comments under the [Typelevel organization](https://github.com/typelevel), +- All Discord channels under the [Typelevel organization]({{ site.discord }}), - All Gitter channels under the [Typelevel organization]({{ site.gitter }}), - The #typelevel IRC channel on Freenode, - The [Typelevel Google Group]({{ site.google_groups }}), and diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..d37a08dc --- /dev/null +++ b/flake.lock @@ -0,0 +1,59 @@ +{ + "nodes": { + "devshell": { + "locked": { + "lastModified": 1642188268, + "narHash": "sha256-DNz4xScpXIn7rSDohdayBpPR9H9OWCMDOgTYegX081k=", + "owner": "numtide", + "repo": "devshell", + "rev": "696acc29668b644df1740b69e1601119bf6da83b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1638122382, + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1642130244, + "narHash": "sha256-/5FhZkZFQCRQIRFosUQW1zmDrsNHVOJIB/+XgRPHiPU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "bc59ba15b64d0a0ee1d1764f18b4f3480d2c3e5a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "devshell": "devshell", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..4f1b9142 --- /dev/null +++ b/flake.nix @@ -0,0 +1,63 @@ +{ + description = "Virtual environment for typelevel.org site"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + devshell.url = "github:numtide/devshell"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils, devshell, ... }: + let + forSystem = system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ devshell.overlay ]; + }; + + gems = pkgs.bundlerEnv { + name = "typelevel-org-bundler-env"; + inherit (pkgs) ruby; + gemdir = ./.; + }; + in + { + apps.jekyll = { + type = "app"; + program = "${gems}/bin/jekyll"; + }; + + checks = { + build-site = pkgs.stdenv.mkDerivation { + name = "build-site"; + buildInputs = [ gems pkgs.glibcLocales ]; + src = ./.; + buildPhase = '' + export LANG=en_US.UTF-8 + ${gems}/bin/jekyll build + cp -a _site $out + ''; + dontInstall = true; + }; + }; + + devShell = pkgs.devshell.mkShell { + name = "typelevel-org-shell"; + commands = [ + { + name = "jekyll"; + help = "a jekyll bundled with this site's dependencies"; + command = "${gems}/bin/jekyll $@"; + } + { + name = "tl-preview"; + help = "preview the Jekyll site"; + command = "${gems}/bin/jekyll serve -wl --baseurl ''"; + } + ]; + }; + }; + in + flake-utils.lib.eachDefaultSystem forSystem; +} diff --git a/gemset.nix b/gemset.nix new file mode 100644 index 00000000..a5ab4754 --- /dev/null +++ b/gemset.nix @@ -0,0 +1,306 @@ +{ + addressable = { + dependencies = ["public_suffix"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp"; + type = "gem"; + }; + version = "2.8.0"; + }; + colorator = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"; + type = "gem"; + }; + version = "1.1.0"; + }; + concurrent-ruby = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f"; + type = "gem"; + }; + version = "1.1.9"; + }; + em-websocket = { + dependencies = ["eventmachine" "http_parser.rb"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm"; + type = "gem"; + }; + version = "0.5.3"; + }; + eventmachine = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; + type = "gem"; + }; + version = "1.2.7"; + }; + ffi = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn"; + type = "gem"; + }; + version = "1.15.4"; + }; + forwardable-extended = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"; + type = "gem"; + }; + version = "2.6.0"; + }; + "http_parser.rb" = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as"; + type = "gem"; + }; + version = "0.8.0"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf"; + type = "gem"; + }; + version = "1.8.11"; + }; + jekyll = { + dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ys3095vksf8pbj21fk3nxm0farmzx6g2fq8mxrpvp3hwyf47cag"; + type = "gem"; + }; + version = "4.2.1"; + }; + jekyll-feed = { + dependencies = ["jekyll"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1zxqkrnix0xiw98531h5ga6h69jhzlx2jh9qhvcl67p8nq3sgza9"; + type = "gem"; + }; + version = "0.15.1"; + }; + jekyll-paginate = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8"; + type = "gem"; + }; + version = "1.1.0"; + }; + jekyll-sass-converter = { + dependencies = ["sassc"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv"; + type = "gem"; + }; + version = "2.1.0"; + }; + jekyll-watch = { + dependencies = ["listen"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w"; + type = "gem"; + }; + version = "2.2.1"; + }; + kramdown = { + dependencies = ["rexml"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0jdbcjv4v7sj888bv3vc6d1dg4ackkh7ywlmn9ln2g9alk7kisar"; + type = "gem"; + }; + version = "2.3.1"; + }; + kramdown-parser-gfm = { + dependencies = ["kramdown"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv"; + type = "gem"; + }; + version = "1.1.0"; + }; + liquid = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by"; + type = "gem"; + }; + version = "4.0.3"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ncfhdkjiwq9l1pm87ax2pa20kz2j0dz56vi74cnr5a6cfk0qb5p"; + type = "gem"; + }; + version = "3.7.0"; + }; + mercenary = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj"; + type = "gem"; + }; + version = "0.4.0"; + }; + pathutil = { + dependencies = ["forwardable-extended"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"; + type = "gem"; + }; + version = "0.16.2"; + }; + public_suffix = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9"; + type = "gem"; + }; + version = "4.0.6"; + }; + rb-fsevent = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is"; + type = "gem"; + }; + version = "0.11.0"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"; + type = "gem"; + }; + version = "0.10.1"; + }; + rexml = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53"; + type = "gem"; + }; + version = "3.2.5"; + }; + rouge = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "197k0vskf72wxx0gzwld2jzg27bb7982xlvnzy9adlvkzp7nh8vf"; + type = "gem"; + }; + version = "3.26.1"; + }; + safe_yaml = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["http://rubygems.org"]; + sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56"; + type = "gem"; + }; + version = "1.0.5"; + }; + sassc = { + dependencies = ["ffi"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c"; + type = "gem"; + }; + version = "2.4.0"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18rbrh464ysqbdv53iwj0r8frshn65566kyj044cp3x9c2754jwh"; + type = "gem"; + }; + version = "2.0.0"; + }; + unicode-display_width = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1204c1jx2g89pc25qk5150mk7j5k90692i7ihgfzqnad6qni74h2"; + type = "gem"; + }; + version = "1.8.0"; + }; +} diff --git a/img/ico-discord.svg b/img/ico-discord.svg new file mode 100644 index 00000000..3efe1ec1 --- /dev/null +++ b/img/ico-discord.svg @@ -0,0 +1,10 @@ +<svg width="71" height="55" viewBox="0 0 71 55" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0)"> +<path d="M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z" fill="#5865F2"/> +</g> +<defs> +<clipPath id="clip0"> +<rect width="71" height="55" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/steering.md b/steering.md new file mode 100644 index 00000000..858c4b66 --- /dev/null +++ b/steering.md @@ -0,0 +1,12 @@ +--- +layout: page +title: Typelevel Steering Committee +--- + +The Typelevel Steering Committee is the group of volunteers that +governs Typelevel. The membership is kept in [the Typelevel +Governance repository][steering-committee] and described in the +[Typelevel Charter][charter]. + +[steering-committee]: https://github.com/typelevel/governance/blob/main/STEERING-COMMITTEE.md +[charter]: https://github.com/typelevel/governance/blob/main/CHARTER.md