@@ -395,7 +395,7 @@ There has been some research conducted in the field of type systems with row-pol
395395
396396\section{Our Nix type system}
397397
398−As mentioned above, we have opted to use the Damas-Milner type system as a basis for our implementation. Our goal is not to just add types for the sake of types, but give additional reassurance to the developer, and reject as many potentially ``invalid'' programs as possible. If the developed typechecker processes a program without errors, then the program should have no type errors during execution.
398+As mentioned above, we have opted to use the Damas-Milner type system as a basis for our implementation. Our goal is not just to add types for the sake of types, but give additional reassurance to the developer, and reject as many potentially ``invalid'' programs as possible. If the developed typechecker processes a program without errors, then the program should have no type errors during execution.
399399
400400\subsection{Polymorphism} \label{sec:polymorphism}
401401
@@ -568,7 +568,7 @@ The term \texttt{x: y: x // y} would yield the following type:
568568 \forall \alpha \beta \gamma. \; \alpha \update \beta \sim \gamma \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma
569569\end{equation}
570570
571−\subsection{Atmoic types}
571+\subsection{Atomic types}
572572
573573Nix is a dynamic language, and as such, allows dynamic coercions between certain types. This means that we can not use the dynamic types from the interpreter to perform static type checking -- if we did that we would reject \emph{a lot} of valid programs.\footnote{``Valid'' not just in the sense that they would not produce runtime errors, but ``valid'' in the sense that the programmer would judge the program as being ``correct''.}
574574
@@ -1123,7 +1123,7 @@ in [
11231123 \label{lst:haskellPackages}
11241124\end{figure}
11251125
1126−A mistake that is easy to make here is to forget to quote the \texttt{compilerVersion} field, leading to the type being `Number' instead of `String'. In that case out implementation will convey exactly that in an error.
1126+A mistake that is easy to make here is to forget to quote the \texttt{compilerVersion} field, leading to the type being `Number' instead of `String'. In that case our implementation will convey exactly that in an error.
11271127
11281128Another common mistake is specifying the \texttt{compilerFlags} field as a single `String' instead of a list. In that case our implementation will emit an appropriate error without the need to execute the expression.
11291129
@@ -1203,7 +1203,7 @@ where $\beta$ can be the type $\alpha$. With this predicate, our ``String or Num
12031203
12041204\section*{Conclusion}
12051205
1206−In this paper we have examined the existing approaches which have been used in developing type systems for functional programming languages. We have then adapted the existing approaches and developed a new static type system for the Nix Expression Language. We have also developed a preliminary implementation of you type system which we tested on an existing code base. We have also outlined further practical improvements to our implementation which could improve the developer experience.
1206+In this paper we have examined the existing approaches which have been used in developing type systems for functional programming languages. We have then adapted the existing approaches and developed a new static type system for the Nix Expression Language. We have also developed a preliminary implementation of our type system which we tested on an existing code base. We have also outlined further practical improvements to our implementation which could improve the developer experience.
12071207
12081208\newpage
12091209