アドホックなScalaコードを実行したいときにAmmonite REPL

よく使うし便利なのでメモ

Ammonite

インストールしたら、ammで起動できる。

ᐅ amm 
Loading...
Compiling (synthetic)/ammonite/predef/interpBridge.sc
Compiling (synthetic)/ammonite/predef/replBridge.sc
Compiling (synthetic)/ammonite/predef/DefaultPredef.sc
Welcome to the Ammonite Repl 1.1.0
(Scala 2.12.4 Java 1.8.0_152)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi

例えば、cats-coreをその場で読み込む

@ import $ivy.`org.typelevel::cats-core:1.0.0`
https://repo1.maven.org/maven2/org/typelevel/cats-core_2.12/1.0.0/cats-core_2.1…
  100.0% [##########] 4.6 KiB (7.4 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-macros_2.12/1.0.0/cats-macros…
  100.0% [##########] 4.1 KiB (9.7 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-kernel_2.12/1.0.0/cats-kernel…
  100.0% [##########] 3.9 KiB (9.0 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/machinist_2.12/0.6.2/machinist_2.1…
  100.0% [##########] 1.7 KiB (3.9 KiB / s)
https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.0/scala-reflec…
  100.0% [##########] 1.8 KiB (15.0 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-macros_2.12/1.0.0/cats-macros…
  100.0% [##########] 6.0 KiB (46.9 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/machinist_2.12/0.6.2/machinist_2.1…
  100.0% [##########] 32.9 KiB (124.9 KiB / s)
https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.0/scala-reflec…
  100.0% [##########] 3.4 MiB (2.2 MiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-core_2.12/1.0.0/cats-core_2.1…
  100.0% [##########] 3.7 MiB (2.1 MiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-kernel_2.12/1.0.0/cats-kernel…
  100.0% [##########] 3.0 MiB (1.6 MiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-macros_2.12/1.0.0/cats-macros…
  100.0% [##########] 1.1 KiB (9.4 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/machinist_2.12/0.6.2/machinist_2.1…
  100.0% [##########] 3.5 KiB (29.6 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-kernel_2.12/1.0.0/cats-kernel…
  100.0% [##########] 42.8 KiB (133.9 KiB / s)
https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.0/scala-reflec…
  100.0% [##########] 557.8 KiB (718.8 KiB / s)
https://repo1.maven.org/maven2/org/typelevel/cats-core_2.12/1.0.0/cats-core_2.1…
  100.0% [##########] 190.4 KiB (210.6 KiB / s)
import $ivy.$
@ import cats.Eval
import cats.Eval

@ def factorial(n: BigInt): Eval[BigInt] =
    if(n == 1) {
      Eval.now(n)
    } else {
      factorial(n - 1).map(_ * n)
    }
defined function factorial

単にscalaコマンドでREPLすると外部ライブラリ読み込めないしsbt console使うのもtoo muchなときに使っている。