Useful Ammonite snippets
All of these can be figured out by looking at ammonite.io and at libraries pages, but to make things faster for myself I written it down (I don’t always want to search through Ammonite history nor pollute my ~/.ammonite/predef.sc
).
For convenience, next to library there is badge with the newest version and next to one liners for Ammonite for specific version is link to releases - it let you update to newest version without goolging or checking project’s site.
Click on code to copy it thanks to clipboard.js.
Ammonite for specific Scala version
All releases can be found under this link if you want to change the Ammonite version.
2.10
Last release for 2.10 (1.0.3)
[ -f /tmp/ammonite-2.10/amm ] || (mkdir /tmp/ammonite-2.10 -p && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.0.3/2.10-1.0.3 > /tmp/ammonite-2.10/amm && chmod +x /tmp/ammonite-2.10/amm) && /tmp/ammonite-2.10/amm
2.11
Last release for 2.11 (1.6.7)
[ -f /tmp/ammonite-2.11/amm ] || (mkdir /tmp/ammonite-2.11 -p && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.6.7/2.11-1.6.7 > /tmp/ammonite-2.11/amm && chmod +x /tmp/ammonite-2.11/amm) && /tmp/ammonite-2.11/amm
2.12
[ -f /tmp/ammonite-2.12/amm ] || (mkdir /tmp/ammonite-2.12 -p && curl -L https://github.com/lihaoyi/Ammonite/releases/download/2.1.4/2.12-2.1.4 > /tmp/ammonite-2.12/amm && chmod +x /tmp/ammonite-2.12/amm) && /tmp/ammonite-2.12/amm
2.13
[ -f /tmp/ammonite-2.13/amm ] || (mkdir /tmp/ammonite-2.13 -p && curl -L https://github.com/lihaoyi/Ammonite/releases/download/2.1.4/2.13-2.1.4 > /tmp/ammonite-2.13/amm && chmod +x /tmp/ammonite-2.13/amm) && /tmp/ammonite-2.13/amm
Generate Ammonite import format from sbt/coursier import format
implicit class PrintImport(deps: coursierapi.Dependency) {
def forAmmonite(mock: Any): Unit = println(s"import $$ivy.`${deps.getModule.getOrganization}:${deps.getModule.getName}:${deps.getVersion}`")
def fetch(mock: Any): Unit = interp.load.ivy(deps)
}
Copy-paste sbt dependency into Ammonite, add forAmmonite ()
and run it
@ "org.typelevel" %% "cats-core" % "2.1.1" forAmmonite ()
import $ivy.`org.typelevel:cats-core_2.13:2.1.1`
then copy-paste output of forAmmnite ()
in order to import it or share with others or
@ "org.typelevel" %% "cats-core" % "2.1.1" fetch ()
to fetch dependencies and make them available in REPL.
Standard library utils
import scala.util._, scala.concurrent._, scala.concurrent.duration._
Not use together with monix.execution.Scheduler
import scala.concurrent.ExecutionContext.Implicits.global
2.13-only
import scala.util.chaining._
JVM utils
import java.util.UUID, java.time._
Set compiler flags
Enable macro annotations
2.13-only, 2.12 needs Macro paradise
interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
Log implicits
interp.configureCompiler(_.settings.XlogImplicits.value = true)
Partial unification
Build-in in 2.13, only needed in 2.12 and before
interp.configureCompiler(_.settings.YpartialUnification.value = true)
Load compiler plugins
Kind projector
import $plugin.$ivy.`org.typelevel:kind-projector_2.13.2:0.11.0`
Better monadic for
import $plugin.$ivy.`com.olegpy::better-monadic-for:0.3.1`
Macro paradise
2.13 replaced it with Ymacro-annotation compiler flag
import $plugin.$ivy.`org.scalamacros:paradise_2.12.11:2.1.1`
Splain
import $plugin.$ivy.`io.tryp:splain_2.13.2:0.5.6`
Import libraries
Cats
import $ivy.`org.typelevel::cats-core:2.1.0`, cats._, cats.data._, cats.implicits._
import $ivy.`org.typelevel::cats-effect:2.1.3`, cats.effect._
import $ivy.`org.typelevel::kittens:2.1.0`, cats.derived.auto._
Catnip
interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
import $ivy.`io.scalaland::catnip:1.0.0`, io.scalaland.catnip._, cats._, cats.implicits._, alleycats.std.all._
Chimney
import $ivy.`io.scalaland::chimney:0.5.2`, io.scalaland.chimney.dsl._
import $ivy.`io.scalaland::chimney-cats:0.5.2`, io.scalaland.chimney.cats._
Circe
import $ivy.`io.circe::circe-generic:0.13.0`, io.circe._, io.circe.generic.auto._, io.circe.syntax._, io.circe.generic.JsonCodec
import $ivy.`io.circe::circe-generic-extras:0.13.0`, io.circe.generic.extras._, io.circe.generic.extras.semiauto._
import $ivy.`io.circe::circe-parser:0.13.0`, io.circe.parser._
import $ivy.`io.circe::circe-optics:0.13.0`, io.circe.optics.JsonPath._
Enumeratum
import $ivy.`com.beachape::enumeratum:1.6.0`, enumeratum._
import $ivy.`com.beachape::enumeratum-circe:1.6.0`, enumeratum._
Enumz
import $ivy.`io.scalaland::enumz:1.0.0`, io.scalaland.enumz.Enum
FS2
import $ivy.`co.fs2::fs2-core:2.3.0`, fs2._
import $ivy.`co.fs2::fs2-io:2.3.0`, fs2.io._
Monix
import $ivy.`io.monix::monix:3.2.1`, monix.eval._, monix.execution._
import monix.execution.Scheduler.Implicits.global
Monocle
import $ivy.`com.github.julien-truffaut::monocle-core:2.0.4`, monocle._
interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
import $ivy.`com.github.julien-truffaut::monocle-macro:2.0.4`, monocle.macros._, monocle.macros.syntax.lens._
Newtype
interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
import $ivy.`io.estatico::newtype:0.4.4`, io.estatico.newtype.macros.newtype, io.estatico.newtype.ops._
Pureconfig
import $ivy.`com.github.pureconfig::pureconfig:0.12.3`, pureconfig._, pureconfig.generic.auto._
Quicklens
import $ivy.`com.softwaremill.quicklens::quicklens:1.6.0`, com.softwaremill.quicklens._
Refined
import $ivy.`eu.timepit::refined:0.9.14`, eu.timepit.refined.api.Refined, eu.timepit.refined._, eu.timepit.refined.auto._
import $ivy.`eu.timepit::refined-cats:0.9.14`, eu.timepit.refined.cats._, eu.timepit.refined.cats.syntax._
import $ivy.`eu.timepit::refined-pureconfig:0.9.14`, eu.timepit.refined.pureconfig._
Shapeless
import $ivy.`com.chuusai::shapeless:2.3.3`, shapeless._
ZIO
import $ivy.`dev.zio::zio:1.0.0-RC20`, zio._, zio.blocking, zio.clock._, zio.console._, zio.duration._, zio.random._, zio.stm._, zio.system._
import $ivy.`dev.zio::zio-streams:1.0.0-RC20`, zio.stream._