Menu

Of variance and functors

Scala’s type system allows us to annotate type parameters with their variance: covariant, contravariant, invariant. Variance allows us to define the subtyping relationships between type constructors – that is, under which conditions F[A] is a subtype of F[B]. Similarly in functional programming, there are covariant functors, contravariant functors, and invariant...

First batch of talks at the Philadelphia Summit

The work on the programme for the Philadelphia Summit is in full swing! As announced earlier, we’re happy to share with you the first batch of accepted talks. Don’t worry though, there’s still time until the end of the week to submit a proposal. Becoming a cat(s) person Want to...

It’s existential on the inside

This is the eighth of a series of articles on “Type Parameters and Type Members”. You may wish to check out the beginning, which introduces the PList type we refer to throughout this article without further ado. When you start working with type parameters, nothing makes it immediately apparent that...

Keynote at the Philadelphia Summit

While the CfP for the Philadelphia Summit is still open (have you submitted a proposal yet?), we can already announce our keynote speaker: Stephanie Weirich is a Professor at the University of Pennsylvania. Her research centers on programming languages, type theory and machine-assisted reasoning. In particular, she studies generic programming,...

Assistance and Bursaries for the Typelevel Summits

As it says in our code of conduct, we are dedicated to creating a harrassment-free, inclusive community of developers. We want to extend this philosophy to the Typelevel Summits in Philadelphia and Oslo by providing assistance and bursaries to help speakers and attendees who would otherwise not be able to...

Announcement: Typelevel Summits coming up in 2016

We have a big announcement to make. In 2016, there will be not just one, but two Typelevel Summits. Also, we’ve updated our website to include an up-to-date list of Typelevel projects. There’s been much work behind the scenes which we will talk about in a later post, so stay...

To change types, change values

This is the seventh of a series of articles on “Type Parameters and Type Members”. You may wish to start at the beginning; more specifically, this post is meant as a followup to the previous entry. However, in a first for this series, it stands on its own, as introductory...

Symbolic operators and type classes for Cats

This post is an introduction into how operators are implemented in Cats and has been originally published in August 2015. Some more details can be found in the previous post. One of the simplest and most recognizable type classes is the semigroup. This type class abstracts over the ability to...

Machinist vs. value classes

This article is about machinist, a stand-alone project which started out as part of the spire project and has been originally published in October 2014. The original description can be found on this blog. You should read that linked post first if you are not familiar with how Machinist works....

Values never change types

This is the sixth of a series of articles on “Type Parameters and Type Members”. If you haven’t yet, you should start at the beginning, which introduces code we refer to throughout this article without further ado. In a subtyping language such as Java or Scala, first-class existentials are a...