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

Maven Central

import $plugin.$ivy.`org.typelevel:kind-projector_2.13.2:0.11.0`

Better monadic for

Maven Central

import $plugin.$ivy.`com.olegpy::better-monadic-for:0.3.1`

Macro paradise

2.13 replaced it with Ymacro-annotation compiler flag

Maven Central

import $plugin.$ivy.`org.scalamacros:paradise_2.12.11:2.1.1`

Splain

Maven Central

import $plugin.$ivy.`io.tryp:splain_2.13.2:0.5.6`

Import libraries

Cats

Maven Central

import $ivy.`org.typelevel::cats-core:2.1.0`, cats._, cats.data._, cats.implicits._

Maven Central

import $ivy.`org.typelevel::cats-effect:2.1.3`, cats.effect._

Maven Central

import $ivy.`org.typelevel::kittens:2.1.0`, cats.derived.auto._

Catnip

Maven Central

interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
import $ivy.`io.scalaland::catnip:1.0.0`, io.scalaland.catnip._, cats._, cats.implicits._, alleycats.std.all._

Chimney

Maven Central

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

Maven Central

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

Maven Central

import $ivy.`com.beachape::enumeratum:1.6.0`, enumeratum._
import $ivy.`com.beachape::enumeratum-circe:1.6.0`, enumeratum._

Enumz

Maven Central

import $ivy.`io.scalaland::enumz:1.0.0`, io.scalaland.enumz.Enum

FS2

Maven Central

import $ivy.`co.fs2::fs2-core:2.3.0`, fs2._
import $ivy.`co.fs2::fs2-io:2.3.0`, fs2.io._

Monix

Maven Central

import $ivy.`io.monix::monix:3.2.1`, monix.eval._, monix.execution._
import monix.execution.Scheduler.Implicits.global

Monocle

Maven Central

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

Maven Central

interp.configureCompiler(_.settings.YmacroAnnotations.value = true)
import $ivy.`io.estatico::newtype:0.4.4`, io.estatico.newtype.macros.newtype, io.estatico.newtype.ops._

Pureconfig

Maven Central

import $ivy.`com.github.pureconfig::pureconfig:0.12.3`, pureconfig._, pureconfig.generic.auto._

Quicklens

Maven Central

import $ivy.`com.softwaremill.quicklens::quicklens:1.6.0`, com.softwaremill.quicklens._

Refined

Maven Central

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

Maven Central

import $ivy.`com.chuusai::shapeless:2.3.3`, shapeless._

ZIO

Maven Central

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