Hedgehog Extra

Newtypes and Refinement types for Scala 3
| Project | Maven Central | Scala.js | Scala Native |
|---|---|---|---|
| hedgehog-extra-core | ✅ | ✅ | |
| hedgehog-extra-refined | ✅ | ❌ | |
| hedgehog-extra-refined4s | ✅ | ✅ |
Getting Started
To get hedgehog-extra for your project,
hedgehog-extra-core
- sbt
- sbt (with libraryDependencies)
- scala-cli
In build.sbt,
"io.kevinlee" %% "hedgehog-extra-core" % "0.21.0"
or for Scala.js and Scala Native
"io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0"
In build.sbt,
libraryDependencies += "io.kevinlee" %% "hedgehog-extra-core" % "0.21.0"
or for Scala.js and Scala Native
libraryDependencies += "io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0"
//> using dep "io.kevinlee::hedgehog-extra-core:0.21.0"
hedgehog-extra-refined4s
For Scala 3, you have the option to use refined4s in place of newtype and refined, along with the support for refined4s provided by hedgehog-extra.
- sbt
- sbt (with libraryDependencies)
- scala-cli
In build.sbt,
"io.kevinlee" %% "hedgehog-extra-refined4s" % "0.21.0"
or for Scala.js and Scala Native
"io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0"
In build.sbt,
libraryDependencies += "io.kevinlee" %% "hedgehog-extra-refined4s" % "0.21.0"
or for Scala.js and Scala Native
libraryDependencies += "io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0"
//> using dep "io.kevinlee::hedgehog-extra-refined4s:0.21.0"
hedgehog-extra-refined
- sbt
- sbt (with libraryDependencies)
- scala-cli
In build.sbt,
"io.kevinlee" %% "hedgehog-extra-refined" % "0.21.0"
or for Scala.js
"io.kevinlee" %%% "hedgehog-extra-refined" % "0.21.0"
In build.sbt,
libraryDependencies += "io.kevinlee" %% "hedgehog-extra-refined" % "0.21.0"
or for Scala.js
libraryDependencies += "io.kevinlee" %%% "hedgehog-extra-refined" % "0.21.0"
//> using dep "io.kevinlee::hedgehog-extra-refined:0.21.0"
All hedgehog-extra modules
- sbt
- sbt (with libraryDependencies)
- scala-cli
In build.sbt,
"io.kevinlee" %% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %% "hedgehog-extra-refined" % "0.21.0",
"io.kevinlee" %% "hedgehog-extra-refined4s" % "0.21.0",
or for Scala.js
"io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0",
or for Scala Native
"io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0",
In build.sbt,
libraryDependencies ++= Seq(
"io.kevinlee" %% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %% "hedgehog-extra-refined" % "0.21.0",
"io.kevinlee" %% "hedgehog-extra-refined4s" % "0.21.0",
)
or for Scala.js
libraryDependencies ++= Seq(
"io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0",
)
or for Scala Native
libraryDependencies ++= Seq(
"io.kevinlee" %%% "hedgehog-extra-core" % "0.21.0",
"io.kevinlee" %%% "hedgehog-extra-refined4s" % "0.21.0",
)
//> using dep "io.kevinlee::hedgehog-extra-core:0.21.0"
//> using dep "io.kevinlee::hedgehog-extra-refined:0.21.0"
//> using dep "io.kevinlee::hedgehog-extra-refined4s:0.21.0"
Documentation
Quick Start (Functional Composition)
import hedgehog.*
import hedgehog.extra.Gens
import hedgehog.extra.NumGens
val userCodeGen: Gen[String] =
for {
(min, max) <- NumGens.genIntMinMaxPair(4, 12)
suffix <- Gens.genUnsafeNonWhitespaceStringMinMax(min, max)
} yield s"user-$suffix"
// userCodeGen: GenT[String] = GenT(
// run = hedgehog.core.GenT$$Lambda$11272/0x00007f0539e262d8@3c0b852c
// )