handouts/amm-faq.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Fri, 24 Oct 2025 08:55:14 +0100
changeset 1015 4b3489012ac0
parent 993 handouts/amm-ho.tex@29db0cb761c2
child 1016 3a431a78499d
permissions -rw-r--r--
added amm faq
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     1
\documentclass{article}
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     2
\usepackage{../style}
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     3
\usepackage{../langs}
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     4
\usepackage{marvosym}
917
d3d371ae5fab updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 870
diff changeset
     5
\usepackage{tcolorbox}
d3d371ae5fab updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 870
diff changeset
     6
%% \usepackage[]{hvextern}
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     7
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     8
%cheat sheet
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     9
%http://worldline.github.io/scala-cheatsheet/
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    10
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    11
\begin{document}
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    12
\fnote{\copyright{} Christian Urban, King's College London, 2025}
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    13
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    14
\section*{Ammonite ``Quirks''}
917
d3d371ae5fab updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 870
diff changeset
    15
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    16
While Ammonite is great when it comes to additional features, such as
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    17
multiple main's and dynamically loading files, and in the past it was
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    18
a rock-solid piece of software written by one of my Scala-heroes
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    19
(Haoyi Li), it seems it has acquired some ``quirks'' when it
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    20
transitioned to Scala 3. Interestingly, the problems listed below only occur
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    21
inside the REPL. So running Scala-scripts on the command
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    22
line with for example
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    23
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    24
\begin{lstlisting}[language={},numbers=none,basicstyle=\ttfamily\small]
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    25
$ amm cw02.sc
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    26
\end{lstlisting} %% $
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    27
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    28
\noindent
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    29
works fine. Similarly, the original Scala REPL seems to not suffer 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    30
from these quirks. Unfortunately, this REPL does not allow you to
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    31
dynamically load files which might be relevant in later CWs.
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    32
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    33
\subsection*{Problem with Implicits}
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    34
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    35
In CW2 (and possibly others), if you use the template code and develop
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    36
your code inside the REPL, a problem arises in the line
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    37
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    38
\begin{lstlisting}[numbers=none,language=Scala]
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    39
val KEYWORD : Rexp = "while" | "if" | "then" 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    40
\end{lstlisting}
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    41
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    42
\noindent with the error
760
e11aa9bf2600 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 759
diff changeset
    43
e11aa9bf2600 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 759
diff changeset
    44
\begin{lstlisting}[numbers=none,language=Scala]
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    45
-- [E008] Not Found Error: cmd17.sc:1:36 -----------------------------
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    46
1 |val KEYWORD : Rexp = "while" | "if" | "then" 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    47
  |                     ^^^^^^^^^^^^^^^^
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    48
  |value | is not a member of ammonite.$sess.cmd4.ALT.
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    49
  |An extension method was tried, but could not be fully constructed:
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    50
  |
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    51
  |    ammonite.$sess.cmd16.|()
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    52
  |
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    53
  |    failed with:
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    54
  |
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    55
  |        value |: <overloaded ammonite.$sess.cmd16.|> does not take 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    56
  |        parameters
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    57
  |Compilation Failed
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    58
\end{lstlisting}%$\medskip
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    59
993
29db0cb761c2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 964
diff changeset
    60
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    61
\noindent\textbf{Fix:} The code runs absolutely fine when called on the
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    62
commandline. It also runs absolutely fine inside the standard Scala REPL.
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    63
If you prefer to use to use the Ammonite REPL, then you need to make the 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    64
following changes: (1) comment out the implicits below and change the 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    65
\code{$} to for example \code{&}%$:
993
29db0cb761c2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 964
diff changeset
    66
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    67
\begin{lstlisting}[numbers=none,language=Scala]
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    68
extension (s: String) {
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    69
  def & (r: Rexp) = RECD(s, r)
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    70
  //def | (r: Rexp) = ALT(s, r)
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    71
  //def | (r: String) = ALT(s, r)
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    72
  //def % = STAR(s)
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    73
  //def ~ (r: Rexp) = SEQ(s, r)
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    74
  //def ~ (r: String) = SEQ(s, r)
993
29db0cb761c2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 964
diff changeset
    75
}
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    76
\end{lstlisting}
993
29db0cb761c2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 964
diff changeset
    77
1015
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    78
\noindent You need to then use \code{&} in the code for the 
4b3489012ac0 added amm faq
Christian Urban <christian.urban@kcl.ac.uk>
parents: 993
diff changeset
    79
\code{WHILE_REGS}
993
29db0cb761c2 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 964
diff changeset
    80
754
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    81
\end{document}
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    82
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    83
%%% Local Variables: 
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    84
%%% mode: latex
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    85
%%% TeX-master: t
05a51fa5f7bb ammonite
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    86
%%% End: