Giter Club home page Giter Club logo

scalaz-magnolia's Introduction

scalaz-magnolia

scaladoc

build.sbt

for jvm

libraryDependencies += "com.github.xuwei-k" %% "scalaz-magnolia" % "0.6.0"

for scala-js

libraryDependencies += "com.github.xuwei-k" %%% "scalaz-magnolia" % "0.6.0"

scalaz-magnolia's People

Contributors

dependabot[bot] avatar scala-steward-bot avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

scalaz-magnolia's Issues

Arbitrary

to save you from writing one...

import magnolia._
import org.scalacheck._

import scalaz._, Scalaz._
import scalaz.scalacheck.ScalaCheckBinding._

object ScalacheckMagnolia {
  type Typeclass[A] = Arbitrary[A]

  def combine[A](ctx: CaseClass[Arbitrary, A]): Arbitrary[A] = Arbitrary {
    ctx.parameters.toList.traverse(p => Gen.lzy(p.typeclass.arbitrary)).map { ps =>
      ctx.rawConstruct(ps)
    }
  }

  def dispatch[A](ctx: SealedTrait[Arbitrary, A]): Arbitrary[A] = Arbitrary {
    Gen.frequency(ctx.subtypes.map(s => 1 -> (Gen.lzy(s.typeclass.arbitrary))): _*)
  }

  implicit def gen[A]: Arbitrary[A] = macro Magnolia.gen[A]

}

softwaremill/magnolia#118 (comment)

And there is also one for scalaz-deriving.

play nice with scalaz-deriving

There are some things that I don't think work very well in scalaz-deriving, magnolia is better for them. Typically things that are not lawful (e.g. require access to labels)

  • Show
  • Arbitrary
  • etc

These magnolia instances would work with @deriving if they come with an appropriate deriving.conf file.

However, I think lawful things like Equal, Order, Semigroup, Monoid are best done with lawful typeclasses such as Decidablez, Altz.

https://gitlab.com/fommil/scalaz-deriving/issues/100

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.