Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
shapeless: generic programming for Scala
shapeless is a type class and dependent type based generic programming library for Scala. It had its origins in several talks by Miles Sabin (@milessabin), given over the course of 2011, on implementing scrap your boilerplate and higher rank polymorphism in Scala. Since then it has evolved from being a resolutely experimental project into library which, while still testing the limits of what's possible in Scala, is being used widely in production systems wherever there are arities to be abstracted over and boilerplate to be scrapped.
- Finding out more about the project
- Using shapeless
- Migration guides
- Building shapeless
Finding out more about the project
A full feature overview of shapeless-2.2.0 is in preparation. In the meantime, please refer to the release notes and the feature overview for shapeless-2.0.0 which can be found here. If you are upgrading from shapeless-2.0.0 you will find the migration guide useful.
shapeless is part of the Typelevel family of projects. It is an Open Source project under the Apache License v2, hosted on github. Binary artefacts are published to the Sonatype OSS Repository Hosting service and synced to Maven Central.
Most discussion of shapeless and generic programming in Scala happens on the shapeless Gitter channel. There is also a mailing list and IRC channel, but these are largely dormant now that most activity has moved to Gitter. Questions about shapeless are often asked and answered under the shapeless tag on StackOverflow. Some articles on the implementation techniques can be found on Miles's blog, and Olivera, Moors and Odersky, Type Classes as Object and Implicits is useful background material.
There is a wide variety of projects which use shapeless in one way or another ... see the incomplete list of projects for ideas and inspiration.
Whilst shapeless is a somewhat "advanced" Scala library, it is a lot more approachable than many people think. Contributors are usually available to field questions, give advice and discuss ideas on the Gitter channel, and for people wanting to take their first steps at contributing we have a selection of open issues flagged up as being good candidates to take on. No contribution is too small, and guidance is always available.
shapeless is built with SBT 0.13.7 or later. SBT 0.13.6 has an issue related to its new name hashing feature which when compiling shapeless causes SBT to loop indefinitely consuming all heap. Workarounds are to move to an earlier or later SBT version or disable name hashing by adding,
incOptions := incOptions.value.withNameHashing(false)
to your settings.
The master branch of shapeless is built with Scala 2.11.6 by default. To build with Scala 2.10.x you should check out the scala-2.10.x branch. As a general rule all new features and bugfixes are made against master and Scala 2.11.6 and merged into the scala-2.10.x branch with only the minimal changes needed for forwards compatibility.
- Alexander Konovalov firstname.lastname@example.org @alexknvl
- Alexandre Archambault email@example.com @alxarchambault
- Alistair Johnson firstname.lastname@example.org
- Alois Cochard email@example.com @aloiscochard
- Andrew Brett firstname.lastname@example.org @Ephemerix
- Ben Hutchison email@example.com @ben_hutchison
- Ben James firstname.lastname@example.org @bmjames
- Brian McKenna email@example.com @puffnfresh
- Chris Hodapp firstname.lastname@example.org @clhodapp
- Cody Allen email@example.com @fourierstrick
- Dale Wijnand firstname.lastname@example.org @dwijnand
- Dario Rexin email@example.com @evonox
- David Barri firstname.lastname@example.org @japgolly
- Denis Mikhaylov email@example.com @notxcain
- Eugene Burmako firstname.lastname@example.org @xeno_by
- Filipe Nepomuceno email@example.com
- George Leontiev firstname.lastname@example.org @folone
- Howard Branch email@example.com @purestgreen
- Huw Giddens firstname.lastname@example.org
- Jason Zaugg email@example.com @retronym
- Jean-Remi Desjardins firstname.lastname@example.org @jrdesjardins
- Johannes Rudolph email@example.com @virtualvoid
- Johnny Everson firstname.lastname@example.org @johnny_everson
- Joni Freeman email@example.com @jonifreeman
- Julien Tournay firstname.lastname@example.org @skaalf
- Jules Gosnell email@example.com
- Kevin Wright firstname.lastname@example.org @thecoda
- Lars Hupel email@example.com @larsr_h
- Mario Pastorelli firstname.lastname@example.org @mapastr
- Mathias Doenitz email@example.com @sirthias
- Michael Donaghy firstname.lastname@example.org
- Michael Pilquist email@example.com @mpilquist
- Miles Sabin firstname.lastname@example.org @milessabin
- Nikolas Evangelopoulos email@example.com
- Oleg Aleshko firstname.lastname@example.org @OlegYch
- Owein Reese email@example.com @OweinReese
- Paolo G. Giarrusso firstname.lastname@example.org @blaisorblade
- Pascal Voitot email@example.com @mandubian
- Renato Cavalcanti firstname.lastname@example.org @renatocaval
- Sam Halliday email@example.com @fommil
- Sarah Gerweck firstname.lastname@example.org @SGerweck
- Sébastien Doeraene email@example.com @sjrdoeraene
- Simon Hafner firstname.lastname@example.org @reactormonk
- Stacy Curl email@example.com @stacycurl
- Stephen Compall firstname.lastname@example.org @S11001001
- Tom Switzer email@example.com @tixxit
- Travis Brown firstname.lastname@example.org @travisbrown
- Vladimir Matveev email@example.com @netvlm