-
Notifications
You must be signed in to change notification settings - Fork 530
Home
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
- [[Current release|Using-shapeless:-current-release]
- [[Older releases|Using-shapeless:-older-releases]
- Migration guides
- Building shapeless
- Contributors
A full feature overview of shapeless-2.1.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.
Discussion of shapeless and generic programming in Scala in general happens on the Typelevel mailing list. You will also find many of the main shapeless contributors in its Gitter channel and on IRC in the #shapeless channel on freenode. 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.
Support for Scala 2.9.x is still available via the shapeless-1.2.4 release (feature overview [here][features124]). It isn't straightforward to bring the latest shapeless features to Scala versions which don't support implicit macros, and this release should be treated as a stopgap until you are able to move your project to Scala 2.11. It might, however, be feasible to backport some of the updates via a compiler plugin for Scala 2.9.x, and anyone interested in contributing or sponsoring such work should get in touch.
The shapeless project supports the Typelevel code of conduct and wants all of its channels (mailing list, Gitter, IRC, github, etc.) to be welcoming environments for everyone.
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, on #shapeless and the mailing list, 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 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.5 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.5 and merged into the scala-2.10.x branch with only the minimal changes needed for forwards compatibility.
- Alexander Konovalov alex.knvl@gmail.com @alexknvl
- Alexandre Archambault alexandre.archambault@gmail.com @alxarchambault
- Alistair Johnson alistair.johnson@johnsonusm.com
- Alois Cochard alois.cochard@gmail.com @aloiscochard
- Andrew Brett github@bretts.org @Ephemerix
- Ben Hutchison brhutchison@gmail.com @ben_hutchison
- Ben James ben.james@guardian.co.uk @bmjames
- Brian McKenna brian@brianmckenna.org @puffnfresh
- Chris Hodapp clhodapp1@gmail.com @clhodapp
- Cody Allen ceedubs@gmail.com @fourierstrick
- Dale Wijnand dale.wijnand@gmail.com @dwijnand
- Dario Rexin dario.rexin@r3-tech.de @evonox
- Denis Mikhaylov notxcain@gmail.com @notxcain
- Eugene Burmako xeno.by@gmail.com @xeno_by
- Filipe Nepomuceno filinep@gmail.com
- George Leontiev folone@gmail.com @folone
- Howard Branch purestgreen@gmail.com @purestgreen
- Huw Giddens hgiddens@gmail.com
- Jason Zaugg jzaugg@gmail.com @retronym
- Jean-Remi Desjardins jeanremi.desjardins@gmail.com @jrdesjardins
- Johannes Rudolph johannes.rudolph@gmail.com @virtualvoid
- Johnny Everson khronnuz@gmail.com @johnny_everson
- Joni Freeman joni.freeman@ri.fi @jonifreeman
- Julien Tournay boudhevil@gmail.com @skaalf
- Jules Gosnell jules_gosnell@yahoo.com
- Kevin Wright kev.lee.wright@gmail.com @thecoda
- Lars Hupel lars.hupel@mytum.de @larsr_h
- Mario Pastorelli mario.pastorelli@teralytics.ch @mapastr
- Mathias Doenitz mathias@spray.io @sirthias
- Michael Donaghy md401@srcf.ucam.org
- Michael Pilquist mpilquist@gmail.com @mpilquist
- Miles Sabin miles@milessabin.com @milessabin
- Nikolas Evangelopoulos nikolas@jkl.gr
- Oleg Aleshko olegych@tut.by @OlegYch
- Owein Reese owreese@gmail.com @OweinReese
- Paolo G. Giarrusso p.giarrusso@gmail.com @blaisorblade
- Pascal Voitot pascal.voitot.dev@gmail.com @mandubian
- Renato Cavalcanti renato@strongtyped.io @renatocaval
- Sam Halliday sam.halliday@gmail.com @fommil
- Sarah Gerweck sarah.a180@gmail.com @SGerweck
- Simon Hafner hafnersimon@gmail.com @reactormonk
- Stacy Curl stacy.curl@gmail.com @stacycurl
- Stephen Compall scompall@nocandysw.com @S11001001
- Tom Switzer thomas.switzer@gmail.com @tixxit
- Travis Brown travisrobertbrown@gmail.com @travisbrown
- Vladimir Matveev vladimir.matweev@gmail.com @netvlm