All Projects → milessabin → Shapeless

milessabin / Shapeless

Licence: apache-2.0
Generic programming for Scala

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Shapeless

Sup
Composable, purely functional healthchecks in Scala.
Stars: ✭ 138 (-95.7%)
Mutual labels:  typelevel, functional-programming, fp
Monix
Asynchronous, Reactive Programming for Scala and Scala.js.
Stars: ✭ 1,819 (-43.28%)
Mutual labels:  typelevel, functional-programming, fp
Doobie
Functional JDBC layer for Scala.
Stars: ✭ 1,910 (-40.44%)
Mutual labels:  typelevel, functional-programming, fp
Frameless
Expressive types for Spark.
Stars: ✭ 717 (-77.64%)
Mutual labels:  typelevel, functional-programming, fp
Pratica
🥃 Functional Algebraic Data Types
Stars: ✭ 246 (-92.33%)
Mutual labels:  functional-programming, fp
Functional Programming Jargon
Jargon from the functional programming world in simple terms!
Stars: ✭ 14,351 (+347.49%)
Mutual labels:  functional-programming, fp
Cats Infographic
typeclass diagram for cats
Stars: ✭ 403 (-87.43%)
Mutual labels:  typelevel, fp
Monix Bio
Asynchronous data type with typed errors.
Stars: ✭ 80 (-97.51%)
Mutual labels:  typelevel, functional-programming
Metalang99
A functional language for C99 preprocessor metaprogramming
Stars: ✭ 152 (-95.26%)
Mutual labels:  functional-programming, fp
Neutron
🌠 Purely functional Apache Pulsar client for Scala built on top of Fs2
Stars: ✭ 53 (-98.35%)
Mutual labels:  typelevel, fp
Spotted Leopards
Proof of concept for a cats-like library built using Dotty features
Stars: ✭ 91 (-97.16%)
Mutual labels:  typelevel, functional-programming
Zio Saga
Purely Functional Transaction Management In Scala With ZIO
Stars: ✭ 200 (-93.76%)
Mutual labels:  functional-programming, fp
Bow Arch
🏛 Functional Architecture in Swift using Bow
Stars: ✭ 166 (-94.82%)
Mutual labels:  functional-programming, fp
Nyaya
Random Data Generation and/or Property Testing in Scala & Scala.JS.
Stars: ✭ 165 (-94.86%)
Mutual labels:  functional-programming, fp
Pfps Shopping Cart
🛒 The Shopping Cart application developed in the book "Practical FP in Scala: A hands-on approach"
Stars: ✭ 262 (-91.83%)
Mutual labels:  functional-programming, fp
Skunk
A data access library for Scala + Postgres.
Stars: ✭ 1,107 (-65.48%)
Mutual labels:  typelevel, functional-programming
Returns
Make your functions return something meaningful, typed, and safe!
Stars: ✭ 2,015 (-37.17%)
Mutual labels:  functional-programming, fp
Fs2
Compositional, streaming I/O library for Scala
Stars: ✭ 1,998 (-37.7%)
Mutual labels:  functional-programming, fp
Monocle
Optics library for Scala
Stars: ✭ 1,357 (-57.69%)
Mutual labels:  typelevel, functional-programming
Hammock
Purely functional HTTP client
Stars: ✭ 174 (-94.57%)
Mutual labels:  typelevel, fp

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 a 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.

Discord Gitter Maven Central Scala.js

Projects which use shapeless

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. If you are using shapeless and your project isn't listed yet, please add it.

Finding out more about the project

The feature overview for shapeless-2.0.0 provides a very incomplete introduction to shapeless. Additional information can be found in subsequent release notes. If you are upgrading from shapeless-2.0.0 you will find the migration guide useful. We're not satisfied with the current state of the documentation and would love help in improving it. You can find an excellent guide to Shapeless here: The Type Astronaut's Guide to Shapeless.

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 #shapless channel of the Typelevel Discord. There is also a mailing list and Gitter, but these are largely dormant now that most activity has moved to Discord. 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.

Participation

The shapeless project supports the Scala 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 #shapeless Discord 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.

Using shapeless

Binary release artefacts are published to the Sonatype OSS Repository Hosting service and synced to Maven Central. Snapshots of the main branch are built using GitHub actions and automatically published to the Sonatype OSS Snapshot repository.

Try shapeless with an Ammonite instant REPL

The quickest way to get to a REPL prompt with the latest version of shapeless on the class path is to run the provided "try shapeless" script, which has no dependencies other than an installed JDK. This script downloads and installs coursier and uses it to fetch the Ammonite REPL and the latest version of shapeless. It then drops you immediately into a REPL session,

% curl -s https://raw.githubusercontent.com/milessabin/shapeless/main/scripts/try-shapeless.sh | bash
Loading...
Compiling (synthetic)/ammonite/predef/interpBridge.sc
Compiling (synthetic)/ammonite/predef/replBridge.sc
Compiling (synthetic)/ammonite/predef/DefaultPredef.sc
Compiling /home/miles/projects/shapeless/(console)
Welcome to the Ammonite Repl 1.6.8
(Scala 2.13.1 Java 1.8.0_212)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
@ 23 :: "foo" :: true :: HNil 
res0: Int :: String :: Boolean :: HNil = 23 :: "foo" :: true :: HNil

@ Bye!
%

shapeless-2.3.3 with SBT

To include the Sonatype repositories in your SBT build you should add,

resolvers ++= Seq(
  Resolver.sonatypeRepo("releases"),
  Resolver.sonatypeRepo("snapshots")
)

Builds are available for Scala 2.11.x, 2.12.x and 2.13.x. The main line of development for shapeless 2.3.3 is Scala 2.13.2.

scalaVersion := "2.13.5"

libraryDependencies ++= Seq(
  "com.chuusai" %% "shapeless" % "2.3.3"
)

For using snapshots of Shapeless you should add,

scalaVersion := "2.13.5"

libraryDependencies ++= Seq(
  "com.chuusai" %% "shapeless" % "2.4.0-SNAPSHOT"
)

shapeless-2.3.3 with Maven

shapeless is also available for projects using the Maven build tool via the following dependency,

<dependency>
  <groupId>com.chuusai</groupId>
  <artifactId>shapeless_2.13</artifactId>
  <version>2.3.3</version>
</dependency>

Older releases

Please use a current release if possible. If unavoidable, you can find usage information for older releases on the shapeless wiki.

Building shapeless

shapeless is built with SBT 1.3.10 or later, and its main branch is built with Scala 2.13.2 by default but also cross-builds for 2.11.12 and 2.12.12.

Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].