% macro.tex
% common to all exercises

\usepackage[dvipsnames]{xcolor}
\usepackage{amsmath, amssymb}
\usepackage{xspace}
\usepackage[colorlinks]{hyperref}
\usepackage{tabularx}
\usepackage{multicol}

% for drawing
\usepackage{tikz}
\usetikzlibrary{automata, arrows, shapes, positioning}

\usepackage{forest}

\usepackage{bussproofs, bussproofs-extra}

% for code
\usepackage{listings}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstdefinestyle{scalaStyle}{
  frame=tb,
  language=scala,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle=\small\ttfamily,
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  frame=none,
  breaklines=true,
  breakatwhitespace=true,
  tabsize=2,
}

\lstset{style=scalaStyle}

% lstinline in math mode
% https://tex.stackexchange.com/a/127018

\usepackage{letltxmacro}
\newcommand*{\SavedLstInline}{}
\LetLtxMacro\SavedLstInline\lstinline
\DeclareRobustCommand*{\lstinline}{%
  \ifmmode
    \let\SavedBGroup\bgroup
    \def\bgroup{%
      \let\bgroup\SavedBGroup
      \hbox\bgroup
    }%
  \fi
  \SavedLstInline
}

% for exercises

\newcounter{exercisenum}
\newcommand{\theexercise}{\arabic{exercisenum}}

\usepackage{marginnote}
\newenvironment{exercise}[1]{\refstepcounter{exercisenum}\paragraph*{Exercise \theexercise}{\reversemarginpar\marginnote{#1}}}{}

\usepackage{verbatim}

\usepackage{ifthen}
\newboolean{showanswers}
\setboolean{showanswers}{false}
\newcommand{\printanswers}{\setboolean{showanswers}{true}}
\newcommand\suppress[1]{} 

\newcommand\ite[3]{\ifthenelse{\boolean{#1}}%
{#2\suppress{#3}}%
{\suppress{#2}#3}}


\newenvironment{solution}{%
    \ite{showanswers}{\paragraph*{Solution}}{\expandafter\comment}
}{%
    \ite{showanswers}{\hfill\(\square\)}{\expandafter\endcomment}
}

\newcommand{\note}[1]{\hfill #1}

\sloppy

%% actual macros

% meta
\newcommand{\todo}[1]{\textcolor{red}{[Todo: #1]}}

\newcommand{\fbowtie}{\mathrel \blacktriangleright \joinrel \mathrel \blacktriangleleft}

\newcommand{\easy}{\ensuremath{\bigstar}\xspace}
\newcommand{\hard}{\small\ensuremath{\fbowtie}\xspace}

% real
\newcommand{\naturals}{\mathbb{N}}
\newcommand{\booleans}{\mathbb{B}}

% church booleans
\newcommand{\tru}{\lstinline|true|\xspace}
\newcommand{\fls}{\lstinline|false|\xspace}

% proof systems
\newcommand{\natded}{\mathcal{N}} % natural deduction