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