Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xuwei-k/zeroapply
zero cost Apply/Applicative syntax
https://github.com/xuwei-k/zeroapply
applicative macros scala scalaz
Last synced: 3 months ago
JSON representation
zero cost Apply/Applicative syntax
- Host: GitHub
- URL: https://github.com/xuwei-k/zeroapply
- Owner: xuwei-k
- Created: 2014-08-16T18:53:53.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-10-20T04:25:57.000Z (4 months ago)
- Last Synced: 2024-10-27T01:19:14.212Z (3 months ago)
- Topics: applicative, macros, scala, scalaz
- Language: Scala
- Homepage:
- Size: 249 KB
- Stars: 12
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# zeroapply
## Zero Cost `Apply`/`Applicative` Syntax
### example
```scala
zeroapply.OptionApply.apply3(Option(1), Option(2), Option(3))(_ + _ + _)
```↓
```scala
{
val x0: _root_.scala.Option[Int] = scala.Option.apply[Int](1);
if (x0.isEmpty)
_root_.scala.None
else
{
val x1: _root_.scala.Option[Int] = scala.Option.apply[Int](2);
if (x1.isEmpty)
_root_.scala.None
else
{
val x2: _root_.scala.Option[Int] = scala.Option.apply[Int](3);
if (x2.isEmpty)
_root_.scala.None
else
_root_.scala.Some(x0.get.+(x1.get).+(x2.get))
}
}
}
```- [Maven Central Repository Search](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.github.xuwei-k%22%20AND%20(a%3A%22zeroapply_2.11%22%20OR%20a%3A%22zeroapply-scalaz_2.11%22))
- [Maven Central](http://repo1.maven.org/maven2/com/github/xuwei-k/)## [`scalaz.Equal`](https://github.com/scalaz/scalaz/blob/v7.1.5/core/src/main/scala/scalaz/Equal.scala) and [`scalaz.Order`](https://github.com/scalaz/scalaz/blob/v7.1.5/core/src/main/scala/scalaz/Order.scala) macro
```scala
import scalaz._, std.AllInstances._case class Foo[A, B](a: A, b: B, c: Int)
object Foo {
implicit def instance[A: Order, B: Order]: Order[Foo[A, B]] =
zeroapply.CaseClass.order[Foo[A, B]]
}
```↓
```scala
new Order[Foo[A, B]] {
override def equalIsNatural =
Equal[A].equalIsNatural && Equal[B].equalIsNatural && Equal[Int].equalIsNaturaloverride def equal(x1: Foo[A, B], x2: Foo[A, B]) =
Equal[A].equal(x1.a, x2.a) && Equal[B].equal(x1.b, x2.b) && Equal[Int].equal(x1.c, x2.c)override def order(x1: Foo[A, B], x2: Foo[A, B]) =
Order[A].order(x1.a, x2.a) match {
case Ordering.EQ =>
Order[B].order(x1.b, x2.b) match {
case Ordering.EQ => Order[Int].order(x1.c, x2.c)
case z => z
}
case z =>
z
}
}```
### latest stable version
```scala
libraryDependencies += "com.github.xuwei-k" %% "zeroapply" % "0.5.0"
``````scala
libraryDependencies += "com.github.xuwei-k" %% "zeroapply-scalaz" % "0.5.0"
```- [API Documentation](https://oss.sonatype.org/service/local/repositories/releases/archive/com/github/xuwei-k/zeroapply-all_2.11/0.5.0/zeroapply-all_2.11-0.5.0-javadoc.jar/!/index.html)
### for scalaz 7.2.x