on master help sign in
docs/.vscode/settings.json+8−1
since splitsnapshots
unifiedsplit
@@ -11,5 +11,12 @@
11 "-A",
11 "-A",
12 "%DOCFILE%"
12 "%DOCFILE%"
13 ],
13 ],
14− "nixEnvSelector.suggestion": false
14+ "nixEnvSelector.suggestion": false,
15+ "latex-workshop.latexindent.args": [
16+ "-c",
17+ "%DIR%/",
18+ "%TMPFILE%",
19+ "-y=defaultIndent: '%INDENT%'",
20+ "-l"
21+ ]
15}
22}
docs/paper.lhs+427−81
@@ -1,4 +1,4 @@
1−\documentclass[a4paper,conference]{IEEEtran}
1+\documentclass[a4paper,journal,compsoc]{IEEEtran}
2
2
3% \usepackage{float}
3% \usepackage{float}
4\usepackage{mathtools}
4\usepackage{mathtools}
@@ -6,6 +6,7 @@
6\usepackage{microtype}
6\usepackage{microtype}
7\usepackage{trfrac}
7\usepackage{trfrac}
8\usepackage{multirow}
8\usepackage{multirow}
9+\usepackage{textcomp}
9% \usepackage{caption}
10% \usepackage{caption}
10% \usepackage[main=english,russian]{babel}
11% \usepackage[main=english,russian]{babel}
11
12
@@ -16,6 +17,26 @@
16
17
17%include polycode.fmt
18%include polycode.fmt
18
19
20+%format forall = "\forall"
21+%format a = "\alpha"
22+%format a'
23+%format b = "\beta"
24+%format b'
25+%format c = "\gamma"
26+%format c'
27+%format d = "\delta"
28+%format d'
29+%format s = "\sigma"
30+%format m = "\mu"
31+%format r = "\psi"
32+%format x = "\eta"
33+%format x'
34+%format y = "\zeta"
35+%format y'
36+%format ^ = " "
37+%format ^^ = "\;"
38+%format !! = "{\;}''\!\!"
39+%format <> = "\diamond"
19
40
20% \floatstyle{boxed}
41% \floatstyle{boxed}
21% \newfloat{figure}{hbp}{lst}
42% \newfloat{figure}{hbp}{lst}
@@ -47,7 +68,7 @@
47\pagestyle{plain}
68\pagestyle{plain}
48
69
49\begin{abstract}
70\begin{abstract}
50− Configuring and building even the most straightforward software projects is often not simple -- it requires downloading and installing copious amounts of prerequisite software. This often makes reproducing builds of a project on different machines problematic. The Nix package manager aims to address this problem by providing a unified language for describing software packages in a purely functional way. This language is called the Nix Expression Language. Since all of the complexity of software configuration needs to be expressed in the Nix Expression Language, the expressions themselves often become quite complicated, making it difficult to understand and extend existing expressions without introducing errors. A widespread tool for easing the understandability and correctness of expressions in other languages is static type checking. This paper will explore the techniques that can be used to add static type checking to the Nix Expression Language.
71+ Configuring and building even the most straightforward software projects is often not simple -- it requires downloading and installing copious amounts of prerequisite software. This often makes reproducing builds of a project on different machines problematic. The Nix package manager aims to address this problem by providing a unified language for describing software packages in a purely functional way. This language is called the Nix Expression Language. Since all of the complexity of software configuration needs to be expressed in the Nix Expression Language, the expressions themselves often become pretty complicated, making it difficult to understand and extend existing expressions without introducing errors. A widespread tool for easing the understandability and correctness of expressions in other languages is static type checking. This paper will explore the techniques that can be used to add static type checking to the Nix Expression Language.
51\end{abstract}
72\end{abstract}
52
73
53% \begin{otherlanguage}{russian}
74% \begin{otherlanguage}{russian}
@@ -58,7 +79,7 @@
58
79
59% \end{otherlanguage}
80% \end{otherlanguage}
60
81
61−\parr{Source code} \url{https://github.com/ilyakooo0/tix}
82+% \parr{Source code} \url{https://github.com/ilyakooo0/tix}
62
83
63% \newpage
84% \newpage
64
85
@@ -66,11 +87,11 @@
66
87
67\section*{Introduction}
88\section*{Introduction}
68
89
69−Today developing software is riddled with large amounts of complexity -- newer software is built on top of older software, dragging the whole stack below as dependencies. As a result, building software requires a large number of dependencies to be preinstalled. Modern build systems like Gradle\footnote{\url{https://gradle.org}}, Maven\footnote{\url{https://maven.apache.org}}, and Stack\footnote{\url{https://docs.haskellstack.org/en/stable/README/}} try to mitigate the issue by automatically downloading and installing the required dependencies. However, in most cases, such tools can only manage language-level dependencies, requiring the user to install additional libraries and tools manually.
90+Today developing software is riddled with large amounts of complexity -- newer software is built on top of older software, dragging the whole stack below as dependencies. As a result, building software requires a large number of dependencies to be preinstalled. Modern build systems like Gradle\footnote{\url{https://gradle.org}}, Maven\footnote{\url{https://maven.apache.org}}, and Stack\footnote{\url{https://docs.haskellstack.org/en/stable/README/}} try to mitigate the issue by automatically downloading and installing the required dependencies. However, in most cases, such tools can only manage language-level dependencies, requiring the user to manually install additional libraries and tools.
70
91
71Such manual dependency management leads to several problems. Firstly, when a user wants to work on a project he has not encountered before, he will have to install the required dependencies, leading to additional tedious work. Furthermore, the required versions of project dependencies might conflict with the versions that another project requires. The user will have to manually switch the versions of executables and libraries when switching between projects.
92Such manual dependency management leads to several problems. Firstly, when a user wants to work on a project he has not encountered before, he will have to install the required dependencies, leading to additional tedious work. Furthermore, the required versions of project dependencies might conflict with the versions that another project requires. The user will have to manually switch the versions of executables and libraries when switching between projects.
72
93
73−This problem is partially solved by so-called virtual environments tools. A virtual environment is a way of restricting and customizing the available external tools (usually compilers) with the ability to dynamically switch between them. The tools can generally be split into one of two categories:
94+So-called virtual environment tools partially solve this problem. A virtual environment is a way of restricting and customizing the available external tools (usually compilers) with the ability to switch between them dynamically. These tools can generally be split into one of two categories:
74
95
75\begin{enumerate}
96\begin{enumerate}
76 \item \emph{language-specific tools} which simplify installing and switching between different versions of some tools (usually compilers). Examples of such tools are:
97 \item \emph{language-specific tools} which simplify installing and switching between different versions of some tools (usually compilers). Examples of such tools are:
@@ -88,7 +109,7 @@ This problem is partially solved by so-called virtual environments tools. A virt
88 \end{enumerate}
109 \end{enumerate}
89\end{enumerate}
110\end{enumerate}
90
111
91−Even so, such tools still require explicit user action: the user needs to explicitly switch between (or install) the necessary tools when switching projects in the case of \emph{language-specific tools}, the user needs to explicitly install the required tools in some other way for them to be imported by \emph{general-purpose tools}.
112+Such tools still require explicit user action: the user needs to explicitly switch between (or install) the necessary tools when switching projects in the case of \emph{language-specific tools}, the user needs to explicitly install the required tools in some other way for them to be imported by \emph{general-purpose tools}.
92
113
93Secondly, manual dependency management impedes the reproducibility of the project builds -- building the same project on multiple machines will, in all likelihood, produce different results since the machines will likely differ in many ways that impact the build, such as having slightly different versions\footnote{``Version'' here refers to actual variations on the bit level, and not just version numbers.} of libraries and executables.
114Secondly, manual dependency management impedes the reproducibility of the project builds -- building the same project on multiple machines will, in all likelihood, produce different results since the machines will likely differ in many ways that impact the build, such as having slightly different versions\footnote{``Version'' here refers to actual variations on the bit level, and not just version numbers.} of libraries and executables.
94
115
@@ -100,19 +121,19 @@ Using a fully-fledged programming language allows the users to reuse common defi
100
121
101Nix Expression Language is a dynamic, lazy, purely functional programming language. The purely functional nature of the language aids in build reproducibility guarantees that Nix aims to provide.
122Nix Expression Language is a dynamic, lazy, purely functional programming language. The purely functional nature of the language aids in build reproducibility guarantees that Nix aims to provide.
102
123
103−Even considering the tremendous benefits that using a programming language for build configuration brings, the dynamic nature of the language often still makes it challenging to understand and reuse existing code. This is in part due to the large amounts of code required to describe real-world systems in all of their complexity fully.\footnote{The standard Nix package repository |nixpkgs| contains 2 million lines of code.}
124+Even considering the tremendous benefits that using a programming language for build configuration brings, the dynamic nature of the language often still makes it challenging to understand and reuse existing code. This is in part due to the large amounts of code required to describe real-world systems in all of their complexity.\footnote{The standard Nix package repository |nixpkgs| contains 2 million lines of code.}
104
125
105Refactoring existing code is also tricky since the generated expressions are only really checked for correctness\footnote{Here, ``correctness'' is used to mean the absence of evaluation-time errors.} at their evaluation time, and the evaluation time of expressions is difficult to predict due to the lazy nature of the language.
126Refactoring existing code is also tricky since the generated expressions are only really checked for correctness\footnote{Here, ``correctness'' is used to mean the absence of evaluation-time errors.} at their evaluation time, and the evaluation time of expressions is difficult to predict due to the lazy nature of the language.
106
127
107−Static type checking is the process of analyzing the types of expressions and detecting type errors in programs without evaluating them.
128+A widespread tool for easing development and alleviate the aforementioned problems in other languages is static type checking -- the process of analyzing the types of expressions and detecting type errors in programs without evaluating them.
108
129
109−Even though static type checking in most mainstream programming languages does not influence the semantics of the programs, it is nonetheless widely used. This is an indication of the usefulness of static type checking during development. Type checking helps detect likely ``incorrect'' programs without evaluating them (very helpful during refactoring), and aids in understanding existing code since types often expose some semantics of expressions (this is especially true for purely functional programs).
130+Even though static type checking in most mainstream programming languages does not influence the semantics of the programs, it is nonetheless widely used. This is an indication of the usefulness of static type checking during development. Type checking helps detect likely ``incorrect'' programs without evaluating them (very helpful during refactoring) and aids in understanding existing code since types often expose some semantics of expressions (this is especially true for purely functional programs).
110
131
111The Nix Expression Language does not currently support static type checking of any kind. Of course, retrofitting a static type checker onto an existing dynamic programming language will reject programs that will not produce errors at runtime. However, this is still a goal worth pursuing because even with all of the situations when the type checker produces false negatives, inferring types for existing expressions, as mentioned above, will aid in understanding existing code and surface potentially problematic areas of code to the developer.
132The Nix Expression Language does not currently support static type checking of any kind. Of course, retrofitting a static type checker onto an existing dynamic programming language will reject programs that will not produce errors at runtime. However, this is still a goal worth pursuing because even with all of the situations when the type checker produces false negatives, inferring types for existing expressions, as mentioned above, will aid in understanding existing code and surface potentially problematic areas of code to the developer.
112
133
113\section{Nix Expression Language}
134\section{Nix Expression Language}
114
135
115−In this chapter we will examine the semantics of major terms of the Nix Expression Language. We will from now on abbreviate \emph{Nix Expression Language} as \emph{Nix} as it is in most cases clear from the context what is being referred to: the language or the system as a whole.
136+In this chapter, we will examine the semantics of major terms of the Nix Expression Language. We will, from now on abbreviate \emph{Nix Expression Language} as \emph{Nix} as it is in most cases clear from the context what is being referred to: the language or the system as a whole.
116
137
117\subsection{Atomic types}
138\subsection{Atomic types}
118
139
@@ -137,7 +158,7 @@ Atomic types are described in table~\ref{tab:atomicTypes}.
137
158
138\subsubsection{Double quoted string literals}
159\subsubsection{Double quoted string literals}
139
160
140−Double quoted string literals are string literals just like in many other programming languages. It can contain esaped newline character literals \texttt{\\n} which will be preserved as shown in listing~\ref{lst:newlineString}.
161+Double quoted string literals are string literals, just like in many other programming languages. It can contain escaped newline character literals \texttt{\textbackslash n} which will be preserved as shown in figure~\ref{lst:newlineString}.
141
162
142\begin{figure}
163\begin{figure}
143 \begin{minipage}{\textwidth}
164 \begin{minipage}{\textwidth}
@@ -151,7 +172,7 @@ Double quoted string literals are string literals just like in many other progra
151
172
152\subsubsection{Multiline string literals}
173\subsubsection{Multiline string literals}
153
174
154−Multiline string literals are enclosed by pairs of single quotes (\texttt{''} as opposed to \texttt{"}). Newlines are preserved and indentation is stripped from the beginning of the literal. An example multiline string literal is shown in listing~\ref{lst:multilineString}.
175+Multiline string literals are enclosed by pairs of single quotes (\texttt{''} as opposed to \texttt{"}). Newlines are preserved, and indentation is stripped from the beginning of the literal. An example multiline string literal is shown in figure~\ref{lst:multilineString}.
155
176
156\begin{figure}
177\begin{figure}
157 \begin{minipage}{\textwidth}
178 \begin{minipage}{\textwidth}
@@ -169,7 +190,7 @@ Palnet''
169
190
170% \subsubsection{String interpolation}
191% \subsubsection{String interpolation}
171
192
172−% The Nix Expression Language also allows for arbitrary expressions of the language to be interpolated in string using the following syntax: \texttt{\$\{ <expression> \}} where \texttt{<expression>} is a Nix expression.An example of string interpolation is show in listing~\ref{lst:stringInterpolation}.
193+% The Nix Expression Language also allows for arbitrary expressions of the language to be interpolated in string using the following syntax: \texttt{\$\{ <expression> \}} where \texttt{<expression>} is a Nix expression.An example of string interpolation is show in figure~\ref{lst:stringInterpolation}.
173
194
174% \begin{figure}
195% \begin{figure}
175% \begin{minipage}{\textwidth}
196% \begin{minipage}{\textwidth}
@@ -185,7 +206,7 @@ Palnet''
185
206
186\subsection{Lists}
207\subsection{Lists}
187
208
188−Nix support a list type. List literals are enclosed by square brackets \texttt{[]} and the elements are separated by whitespace. Examples of list literals are shown in listing~\ref{lst:list}.
209+Nix supports a list type. List literals are enclosed by square brackets \texttt{[]}, and the elements are separated by whitespace. Examples of list literals are shown in figure~\ref{lst:list}.
189
210
190\begin{figure}
211\begin{figure}
191 \begin{minipage}{\textwidth}
212 \begin{minipage}{\textwidth}
@@ -199,7 +220,7 @@ Nix support a list type. List literals are enclosed by square brackets \texttt{[
199
220
200\subsection{Attribute sets} \label{sec:attrSet}
221\subsection{Attribute sets} \label{sec:attrSet}
201
222
202−An attribute set is internally implemented as a hashmap with strings as keys where values can be arbitrary expressions. An example attribute set literal is shown in listing~\ref{lst:attrSet}.
223+An attribute set is internally implemented as a hashmap with strings as keys where values can be arbitrary expressions. An example attribute set literal is shown in figure~\ref{lst:attrSet}.
203
224
204\begin{figure}
225\begin{figure}
205 \begin{minipage}{\textwidth}
226 \begin{minipage}{\textwidth}
@@ -215,7 +236,7 @@ An attribute set is internally implemented as a hashmap with strings as keys whe
215 \label{lst:attrSet}
236 \label{lst:attrSet}
216\end{figure}
237\end{figure}
217
238
218−Fields (keys) of an attribute set can be accessed through the \emph{dot} (\texttt{.}) operator as shown in listing~\ref{lst:attrSetAccess}. Accessing an absent field yields a runtime error.
239+Fields (keys) of an attribute set can be accessed through the \emph{dot} (\texttt{.}) operator, as shown in figure~\ref{lst:attrSetAccess}. Accessing an absent field yields a runtime error.
219
240
220\begin{figure}
241\begin{figure}
221 \begin{minipage}{\textwidth}
242 \begin{minipage}{\textwidth}
@@ -233,7 +254,7 @@ Fields (keys) of an attribute set can be accessed through the \emph{dot} (\textt
233
254
234\subsection{Attribute set updates} \label{sec:update}
255\subsection{Attribute set updates} \label{sec:update}
235
256
236−There is a binary \emph{update} operator that takes two \emph{attribute sets} as operands and ``merges'' them in a shallow manner, preferring values from the right operand. The operator is written as two forward slashes \texttt{//}. This has the effect of updating the left operand with values from the right operand. An example is shown in listing~\ref{lst:update}.
257+There is a binary \emph{update} operator that takes two \emph{attribute sets} as operands and ``merges'' them in a shallow manner, preferring values from the right operand. The operator is written as two forward slashes \texttt{//}. This has the effect of updating the left operand with values from the right operand. An example is shown in figure~\ref{lst:update}.
237
258
238\begin{figure}
259\begin{figure}
239 \begin{minipage}{\textwidth}
260 \begin{minipage}{\textwidth}
@@ -250,7 +271,7 @@ There is a binary \emph{update} operator that takes two \emph{attribute sets} as
250
271
251\subsection{Recursive attribute sets} \label{sec:recAttrSet}
272\subsection{Recursive attribute sets} \label{sec:recAttrSet}
252
273
253−While ordinary \emph{attribute sets} from discussed in section~\ref{sec:attrSet} can only reference values defined outside of the attribute set literal, \emph{recursive attribute sets} can also reference values defined in the attribute set literal itself. The keys of the attribute set are essentially available in scope of the attribute set values. An example of \emph{recursive attribute set} are given in listing~\ref{lst:recAttrSet}. Note that it is syntactically distiguished form normal \emph{attribute set} literals by the \texttt{rec} key word at the beginning.
274+While ordinary \emph{attribute sets} discussed in section~\ref{sec:attrSet} can only reference values defined outside of the attribute set literal, \emph{recursive attribute sets} can also reference values defined in the attribute set literal itself. The keys of the attribute set are available in the scopes of the attribute set values. An example \emph{recursive attribute set} is given in figure~\ref{lst:recAttrSet}. Note that it is syntactically distinguished from normal \emph{attribute set} literals by the \texttt{rec} keyword at the beginning.
254
275
255\begin{figure}
276\begin{figure}
256 \begin{minipage}{\textwidth}
277 \begin{minipage}{\textwidth}
@@ -269,7 +290,7 @@ rec {
269
290
270\subsection{Let expressions} \label{sec:let}
291\subsection{Let expressions} \label{sec:let}
271
292
272−A \emph{let expression} has two parts: the \emph{declarations} and the \emph{body}. The format can be roughly described like so: \texttt{let <definitions> in <body>}. A \emph{let expression} allows us to define values in the \emph{declarations} that can be reused in the \emph{body} of the expression. Just like \emph{recursive attribute sets} from section~\ref{sec:recAttrSet} all declared values are available in scope in the defined expressions. An example of \emph{let expressions} is available in listing~\ref{lst:let}.
293+A \emph{let expression} has two parts: \emph{declarations} and the \emph{body}. The format can be roughly described like so: \texttt{let <definitions> in <body>}. A \emph{let expression} allows us to define values in the \emph{declarations} that can be reused in the \emph{body} of the expression. Just like \emph{recursive attribute sets} from section~\ref{sec:recAttrSet} all declared values are available in scope in the defined expressions. An example of \emph{let expressions} is available in figure~\ref{lst:let}.
273
294
274\begin{figure}
295\begin{figure}
275 \begin{minipage}{\textwidth}
296 \begin{minipage}{\textwidth}
@@ -286,7 +307,7 @@ in d
286
307
287\subsection{With expression} \label{sec:withExp}
308\subsection{With expression} \label{sec:withExp}
288
309
289−\emph{With expressions} are a way to bring all values from an \emph{attribute set} into scope. It is conceptually very similar to \emph{let expressions} discussed in section~\ref{sec:let}. The syntax can be roughly describe like so: \texttt{with <set>; <body>} where \texttt{<set>} is an expression which evaluates to an \emph{attribute set} and all values from the set are available as definitions in the \texttt{<body>} expression. An example of a \emph{with expression} can be found in listing~\ref{lst:with}.
310+\emph{With expressions} are a way of bringing all values from an \emph{attribute set} into scope. It is conceptually very similar to \emph{let expressions} discussed in section~\ref{sec:let}. The syntax can be roughly described like so: \texttt{with <set>; <body>} where \texttt{<set>} is an expression which evaluates to an \emph{attribute set} and all values from the set are available as definitions in the \texttt{<body>} expression. An example of a \emph{with expression} can be found in figure~\ref{lst:with}.
290
311
291\begin{figure}
312\begin{figure}
292 \begin{minipage}{\textwidth}
313 \begin{minipage}{\textwidth}
@@ -301,30 +322,32 @@ in d
301 \label{lst:with}
322 \label{lst:with}
302\end{figure}
323\end{figure}
303
324
304−\section{Existing typecheckers}
325+\section{Existing typecheckers implementations}
305
326
306−In this section we will examine existing attempts at developing a typechecker for the Nix Expression Language, determine the features of the implemented type systems and assess how well maintained are the implementations.
327+In this section we will examine existing attempts at developing a typechecker for the Nix Expression Language, determine the features of the implemented type systems and assess how well maintained the implementations are.
307
328
308\subsection{regnat/tix} \label{sec:regnat/tix}
329\subsection{regnat/tix} \label{sec:regnat/tix}
309
330
310−regnat/tix\footnote{\url{https://github.com/regnat/tix}} is an implementation of typechecker for the \emph{Nix Expression Language} implemented in \emph{OCaml}\footnote{\url{https://ocaml.org}}. The type checker itself is implemented on a different much simpler language named \emph{Nix Light}. To typecheck a normal \emph{Nix} program(expression) the program need to be first converted to an equivalent \emph{Nix Light} program. The type checker has a row-polymorphism-inspired feature: records are represented as a product of one-row types. In \emph{Nix Light} lists are represented as a single-liked heterogeneous list. The type system does not have support for parametric polymorphism in favour of a gradual typing paradigm.
331+regnat/tix\footnote{\url{https://github.com/regnat/tix}} is an implementation of a typechecker for the \emph{Nix Expression Language} implemented in \emph{OCaml}\footnote{\url{https://ocaml.org}}. The type checker itself is implemented on a different much simpler language named \emph{Nix Light}. To typecheck a normal \emph{Nix} program(expression) the program need to be first converted to an equivalent \emph{Nix Light} program. The type checker has a row-polymorphism-inspired feature: records are represented as a product of one-row types. In \emph{Nix Light} lists are represented as a single-linked heterogeneous list. The type system does not have support for parametric polymorphism in favour of a gradual typing paradigm.
311
332
312\parr{Status} The last commit was published in 2017 and the project is now abandoned in favour of regnat/ptyx which we examin in section~\ref{sec:regnat/ptyx}.
333\parr{Status} The last commit was published in 2017 and the project is now abandoned in favour of regnat/ptyx which we examin in section~\ref{sec:regnat/ptyx}.
313
334
314\subsection{regnat/ptyx} \label{sec:regnat/ptyx}
335\subsection{regnat/ptyx} \label{sec:regnat/ptyx}
315
336
316−regnat/ptyx\footnote{\url{https://github.com/regnat/ptyx}} is in essence a reimplementation of regnat/tix in Haskell\footnote{\url{https://www.haskell.org}} which we examined in section~\ref{sec:regnat/tix}. The basic ideas and techniques are the same. In fact, so much so, that the simpler language is also called \emph{Nix Light} and \emph{Nix} expression are also converted to it before type checking. There is still no support for parametric polymorphism.
337+regnat/ptyx\footnote{\url{https://github.com/regnat/ptyx}} is in essence a reimplementation of regnat/tix in Haskell\footnote{\url{https://www.haskell.org}} which we examined in section~\ref{sec:regnat/tix}. The basic ideas and techniques are the same. In fact, so much so, that the simpler language is also called \emph{Nix Light} and \emph{Nix} expressions are also converted to it before type checking. There is still no support for parametric polymorphism.
317
338
318\parr{Status} The last commit was published in 2018. Unsupported language features include lists and attribute sets.
339\parr{Status} The last commit was published in 2018. Unsupported language features include lists and attribute sets.
319
340
320\subsection{haskell-nix/hnix}
341\subsection{haskell-nix/hnix}
321
342
322−haskell-nix/hnix\footnote{\url{https://github.com/haskell-nix/hnix}} is primarily not a typechecker, but rather the goal of the project is to fully reimplement the \emph{Nix Expression Language} interpreter in \emph{Haskell}. There is, however a number of modules dedicated to a typechecker implementation which was migrated into the project. Contrary to how it may seem, the typechecker is not integrated with the rest of the project in any significant way. The type system itself is based on the Hindley-Milner type system. However, the type system was not extended with additional features to better support the dynamic nature of \emph{Nix}. For instance, there is no support for row-polymorphism which greatly impedes typechecking any code that interacts with \emph{attribute sets} in any way.
343+haskell-nix/hnix\footnote{\url{https://github.com/haskell-nix/hnix}} is primarily not a typechecker, but rather the goal of the project is to fully reimplement the \emph{Nix Expression Language} interpreter in \emph{Haskell}. There is, however, a number of modules dedicated to a typechecker implementation which was migrated into the project. Contrary to how it may seem, the typechecker is not integrated with the rest of the project in any significant way. The type system itself is based on the Hindley-Milner type system. However, the type system was not extended with additional features to better support the dynamic nature of \emph{Nix}. For instance, there is no support for row-polymorphism which greatly impedes typechecking code that interacts with \emph{attribute sets} in any way.
323
344
324\parr{Status} Last time the typechecker was modified in any substantial way was in 2019. It does not appear to be actively developed. Furthermore, there is no description of the implemented type system.
345\parr{Status} Last time the typechecker was modified in any substantial way was in 2019. It does not appear to be actively developed. Furthermore, there is no description of the implemented type system.
325
346
326
347
327−\section{Existing Approaches}
348+\section{Existing type system research}
349+
350+In this section we will explore existing techniques used to develop typecheckers, and explore how they can be applicable to our implementation.
328
351
329\subsection{Type System Approach}
352\subsection{Type System Approach}
330
353
@@ -354,7 +377,7 @@ In some cases, this approach will likely yield too little information to be usef
354
377
355The original W inference algorithm is a single-stage inference algorithm, meaning that it attempts to satisfy type constraints as soon as it encounters them. A consequence of this is that errors are reported as soon as they are encountered. Often, the information available about the program at the time the error had occurred is very limited due to not all of the program being processed. This leads to poor error reporting.
378The original W inference algorithm is a single-stage inference algorithm, meaning that it attempts to satisfy type constraints as soon as it encounters them. A consequence of this is that errors are reported as soon as they are encountered. Often, the information available about the program at the time the error had occurred is very limited due to not all of the program being processed. This leads to poor error reporting.
356
379
357−In contrast to the single-stage algorithm, the two-stage algorithm~\cite{jones2005practical,serrano2016type} collects the type constraints as the first stage of type checking and solves the collected constraints as a second step. This leads to most errors occurring during the second stage when all available type information has already been collected. As a result, better type errors are produced. This is the preferable approach for our goals.
380+In contrast to the single-stage algorithm, the two-stage algorithm~\cite{jones2005practical,serrano2016type} collects the type constraints as the first stage of type checking and solves the collected constraints as a second step. This leads to most errors occurring during the second stage when all available type information has already been collected. As a result, better type errors are produced. This is the more preferable approach for our goals.
358
381
359\subsection{Row-Polymorphism}
382\subsection{Row-Polymorphism}
360
383
@@ -362,43 +385,27 @@ One of the language-level constructs in the Nix Expression Language is the ``att
362
385
363There has been some research conducted in the field of type systems with row-polymorphic records~\cite{morris2019abstracting,leijen2005extensible}. The approach that should be taken in developing a static type checker for the Nix Expression Language is describing row-polymorphic attribute sets with a construct similar\footnote{The way it should be displayed to the user will be distinct, since, unlike in Haskell, the Nix Expression Language does not have constraints as a language construct.} to Haskell constraints~\cite{orchard2010haskell}.
386There has been some research conducted in the field of type systems with row-polymorphic records~\cite{morris2019abstracting,leijen2005extensible}. The approach that should be taken in developing a static type checker for the Nix Expression Language is describing row-polymorphic attribute sets with a construct similar\footnote{The way it should be displayed to the user will be distinct, since, unlike in Haskell, the Nix Expression Language does not have constraints as a language construct.} to Haskell constraints~\cite{orchard2010haskell}.
364
387
365−\subsection{Message Reporting}
388+% \subsection{Message Reporting}
366−
367−Displaying errors to the user is not as simple as it might initially seem. For the type checker to be as helpful as possible, error messages should display the encountered issues in the language contexts in which they had occurred. Ideally, the errors should point to the exact terms that are most likely problematic.
368−
369−Even if all of the information necessary for detailed error messages is collected during type checking, displaying errors to the user is a problem that deserves its own research\footnote{This also relates to how types are laid out when displaying to the user even when no errors have occurred.}. The users might have different screen sizes. The error message should reflow all of the displayed text, code, and type annotations to accommodate the available space.
370−
371−Hughes introduced a general-purpose algebraic pretty-printer~\cite{hughes1995design}, which was later improved upon~\cite{wadler2003prettier}, to solve precisely this problem. Using one of the pretty-printers based on that research is the industry standard and will be used by our type checker.
372−
373−\section{Architecture}
374
389
375−\subsection{Effect system}
390+% Displaying errors to the user is not as simple as it might initially seem. For the type checker to be as helpful as possible, error messages should display the encountered issues in the language contexts in which they had occurred. Ideally, the errors should point to the exact terms that are most likely problematic.
376
391
377−\subsubsection{Monad transformers}
392+% Even if all of the information necessary for detailed error messages is collected during type checking, displaying errors to the user is a problem that deserves its own research\footnote{This also relates to how types are laid out when displaying to the user even when no errors have occurred.}. The users might have different screen sizes. The error message should reflow all of the displayed text, code, and type annotations to accommodate the available space.
378
393
379−Developing a typechecker requires working with a large amount of non-trivial algorithms which influence each other in complex ways. A widespread way of dealing with such situations is introducing a common computational environment through which different parts of the program can interact (instead of ``manually'' passing state around). A well-established way of handling state in purely functional programming languages is the \emph{Monad} abstraction~\cite{moggi1988computational}.
394+% Hughes introduced a general-purpose algebraic pretty-printer~\cite{hughes1995design}, which was later improved upon~\cite{wadler2003prettier}, to solve precisely this problem. Using one of the pretty-printers based on that research is the industry standard and will be used by our type checker.
380
395
381−It is natural to want to abstract of the underlying monad – explicitly declare what features a function actually needs the monad to have. Furthermore, it is desireable to decompose the features of the a monad not only in function definitions, but also at the call site – it is desireable to be able to conjure up monads with desireable traits in an as-hoc manner. This has been achieved a while ago with \emph{monad transformers}~\cite{liang1995monad}.
396+\section{Our Nix type system}
382
397
383−A drawback of monad transformers is their somewhat rigid nature – every behavior a monad needs to have needs to be defined as a distinct transformer with appropriate instances. The instances need to only implement the desired behavior, but also explicitly ``pass through'' \emph{all} other effects that it might be used in combination with. This means that adding extra behavior leads to a large amount of boilerplate. Furthermore, monads themselves (monad transformers) are not in general composable, leading a whole other set of problems. In addition, it is cumbersome to locally change parts of the underlying implementation of a monad dynamically – it might be useful to tweak some behavior in only part of an algorithm, leaving the rest to the abstract implementation; monad transformers don't really have such capabilities.
384−
385−\subsubsection{Free monad extensible effects}
386−
387−Recently a ne aprproach to effect systems has been getting more attention – \emph{free monads algebraic effects}~\cite{kiselyov2015freer, ploeg2014reflection, kiselyov2013extensible}. This approach solves the problems with monad transformers mentioned above. Rather than being transformers, effects are described as \emph{functors}. The composability problem is resolved due to functors being in general composable. Contrary to how monad transformers operate, effects (or their carriers) in \emph{free monads algebraic effects} (we will from now on refer to them as just \emph{algebraic effects}) don't have any particulare inrpretation of the effect associated with them. Effects are interpreted in an ad-hoc way at the call site. Furthermore this allows us to dynamically modify the behavior of effects without changing the types or implementations of functions we wish to change the behavior of. How we use \emph{algebraic effects} will be discussed in more detail in section~\ref{sec:implementation}.
388−
389−\section{Type system}
390−
391−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 developer 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.
392
399
393\subsection{Polymorphism} \label{sec:polymorphism}
400\subsection{Polymorphism} \label{sec:polymorphism}
394
401
395−Dynamic languages have potenitally limitless polymorphism – you can pass anything of any type to any function and it can potentially work without errors – it is in principal possible to check the ``types'' of passed values at runtime. This leads to the fact that there is really no way to know which ``types'' are acceptable in which positions without executing the program.
402+Dynamic languages have potentially limitless polymorphism – you can pass anything of any type to any function and it can potentially work without errors – it is in principal possible to check the ``types'' of passed values at runtime. This leads to the fact that there is really no way to know which ``types'' are acceptable in which positions without executing the program.
396
403
397The Nix community, just like with any other language, has developed idiomatic ways of solving problems. Some of these idioms are heavily based on polymorphic behavior at runtime. We should strive to develop a type system which supports as much of idiomatic behavior as possible (and where not possible, similar behavior should be expressible within the type system).
404The Nix community, just like with any other language, has developed idiomatic ways of solving problems. Some of these idioms are heavily based on polymorphic behavior at runtime. We should strive to develop a type system which supports as much of idiomatic behavior as possible (and where not possible, similar behavior should be expressible within the type system).
398
405
399Parametric polymorphism has proven to strike a nice balance between strictness, expressiveness and type inference. We feel it will be most useful as a type system for \emph{Nix}.
406Parametric polymorphism has proven to strike a nice balance between strictness, expressiveness and type inference. We feel it will be most useful as a type system for \emph{Nix}.
400
407
401−Inferring types with parametric polymorphism implies generalizing the inferred types at certain points in the program. Generalization is also known as ``closing over type variable'' – it can be though of as explicitly choosing a point where the variable is quantified over. Figure~\ref{fig:closing} is an example of closing for a type variable.
408+Inferring types with parametric polymorphism implies generalizing the inferred types at certain points in the syntax tree. Generalization is also known as ``closing over type variable'' – it can be though of as explicitly choosing a point where the variable is quantified over. Figure~\ref{fig:closing} is an example of closing over a type variable.
402
409
403Traditionally in languages similar to \emph{simply-typed lambda calculus} generalization is performed in \emph{let} declarations – so-called \emph{let-generalization}. \emph{Nix} has a very similar \emph{let} construct as discussed in section~\ref{sec:let} which is also a great point to perform type generalization.
410Traditionally in languages similar to \emph{simply-typed lambda calculus} generalization is performed in \emph{let} declarations – so-called \emph{let-generalization}. \emph{Nix} has a very similar \emph{let} construct as discussed in section~\ref{sec:let} which is also a great point to perform type generalization.
404
411
@@ -423,7 +430,7 @@ Recursive definitions pose a challenge for type inference without developer-supp
423 \item The last implements a more complicated iteration-based type inference algorithm with a user-configurable number of iterations.~\cite{goldberg2000mercury} If the specified number of iterations is not enough to deduce the type of a recursive definition, it is rejected. The clear upside of this approach is that the inferred type (if it is given enough iterations and succeeds) is the principal (most general, most polymorphic) type of the expression.
430 \item The last implements a more complicated iteration-based type inference algorithm with a user-configurable number of iterations.~\cite{goldberg2000mercury} If the specified number of iterations is not enough to deduce the type of a recursive definition, it is rejected. The clear upside of this approach is that the inferred type (if it is given enough iterations and succeeds) is the principal (most general, most polymorphic) type of the expression.
424\end{enumerate}
431\end{enumerate}
425
432
426−While the last approach would allow us to in theory type more programs, we feel that tasking the user with configuring the typechecker would make the barrier to entry higher than it needs, and in practice the second approach would be useful enough (and faster), so that is the approach we chose to go with.
433+While the last approach would allow us to, in theory, type more programs, we feel that tasking the user with configuring the typechecker would make the barrier to entry higher than it needs to be, and in practice the second approach would be useful enough (and faster), so that is the approach we chose to go with.
427
434
428\subsection{Row polymorphism}
435\subsection{Row polymorphism}
429
436
@@ -431,7 +438,7 @@ Nix has first-class hashmaps with strings as keys called \emph{attribute sets} a
431
438
432Of course, since \emph{attribute sets} are used as structures, their internal structure (keys and types of values) has significance and should be tracked in types just like objects and structures are tracked in most statically typed programming languages. Even though it is in most cases implemented as a mechanism that allows the programmer to introduce new types which correspond to a static set of field names and types, and the type system is presented in terms of those types, this is not significantly different from tracking keys directly. In fact, the \emph{Go}\footnote{\url{https://golang.org}} programming language has a notion of \emph{protocols} which bridges the gap between the two paradigms.
439Of course, since \emph{attribute sets} are used as structures, their internal structure (keys and types of values) has significance and should be tracked in types just like objects and structures are tracked in most statically typed programming languages. Even though it is in most cases implemented as a mechanism that allows the programmer to introduce new types which correspond to a static set of field names and types, and the type system is presented in terms of those types, this is not significantly different from tracking keys directly. In fact, the \emph{Go}\footnote{\url{https://golang.org}} programming language has a notion of \emph{protocols} which bridges the gap between the two paradigms.
433
440
434−This leads to a non-trivial typechecking case where modifying a structure leads to the resulting type depending on the type of the input structure as shown in listing~\ref{lst:update_ex}. The listing shows a lambda expression which receives an \emph{attribute set} as input, and updates the field \texttt{a} with the value of \texttt{1}. It quickly becomes problematic to derive a type for this expression if we decide to track fields at the type level: we can say that the lambda takes a value of type \texttt{\{\}} and returns a value of type \texttt{\{a = Integer;\}} (type of functions will later be written as \texttt{<input type> -> <output type>}). This might seem a natural type to derive, however it is obviously not correct. Calling it with a values of type \texttt{\{b = String;\}} and \texttt{\{b = Float; a = Bool;\}} would both be very much valid, and would both produce different resulting types: \texttt{\{a = Integer; b = String;\}} and \texttt{\{a = Integer; b = Float;\}}. As stated above, the output type of a lambda expression like this depends on the input type.
441+This leads to a non-trivial typechecking case where modifying a structure leads to the resulting type depending on the type of the input structure as shown in figure~\ref{lst:update_ex}. The figure shows a lambda expression which receives an \emph{attribute set} as input, and updates the field \texttt{a} with the value of \texttt{1}. It quickly becomes problematic to derive a type for this expression if we decide to track fields at the type level: we can say that the lambda takes a value of type \texttt{\{\}} and returns a value of type \texttt{\{a = Integer;\}} (type of functions will later be written as \texttt{<input type> -> <output type>}). This might seem like a natural type to derive, however it is obviously not correct. Calling it with a values of type \texttt{\{b = String;\}} and \texttt{\{b = Float; a = Bool;\}} would both be very much valid, and would both produce different resulting types: \texttt{\{a = Integer; b = String;\}} and \texttt{\{a = Integer; b = Float;\}}. As stated above, the output type of a lambda expression like this depends on the input type.
435
442
436\begin{figure}
443\begin{figure}
437 \begin{minipage}{\textwidth}
444 \begin{minipage}{\textwidth}
@@ -472,7 +479,7 @@ The second predicate is:
472where all rows from $\alpha$ are present in $\beta$. This predicate isn't strictly necessary, and can be expressed through predicate~\ref{eq:combination}:
479where all rows from $\alpha$ are present in $\beta$. This predicate isn't strictly necessary, and can be expressed through predicate~\ref{eq:combination}:
473
480
474\begin{equation}
481\begin{equation}
475− \alpha \clt \gamma = \exists \beta. \; \alpha \odot \beta \sim \gamma
482+ \alpha \clt \gamma = \exists \beta. \; \beta \odot \alpha \sim \gamma
476\end{equation}
483\end{equation}
477
484
478Nevertheless, this predicate was still introduced as it closely matches the language term syntax and simplifies further processing of type.
485Nevertheless, this predicate was still introduced as it closely matches the language term syntax and simplifies further processing of type.
@@ -506,7 +513,7 @@ The types of the other two expressions are not fully expressible with the predic
506
513
507When deciding how to model the four base row-related operations we decided to derive the predicates from the operations themselves. This would yield simpler types, and having simpler types for base operations leads to simpler types overall. Furthermore, the type system would in all likelihood be easier for Nix developers to use and understand if it is expressed in terms of familiar operations.
514When deciding how to model the four base row-related operations we decided to derive the predicates from the operations themselves. This would yield simpler types, and having simpler types for base operations leads to simpler types overall. Furthermore, the type system would in all likelihood be easier for Nix developers to use and understand if it is expressed in terms of familiar operations.
508
515
509−We will not describe the row predicates we have chosen for Nix. Note the analogy with the enumeration from section~\ref{sec:nixRowPoly}.
516+We will now describe the row predicates we have chosen for Nix. Note the analogy with the enumeration from section~\ref{sec:nixRowPoly}.
510
517
511\newcommand{\update}{\mathbin{/\!\!/}}
518\newcommand{\update}{\mathbin{/\!\!/}}
512\newcommand{\optDot}{.\!?}
519\newcommand{\optDot}{.\!?}
@@ -519,7 +526,7 @@ We will not describe the row predicates we have chosen for Nix. Note the analogy
519
526
520The type $\alpha$ should be an attribute set and it should contain a field $x$ of the type $\beta$. This predicate arises from the use of the \emph{dot operator} (\texttt{.}) as discussed in section~\ref{sec:attrSet}. The syntax was chosen to be analogous to that of the Nix term syntax.
527The type $\alpha$ should be an attribute set and it should contain a field $x$ of the type $\beta$. This predicate arises from the use of the \emph{dot operator} (\texttt{.}) as discussed in section~\ref{sec:attrSet}. The syntax was chosen to be analogous to that of the Nix term syntax.
521
528
522−The term \texttt{x: x.y} would field the following type:
529+The term \texttt{x: x.y} would yield the following type:
523
530
524\begin{equation} \label{eq:dotExample}
531\begin{equation} \label{eq:dotExample}
525 \forall \alpha \beta. \; \alpha.\text{y} = \beta \Rightarrow \alpha \rightarrow \beta
532 \forall \alpha \beta. \; \alpha.\text{y} = \beta \Rightarrow \alpha \rightarrow \beta
@@ -533,7 +540,7 @@ The term \texttt{x: x.y} would field the following type:
533
540
534The type $\alpha$ should be an attribute set and if it contains the field $x$, then the type of the field should be $\beta$. This predicate arises from the combination of the \emph{dot operator} (\texttt{.}) and the \emph{or operator} (\texttt{or}) which is used to supply a fallback value if the attribute set does not contain the required field. The syntax was chosen to be analogous to that of the Nix term syntax.
541The type $\alpha$ should be an attribute set and if it contains the field $x$, then the type of the field should be $\beta$. This predicate arises from the combination of the \emph{dot operator} (\texttt{.}) and the \emph{or operator} (\texttt{or}) which is used to supply a fallback value if the attribute set does not contain the required field. The syntax was chosen to be analogous to that of the Nix term syntax.
535
542
536−The term \texttt{x: x.y or 1} would field the following type:
543+The term \texttt{x: x.y or 1} would yield the following type:
537
544
538\begin{equation} \label{eq:optFieldPredExample}
545\begin{equation} \label{eq:optFieldPredExample}
539 \forall \alpha. \; \alpha \optDot \text{y} = \text{Number} \Rightarrow \alpha \rightarrow \text{Number}
546 \forall \alpha. \; \alpha \optDot \text{y} = \text{Number} \Rightarrow \alpha \rightarrow \text{Number}
@@ -541,7 +548,7 @@ The term \texttt{x: x.y or 1} would field the following type:
541
548
542This predicate also arises from the use of the \emph{attribute set field presence check operator} (\texttt{?}). In that case the
549This predicate also arises from the use of the \emph{attribute set field presence check operator} (\texttt{?}). In that case the
543
550
544−The term \texttt{x: x ? y} would field the following type:
551+The term \texttt{x: x ? y} would yield the following type:
545
552
546\begin{equation} \label{eq:optFieldPredExample2}
553\begin{equation} \label{eq:optFieldPredExample2}
547 \forall \alpha \beta. \; \alpha \optDot \text{y} = \beta \Rightarrow \alpha \rightarrow \text{Bool}
554 \forall \alpha \beta. \; \alpha \optDot \text{y} = \beta \Rightarrow \alpha \rightarrow \text{Bool}
@@ -553,15 +560,15 @@ The term \texttt{x: x ? y} would field the following type:
553 \alpha \update \beta \sim \gamma
560 \alpha \update \beta \sim \gamma
554\end{equation}
561\end{equation}
555
562
556−All $\alpha$, $\beta$ and $\gamma$ should be \emph{attribute sets}. The \emph{attribute set} $\gamma$ should contain all fields from both $\alpha$ and $\beta$, preferring the types from $\beta$ if they happen to overlap. That is, if $\alpha$ and $\beta$ both contain a field with the same name, then $\gamma$ should contain the same field with the type from $\beta$. This behaviour matches the way the \emph{update operator} (\texttt{//}) works as discussed in section~\ref{sec:update}.
563+All $\alpha$, $\beta$ and $\gamma$ should be \emph{attribute sets}. The \emph{attribute set} $\gamma$ should contain all fields from both $\alpha$ and $\beta$, preferring the types from $\beta$ if they happen to overlap. That is, if $\alpha$ and $\beta$ both contain a field with the same name, then $\gamma$ should contain the same field with the type from $\beta$. This behavior matches the way the \emph{update operator} (\texttt{//}) works as discussed in section~\ref{sec:update}.
557
564
558−The term \texttt{x: y: x // y} would field the following type:
565+The term \texttt{x: y: x // y} would yield the following type:
559
566
560\begin{equation} \label{eq:updatePredExample}
567\begin{equation} \label{eq:updatePredExample}
561 \forall \alpha \beta \gamma. \; \alpha \update \beta \sim \gamma \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma
568 \forall \alpha \beta \gamma. \; \alpha \update \beta \sim \gamma \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma
562\end{equation}
569\end{equation}
563
570
564−\subsection{Atmoic types}
571+\subsection{Atomic types}
565
572
566Nix 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''.}
573Nix 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''.}
567
574
@@ -611,7 +618,7 @@ For this reason, we will have to define a smaller set of static types that will
611
618
612\subsection{Addition} \label{sec:addition}
619\subsection{Addition} \label{sec:addition}
613
620
614−Among all operators, addition (\texttt{+}) has semantics that stand out from the rest: addition can be applied to wither two \texttt{Number} operands or two \texttt{String} operands. All other operands are monomorphic in that they can only be applied to two operands of a predefined type. In that sense addition in polymorphic.
621+Among all operators, addition (\texttt{+}) has semantics that stand out from the rest: addition can be applied to either two \texttt{Number} operands or two \texttt{String} operands. All other operands are monomorphic in that they can only be applied to two operands of a predefined type. In that sense addition in polymorphic.
615
622
616Since our current implementation does not support sum types (see section~\ref{sec:sumTypes} for more detail), it is non-trivial to encode the type of addition in our current type system. We wanted to encode the type without having to resort to extending the type system too much (without implementing sum types).
623Since our current implementation does not support sum types (see section~\ref{sec:sumTypes} for more detail), it is non-trivial to encode the type of addition in our current type system. We wanted to encode the type without having to resort to extending the type system too much (without implementing sum types).
617
624
@@ -629,7 +636,7 @@ With this predicate the type of the addition operator (\texttt{+}) now becomes:
629
636
630\subsection{Typing rules}
637\subsection{Typing rules}
631
638
632−What follows is a formal description of the developed type system. For brevity we have omitted rules for typing literal constant values described in tables \ref{tab:atomicTypes} and \ref{tbl:staticTypes}, and most operators described in table~\ref{tbl:allOperators} as these rules are trivial.
639+What follows is a formal description of the developed type system. For brevity we have omitted rules for typing literal constant values described in tables \ref{tab:atomicTypes} and \ref{tbl:staticTypes}, and most operators described in table~\ref{tbl:allOperators} as those rules are trivial.
633
640
634\subsubsection{Lists}
641\subsubsection{Lists}
635
642
@@ -665,7 +672,7 @@ Typing rules for both lambda abstraction definitions and application is common a
665
672
666\subsubsection{Addition}
673\subsubsection{Addition}
667
674
668−The rational for having a special case for the addition operator is layed out in section~\ref{sec:addition}:
675+The rationale for having a special case for the addition operator is layed out in section~\ref{sec:addition}:
669
676
670\begin{equation}
677\begin{equation}
671 \trfrac
678 \trfrac
@@ -689,7 +696,7 @@ Just like in many functional type systems, our type system will support let-gene
689
696
690A simple version of rule is as follows:
697A simple version of rule is as follows:
691
698
692−\begin{equation}
699+\begin{equation} \label{eq:letGeneralization}
693 \trfrac
700 \trfrac
694 {\Gamma \vdash e_1 : \tau_1 \qquad \Gamma, (\text{x}: \forall \{\text{ftv}(\tau_1) - \text{ftv}(\Gamma)\}. \; \tau_1) \vdash e_2 : \tau_2}
701 {\Gamma \vdash e_1 : \tau_1 \qquad \Gamma, (\text{x}: \forall \{\text{ftv}(\tau_1) - \text{ftv}(\Gamma)\}. \; \tau_1) \vdash e_2 : \tau_2}
695 {\Gamma \vdash (\text{let} \; \text{x = } e_1; \; \text{in} \; e_2) : \tau_2}
702 {\Gamma \vdash (\text{let} \; \text{x = } e_1; \; \text{in} \; e_2) : \tau_2}
@@ -763,8 +770,8 @@ With that we can define how those predicate are actually satisfied:
763
770
764\begin{equation}
771\begin{equation}
765 \trfrac
772 \trfrac
766− {\Gamma \vdash e.\text{x} = \tau}
773+ {\Gamma \vdash \tau_1.\text{x} = \tau_2}
767− {\Gamma \vdash (e \optDot \text{x}) = \tau}
774+ {\Gamma \vdash (\tau_1 \optDot \text{x}) = \tau_2}
768\end{equation}
775\end{equation}
769
776
770where $(\text{x} = \tau) \in \xi$ denotes the presence of the \emph{row} $(\text{x} = \tau)$ in the \emph{set} $\xi$, and $\text{x} \notin \xi$ denotes the absence of a \emph{row} with the key `x' in the \emph{set} $\xi$.
777where $(\text{x} = \tau) \in \xi$ denotes the presence of the \emph{row} $(\text{x} = \tau)$ in the \emph{set} $\xi$, and $\text{x} \notin \xi$ denotes the absence of a \emph{row} with the key `x' in the \emph{set} $\xi$.
@@ -777,7 +784,7 @@ The definition of the ``update'' predicate uses standard set comprehension notat
777 {\Pi \xi_1 \update \Pi \xi_2 \sim \Pi (\xi_2 \cup \{a = \tau || (a = \tau) \leftarrow \xi_1, a \notin \xi_2\})}
784 {\Pi \xi_1 \update \Pi \xi_2 \sim \Pi (\xi_2 \cup \{a = \tau || (a = \tau) \leftarrow \xi_1, a \notin \xi_2\})}
778\end{equation}
785\end{equation}
779
786
780−\subsubsection{with expressions}
787+\subsubsection{with expressions} \label{sec:withExprType}
781
788
782\emph{with expressions} discussed in section~\ref{sec:withExp} are not difficult to define a typing rule for:
789\emph{with expressions} discussed in section~\ref{sec:withExp} are not difficult to define a typing rule for:
783
790
@@ -789,7 +796,7 @@ The definition of the ``update'' predicate uses standard set comprehension notat
789
796
790\emph{with expressions} do, however, pose a particularly hard problem when implementing the type system – we can't always statically know the fields in $e_1$ -- it can be passed in as a function argument. This means that the typing environment of a function can depend on its argument. Implementing this in a wholistic manner would require our type system support a form of dependent types. That is not a direction we want to pursue -- introducing dependent types would greatly complicate the type system to a point where automated type inference would not practical and the type system would be a lot harder to work with.
797\emph{with expressions} do, however, pose a particularly hard problem when implementing the type system – we can't always statically know the fields in $e_1$ -- it can be passed in as a function argument. This means that the typing environment of a function can depend on its argument. Implementing this in a wholistic manner would require our type system support a form of dependent types. That is not a direction we want to pursue -- introducing dependent types would greatly complicate the type system to a point where automated type inference would not practical and the type system would be a lot harder to work with.
791
798
792−Instead, we opted to define a heuristic which in our testing was proven to cover most practical cases: when encountering a variable in the body of a with expression:
799+Instead, we opted to define a heuristic which in our testing was proven to cover most practical cases: when encountering a variable in the body of a \emph{with expression}:
793
800
794\begin{enumerate}
801\begin{enumerate}
795 \item if a variable was defined in the body of the with expression and is in scope, return that type
802 \item if a variable was defined in the body of the with expression and is in scope, return that type
@@ -800,7 +807,325 @@ Instead, we opted to define a heuristic which in our testing was proven to cover
800
807
801\section{Implementation} \label{sec:implementation}
808\section{Implementation} \label{sec:implementation}
802
809
803−\cite{github-source}
810+In this section we will explore the techniques employed in our implementation~\cite{github-source} of our type system. It is implemented in the \emph{Haskell}\footnote{\url{https://www.haskell.org}} programming language.
811+
812+% \subsubsection{Effects}
813+
814+% Our implementation uses the \emph{freer-simple}\footnote{\url{https://github.com/lexi-lambda/freer-simple}} library as the effects system.
815+
816+% The
817+
818+% \begin{code}
819+% type InferEffs =
820+% !! [ Fresh,
821+% Reader SrcSpan,
822+% Writer (SrcSpan, Errors),
823+% Writer PredicateError,
824+% Writer Pred,
825+% State (MKM.Map Pred),
826+% VariableMapEff,
827+% Writer UnifyingError,
828+% Writer InferError,
829+% State Substitution,
830+% TreeTracer
831+% ]
832+% \end{code}
833+
834+\subsection{Effect system}
835+
836+\subsubsection{Monad transformers}
837+
838+Developing a typechecker requires working with a large amount of non-trivial algorithms which influence each other in complex ways. A widespread way of dealing with such situations is introducing a common computational environment through which different parts of the program can interact (instead of ``manually'' passing state around). A well-established way of handling state in purely functional programming languages is the \emph{Monad} abstraction~\cite{moggi1988computational}.
839+
840+It is natural to want to abstract the underlying monad – explicitly declare what features a function actually needs the monad to have. Furthermore, it is desireable to decompose the features of the a monad not only in function definitions, but also at the call site – it is desireable to be able to conjure up monads with desireable traits in an ad-hoc manner. This has been achieved a while ago with \emph{monad transformers}~\cite{liang1995monad}.
841+
842+A drawback of monad transformers is their somewhat rigid nature – every behavior a monad needs to have needs to be defined as a distinct transformer with appropriate instances. The instances need to not only implement the desired behavior, but also explicitly ``pass through'' \emph{all} other effects that it might be used in combination with. This means that adding extra behavior leads to a large amount of boilerplate. Furthermore, monads themselves (monad transformers) are not in general composable, leading to a whole other set of problems. In addition, it is cumbersome to locally change parts of the underlying implementation of a monad dynamically – it might be useful to tweak some behavior in only a part of an algorithm, leaving the rest to the abstract implementation; monad transformers don't really have such capabilities.
843+
844+\subsubsection{Free monad extensible effects}
845+
846+Recently a new approach to effect systems has been getting more attention – \emph{free monads algebraic effects}~\cite{kiselyov2015freer, ploeg2014reflection, kiselyov2013extensible}. This approach solves the problems with monad transformers mentioned above. Rather than being transformers, effects are described as \emph{functors}. The composability problem is resolved due to functors being in general composable. Contrary to how monad transformers operate, effects (or their carriers) in \emph{free monads algebraic effects} (we will from now on refer to them as just \emph{algebraic effects}) don't have any particular interpretation of the effect associated with them. Effects are interpreted in an ad-hoc manner at the call site. Furthermore, this allows us to dynamically modify the behavior of effects without changing the types or implementations of functions we wish to change the behavior of.
847+% How we use \emph{algebraic effects} will be discussed in more detail in section~\ref{sec:implementation}.
848+
849+\subsection{Substitutions}
850+
851+\subsubsection{Substitutions in other implementations}
852+
853+In most typechecker implementations a substitution is a mapping from \emph{type variables} to \emph{types}. These substitutions are usually generated during the unification of type constraints and are, in general, applied to types as soon as they are available.
854+
855+The notion of substitution composition is usually taken to mean a binary operation which produces a new substitution that when applied (|sub|) to a type would produce the same result as sequentially applying the two source substitutions:
856+
857+\begin{code}
858+sub (s1 . s2) = sub s1 . sub s2
859+\end{code}
860+
861+\subsubsection{Substitutions in our implementation}
862+
863+In our implementation the application of substitutions is delayed as much as possible. They are applied in exactly two cases:
864+
865+\begin{enumerate}
866+ \item Right before unifying a constraint
867+ \item Right before closing over a type
868+\end{enumerate}
869+
870+This choice has several implications. Firstly, we can never have conflicting ``keys'' in substitutions (which is not the case in other implementations). Using this information we can define stronger substitution composition:
871+
872+\begin{code}
873+newtype Substitution = Substitution
874+ {unSubstitution :: Map TypeVariable NType}
875+
876+instance Semigroup Substitution where
877+ a'@(Substitution a) <> b'@(Substitution b) =
878+ Substitution $ M.unionWith undefined
879+ (fmap (sub b') a)
880+ (fmap (sub a') b)
881+\end{code}
882+
883+
884+This means that the order of composition does no longer matter, and applying the composition of substitutions yields more information than applying them sequentially.
885+
886+Another consequence of the decision to delay substitutions is that now the role of the |infer| step of typechecking only does the following three things:
887+
888+\begin{enumerate}
889+ \item returns a type variable that represents the type of the expression being inferred
890+ \item emits constraints generated during inferring
891+ \item emits predicates generated during inferring
892+\end{enumerate}
893+
894+\subsection{Typing context}
895+
896+The typing context in our implementation, in essence, consists of two distinct data structures:
897+
898+\begin{enumerate}
899+ \item the types of variables currently in scope
900+ \item the predicates which are applicable to those types
901+\end{enumerate}
902+
903+\subsubsection{Variables in scope}
904+
905+Note that in practice, the ``variables in scope'' data structure only needs to contain type variables since we apply substitutions as late as possible.
906+
907+In actual fact, due to the heuristics described in section~\ref{sec:withExprType}, the types of variables in scope can not be represented as a static data structure but rather is implemented as a scoped effect\footnote{Effects in our case are implemented using the \emph{freer-simple} library: \url{https://github.com/lexi-lambda/freer-simple}}:
908+
909+\begin{code}
910+data VariableMapEff x where
911+ LookupVariable
912+ :: VarName
913+ -> VariableMapEff (Maybe Scheme)
914+
915+lookupVar
916+ :: Member VariableMapEff eff
917+ => VarName -> Eff eff (Maybe Scheme)
918+lookupVar = send . LookupVariable
919+\end{code}
920+
921+This allows us to dynamically redefine what it means to look up a variable in terms of its implementation in the outer context.
922+
923+\subsubsection{Predicates}
924+
925+Predicates can, on the other hand, be stored as a static data structure. The only non-standard behavior is that the set of predicates needs to be queried and manipulated based on the types that they contain rather than on the predicates themselves.
926+
927+For this reason, we have developed a data structure we call ``multi-keyed map''.
928+
929+\begin{code}
930+class (Ord (Key t), Ord t) => Keyable t where
931+ type Key t :: Type
932+ getKeys :: t -> [Key t]
933+
934+data MultiKeyedMap t = MultiKeyedMap
935+ (M.Map (Key t) (S.Set t)) (S.Set t)
936+\end{code}
937+
938+The data structure is the product of two other data structures:
939+
940+\begin{enumerate}
941+ \item A map, mapping possible keys of the stored |t| to a set of values that contain the given key
942+ \item A set that contains the values that don't contain any keys
943+\end{enumerate}
944+
945+The |Keyable| typeclass is used to extract the keys from the values that need to be stored.
946+
947+The union of two maps is defined trivially -- by taking the union of the inner structures:
948+
949+\begin{code}
950+instance (Ord (Key t), Ord t)
951+ => Semigroup (MultiKeyedMap t) where
952+ (MultiKeyedMap x x') <> (MultiKeyedMap y y') =
953+ MultiKeyedMap
954+ (M.unionWith S.union x y) (x' <> y')
955+\end{code}
956+
957+Creating a singleton map from a single values is defined like so:
958+
959+\begin{code}
960+singleton :: Keyable t => t -> MultiKeyedMap t
961+singleton t = case getKeys t of
962+ [] -> MultiKeyedMap M.empty (S.singleton t)
963+ ks@(_ : _) -> MultiKeyedMap
964+ (M.fromList $ fmap (,s) ks) S.empty
965+ where
966+ s = S.singleton t
967+\end{code}
968+
969+With these operations defining the |insert| operation becomes trivial:
970+
971+\begin{code}
972+insert
973+ :: Keyable t
974+ => t -> MultiKeyedMap t -> MultiKeyedMap t
975+insert t m = m <> singleton t
976+\end{code}
977+
978+Now we come to the lookup operation. Note that the algorithmic complexity of querying the predicates by a type they contain is now the cost of an ordinary map lookup -- $O(log(n))$ where $n$ is the number of values contained in the map (in our case the number of all types referenced from within the predicates):
979+
980+\begin{code}
981+lookup
982+ :: Keyable t
983+ => Key t -> MultiKeyedMap t -> S.Set t
984+lookup k (MultiKeyedMap m _) =
985+ fromMaybe S.empty $ M.lookup k m
986+\end{code}
987+
988+\subsection{Closing over type variables}
989+
990+An observation we can make is the following: it only makes sense to close over the type variables that were generated during the inference of the type we are closing over. Any other type variables either:
991+
992+\begin{enumerate}
993+ \item are not present in the type
994+ \item are used in an outer lexical scope (environment)
995+\end{enumerate}
996+
997+This greatly simplifies implementing the typing rule~\ref{eq:letGeneralization} since instead of having to calculate a set of free type variables of the whole context, we only need to obtain a predicate that identifies if a type variable was introduced during the inference of an expression. This is made even easier if type variables are internally represented as integers, as they often are.
998+
999+In our case, this is complicated by the fact that we need to introduce type variables which are fields of an \emph{attribute set} from an outer lexical scope. This is problematic because while the type variable can be defined during inference, it is actually logically defined at the same position as the initial \emph{attribute set}; it has the same lexical scope as the \emph{attribute set}. So, the lexical scope of a type variable can not be derived from the inference context of an expression.
1000+
1001+A solution we came up with is to have two ways a type variable can be constructed -- as an ordinary type variable backed by a single integer or as a sub-type variable that has the same lexical scope as another type variable:
1002+
1003+\begin{code}
1004+data TypeVariable
1005+ = TypeVariable Int
1006+ | SubTypeVariable Int Int
1007+\end{code}
1008+
1009+This way, when applying a predicate to check the lexical scope of a type variable, we can always restrict ourselves to the first integer.
1010+
1011+\section{Evaluation of our implementation}
1012+
1013+In this section, we will examine how our implementation of the typechecker behaves on real input.
1014+
1015+\subsection{Evaluating nixpkgs}
1016+
1017+To evaluate our typechecker implementation~\cite{github-source}, we collected \emph{Nix} source files from the largest \emph{Nix} package repository – \emph{nixpkgs}\footnote{\url{https://github.com/NixOS/nixpkgs}}. Due to our current implementation not supporting file imports (file imports are the responsibility of the system calling the typechecker, not the type checker itself), the files were filtered down to those that do not contain import statements.
1018+
1019+Running our typechecker on the test set of \emph{Nix} source files results in \emph{1963} out of \emph{2948} (67\%) typechecking with no type errors.
1020+
1021+We believe this is a very good result since the files were not prepared in any way and were taken as-is from the package repository. Furthermore, it is important to note that rejecting a portion of ``valid'' programs is an unavoidable property of static typecheckers.
1022+
1023+We would also like to point out that even in those cases when type errors were encountered during typechecking, the typechecker still produces output types that can be useful to the developer and can be used for further typechecking of larger expressions (though providing fewer guarantees).
1024+
1025+\subsection{Evaluating common expressions}
1026+
1027+We will now examine a few language constructs to see how our typechecker handles them and what errors it can detect.
1028+
1029+\subsubsection{Script interpreters}
1030+
1031+In listing~\ref{lst:interpreters} we present a sample script that demonstrates our type inference algorithm.
1032+
1033+The function \texttt{getScriptInterpreters} takes a single ``package'' structure and returns a list of interpreters used in the scripts of the package. Out type inference algorithm correctly infers the following type of the function:
1034+
1035+\begin{equation}
1036+ \forall \alpha \beta \gamma. \; (\alpha. \text{scripts} = [\beta], \beta. \text{interpreter} = \gamma) \Rightarrow \alpha \rightarrow [\gamma]
1037+\end{equation}
1038+
1039+The constant \texttt{package} contains a sample ``package'' structure with three scripts. In real code, the structure would be a lot more complex, but it is simplified for brevity.
1040+
1041+The result of the whole expression (applying \texttt{getScriptInterpreters} to \texttt{package}) is correctly inferred by our type checker to have the type:
1042+
1043+\begin{equation}
1044+ [\text{String}]
1045+\end{equation}
1046+
1047+\begin{figure}
1048+ \begin{minipage}{\textwidth}
1049+ \begin{verbatim}
1050+let getScriptInterpreters = x:
1051+ builtins.map
1052+ (y: y.interpreter)
1053+ x.scripts;
1054+ package = {
1055+ scripts = [
1056+ {interpreter = "bash";}
1057+ {interpreter = "zsh";}
1058+ {interpreter = "fish";}
1059+ ];
1060+ };
1061+in getScriptInterpreters package
1062+\end{verbatim}
1063+ \end{minipage}
1064+ \caption{A sample nix program which gathers all interpreters used by a script in a package.}
1065+ \label{lst:interpreters}
1066+\end{figure}
1067+
1068+If a programmer makes a certain class of mistakes when developing the program, our typechecker would report an error. For example, the programmer might forget to access the ``scripts'' field of the package and pass the whole package by accident:
1069+
1070+\begin{verbatim}
1071+getScriptInterpreters =
1072+ x: builtins.map (y: y.interpreter) x;
1073+\end{verbatim}
1074+
1075+In that case, when evaluating the whole expression from listing~\ref{lst:interpreters}, he would receive the following error from the typechecker: ``could not match list with type \texttt{\{scripts = [{interpreter = String;}]\}}''. This error is a result of trying to \texttt{map} over an attribute set.
1076+
1077+\subsubsection{Haskell packages}
1078+
1079+In listing~\ref{lst:haskellPackages}, we defined a function \texttt{haskellPackage} that takes parameters for a Haskell package and returns a configuration that might describe how to build the package. Out tool correctly infers the type of the function:
1080+
1081+\begin{equation}
1082+ \begin{aligned}
1083+ \forall \alpha \beta. \; &
1084+ \\ ( & \alpha \optDot \text{compilerFlags} = [\text{String}],
1085+ \\ & \alpha \optDot \text{compilerVersion} = \text{String},
1086+ \\ & \alpha.\text{src} = \beta)
1087+ \\ \Rightarrow & \alpha
1088+ \\ \rightarrow & \{ \text{compiler} = \text{String};
1089+ \\ & \text{compilerFlags} = [\text{String}];
1090+ \\ & \text{src} = \beta; \}
1091+ \end{aligned}
1092+\end{equation}
1093+
1094+By the derived type of the function, we can clearly see that the \texttt{compilerFlags} and \texttt{compilerVersion} fields of the input attribute set are optional.
1095+
1096+The result of the whole expression is a list of applications of the \texttt{haskellPackage} function to multiple configurations. Ou implementation correctly infers the following type:
1097+
1098+\begin{equation}
1099+ [{\text{compiler} = \text{String}; \text{compilerFlags} = [\text{String}]; \text{src} = \text{String};}]
1100+\end{equation}
1101+
1102+\begin{figure}
1103+ \begin{minipage}{\textwidth}
1104+ \begin{verbatim}
1105+let haskellPackage = x: {
1106+ compiler = "ghc" + (x.compilerVersion or "900");
1107+ inherit (x) src;
1108+ compilerFlags = x.compilerFlags or ["-O3" "-j"];
1109+};
1110+in [
1111+ (haskellPackage {
1112+ src = ./project-m36;
1113+ compilerVersion = "865";
1114+ })
1115+ (haskellPackage {
1116+ src = ./pandoc;
1117+ compilerFlags = ["-static"];
1118+ })
1119+]
1120+ \end{verbatim}
1121+ \end{minipage}
1122+ \caption{A sample nix program which defined several haskell packages..}
1123+ \label{lst:haskellPackages}
1124+\end{figure}
1125+
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.
1127+
1128+Another 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.
804
1129
805\section{Possible improvements}
1130\section{Possible improvements}
806
1131
@@ -814,50 +1139,71 @@ The technique is based on the fact that a type variable by itself can only conve
814
1139
815\begin{enumerate}
1140\begin{enumerate}
816 \item positional information -- a specific position in a type
1141 \item positional information -- a specific position in a type
817− \item identity information -- the type variable is equivalent to other type variable with the same name within the scope where it is declared
1142+ \item identity information -- the type variable is equivalent to other type variables with the same name within the scope where it is declared
818\end{enumerate}
1143\end{enumerate}
819
1144
820Note that all of what follows is only concerned with syntactic constructs. It does in no way alter the semantic of the predicates described above.
1145Note that all of what follows is only concerned with syntactic constructs. It does in no way alter the semantic of the predicates described above.
821
1146
822−We would like to point out that all of the predicates have an operand which is the ``result'' of the predicate -- a single type variable which is said to be equivalent to a more complex expression. That is $\beta$ in predicates \ref{eq:fieldPred} and \ref{eq:optFieldPred}, and $\gamma$ in predicate \ref{eq:upatePred}.
1147+We would like to point out that all of the predicates have an operand which is the ``result'' of the predicate -- a single type variable that is said to be equivalent to a more complex expression. That is $\beta$ in predicates \ref{eq:fieldPred} and \ref{eq:optFieldPred}, and $\gamma$ in predicate \ref{eq:upatePred}.
823
1148
824−The observation we need to make is that \emph{referential transparency}\footnote{\url{https://en.wikipedia.org/wiki/Referential_transparency}} is it natural notion in functional programming languages like Nix, and it is natural to replace variables with their definitions. In some sense the ``results'' of predicates described above can be interpreted as being ``defined'' by the predicate to be ``equal'' to the combination of the other operands, and, as such, can be replaced with their definitions.
1149+The observation we need to make is that \emph{referential transparency}\footnote{\url{https://en.wikipedia.org/wiki/Referential_transparency}} is a natural notion in functional programming languages like Nix, and it is natural to replace variables with their definitions. In some sense, the ``results'' of predicates described above can be interpreted as being ``defined'' by the predicate to be ``equal'' to the combination of the other operands and, as such, can be replaced with their definitions.
825
1150
826−This means that we can syntactically replace \emph{type variables} with a portion of a predicate -- replace the variable with the definition. If we apply this technique to the type~\ref{eq:dotExample} we get the following type:
1151+This means that we can syntactically replace \emph{type variables} with a portion of a predicate -- replace the variable with the definition. If we apply this technique to the type~\ref{eq:dotExample}, we get the following type:
827
1152
828\begin{equation}
1153\begin{equation}
829 \forall \alpha. \; \alpha \rightarrow \alpha.\text{y}
1154 \forall \alpha. \; \alpha \rightarrow \alpha.\text{y}
830\end{equation}
1155\end{equation}
831
1156
832−When applied to the type~\ref{eq:updatePredExample} it yields:
1157+When applied to the type~\ref{eq:updatePredExample}, it yields:
833
1158
834\begin{equation}
1159\begin{equation}
835 \forall \alpha \beta. \; \alpha \rightarrow \beta \rightarrow (\alpha \update \beta)
1160 \forall \alpha \beta. \; \alpha \rightarrow \beta \rightarrow (\alpha \update \beta)
836\end{equation}
1161\end{equation}
837
1162
838−We believe the derived type above are a lot easier to understand than their initial counterparts.
1163+We believe the derived types above are a lot easier to understand than their initial counterparts.
839
1164
840\subsubsection{Implementation notes}
1165\subsubsection{Implementation notes}
841
1166
842For practical reasons, when applying the technique, there should be a threshold that limits the syntactic complexity of types that can be ``inlined''. This is due to the types being potentially as big as literals in the source expressions.
1167For practical reasons, when applying the technique, there should be a threshold that limits the syntactic complexity of types that can be ``inlined''. This is due to the types being potentially as big as literals in the source expressions.
843
1168
844−Complexity of types should also be used as a heuristic in cases where there are multiple potential ``definitions'' for the same type variable – it is preferable to use the ``definitions'' with the lowest syntactic complexity as it leads to simpler types.
1169+The complexity of types should also be used as a heuristic in cases where there are multiple potential ``definitions'' for the same type variable – it is preferable to use the ``definitions'' with the lowest syntactic complexity as it leads to simpler types.
845
1170
846\subsubsection{Limitations}
1171\subsubsection{Limitations}
847
1172
848−The technique is not in applicable if the ``result'' of a predicate is not a type variable like in type \ref{eq:optFieldPredExample2}.
1173+The technique is not applicable if the ``result'' of a predicate is not a type variable like in type \ref{eq:optFieldPredExample2}.
849
1174
850Another limitation is that we can not remove predicates if their ``result'' type variable is not present in the head of the type like in type \ref{eq:optFieldPredExample}, since we would be losing typing information by doing so.
1175Another limitation is that we can not remove predicates if their ``result'' type variable is not present in the head of the type like in type \ref{eq:optFieldPredExample}, since we would be losing typing information by doing so.
851
1176
852\subsection{Type hints}
1177\subsection{Type hints}
853
1178
1179+Dynamic types in Nix contain more information than our static type system can convey. A usability improvement to provide more utility to the programmer might be to allow extra information to be tagged onto type information and propagated during type inference. This information would not influence the typechecking algorithm in any way. It would only provide utility to the person reading the resulting types or to external tools.
1180+
1181+Some information that might be useful as type hints:
1182+
1183+\begin{enumerate}
1184+ \item The dynamic type of strings (URI, Path, etc.) – useful information for the programmer
1185+ \item Programmer-supplied annotations. When writing nix expressions, it is common practice to have a program in some other programming language embedded in Nix as a string literal. It would be useful to propagate information about the underlying programming language to aid IDEs -- they could enable special syntax highlighting and linting based on the programming language.
1186+\end{enumerate}
1187+
854\subsection{Sum types} \label{sec:sumTypes}
1188\subsection{Sum types} \label{sec:sumTypes}
855
1189
856−\section{Conclusion}
1190+In our static type system, we introduced a ``special case'' for the \emph{addition operator} as it could be applied to a number of different types.
1191+
1192+The idea of this improvement is to generalize the case and allow the type system to handle arbitrary sums of arbitrary types. This can be implemented as a predicate stating that a type variable can be a certain type:
1193+
1194+\begin{equation}
1195+ \alpha \lessdot \beta
1196+\end{equation}
1197+
1198+where $\beta$ can be the type $\alpha$. With this predicate, our ``String or Number'' predicate can be expressed like so:
1199+
1200+\begin{equation}
1201+ \strOrNum \sim \alpha = (\text{String} \lessdot \alpha, \text{Number} \lessdot \alpha)
1202+\end{equation}
857
1203
858−Nix is a rapidly growing ecosystem. At the time of writing, nixpkgs, the Nix package registry, contains over 60000 packages\footnote{\url{https://github.com/NixOS/nixpkgs}} that can be either installed or used as dependencies in other projects. There is much interest in the approach used by Nix, and making the ever-growing codebase of configurations easier to manage and extend would be a welcome development.
1204+\section*{Conclusion}
859
1205
860−Even though the developed type checker will need to check code for an existing dynamic language, and no type checker can cover all of the valid cases, producing false negatives, covering most of the cases encountered in practice would be useful enough to be worth using. Furthermore, plenty of research has already been conducted on which the Nix Expression Language type checker can be based.
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 codebase. We have also outlined further practical improvements to our implementation, which could improve the developer experience.
861
1207
862\newpage
1208\newpage
863
1209
docs/pres_2/img/ter.png

Binary file not shown.

docs/pres_2/pres.md+52−52
@@ -20,8 +20,9 @@ _Supervisor:_ Victor Kuliamin, Associate Professor, PhD
20
20
21---
21---
22
22
23−> Nix is a powerful package manager that makes package management reliable and reproducible.
23+## Nix is a powerful package manager that makes package management reliable and reproducible.
24+
24−-- [nixos.org](https://nixos.org)
25+#### – [nixos.org](https://nixos.org)
25
26
26---
27---
27
28
@@ -65,10 +66,12 @@ in derivation {
65
66
66---
67---
67
68
68−[.text: text-scale(0.75)]
69+[.text: text-scale(0.55)]
69
70
70# Terms and definitions
71# Terms and definitions
71
72
73+**Type** – an attribute of data which tells the compiler or interpreter how the programmer intends to use the data
74+
72**Type system** – a logical system comprising a set of rules that assigns a property called a type to the various constructs of a computer program
75**Type system** – a logical system comprising a set of rules that assigns a property called a type to the various constructs of a computer program
73
76
74**Type checking** – the process of verifying and enforcing the constraints of types.
77**Type checking** – the process of verifying and enforcing the constraints of types.
@@ -102,14 +105,14 @@ Adding static typing would:
102- Increase reliability of code
105- Increase reliability of code
103- Lower costs of development (resolving issue earlier is cheaper)
106- Lower costs of development (resolving issue earlier is cheaper)
104
107
105−_The typechecker should help find issues in existing code_
108+<!-- _The typechecker should help find issues in existing code_ -->
106
109
107---
110---
108
111
109# The goal
112# The goal
110
113
111−1. Develop a type static system for the existing Nix expression language
114+1. Develop a static type system for the existing Nix expression language
112−2. Develop a type checker for this type system
115+2. Develop a type checker for this static type system
113
116
114---
117---
115
118
@@ -129,31 +132,48 @@ The Hindley–Milner type system_[1]_ is a simple, but well-studied type system
129
132
130---
133---
131
134
132−# Functional requirements
135+# Methods and algorithms
133
136
134−- The system should perform type checking on expression.
137+The developed type system is heavily influenced by the Hindley–Milner_[1]_ type system.
135
138
136−- The system should analyze the types and presence of attributes in attribute sets.
137
139
138−- The system should report encountered typechecking.
140+---
139
141
140−- The system should report the use of undefined terms.
142+# Methods and algorithms
141
143
142−- The system should report the resulting types of expressions to the user.
144+The developed type system supports parametric polymorphism to support code that does not require a specific type.
143
145
144−---
146+```nix
147+x: y: x ++ y
148+```
145
149
146−[.text: text-scale(0.85)]
150+```
151+∀ α. [α] -> [α] -> [α]
152+```
153+
154+---
147
155
148# Methods and algorithms
156# Methods and algorithms
149
157
150−The type system will be heavily influenced by the Hindley–Milner_[1]_ type system.
158+The developed type system implements row polymorphism to work with attribute sets.
159+
160+```nix
161+x: x.v + 69
162+```
163+
164+```
165+∀ α. (α.v = Number) => α -> Number
166+```
151
167
152−The type system will implement parametric polymorphism to support code that does not require a specific type.
168+<br />
153
169
154−The type system will implement arbitrary-ranked polymorphism_[3]_ with deep instantiation to disambiguate types in existing untyped code.
170+```nix
171+x: x // {v = "hello";}
172+```
155
173
156−The type system will implement row polymorphism to work with attribute sets.
174+```
175+∀ α β. (α // {v = String;} ~ β) => α -> β
176+```
157
177
158---
178---
159
179
@@ -177,49 +197,28 @@ The typechecker is implemented in a two-step architecture:
177
197
178---
198---
179
199
180−# Current results
200+# Results
181
201
182−A typechecker executable that successfully typechecks _most_ of the selected files from _nixpkgs_.
202+- Theoretical
203+ - A static type system for the Nix Expression Language
183
204
184−The typechecker currently has some support for all language constructs.
205+- Practical
185
206
186−![.right .fit](img/ter.png)
207+ - A typechecker executable that successfully typechecks _most_ of the selected files from _nixpkgs_.
187−
188−---
189
208
190−[.build-lists: false]
209+ - The typechecker supports all language constructs.
191
210
192−# Current results
193−
194−## Paper status
195−
196−1. Nix Expression Language (80%)
197−2. Existing typecheckers (100%)
198−3. Existing approaches (100%)
199−4. Architecture (20%)
200−5. Implementation (0%)
201−6. Conclusion (60%)
202−
203−![.right .fit](img/paper.png)
211+![.right .fit](img/ter.png)
204−
205−---
206−
207−# What is left
208−
209−- Better type rendering (predicates)
210−- Subsumption
211−- A lot of minor big fixes in type inference
212−- Add type information about built-in functions
213
212
214---
213---
215
214
216# Potential future developments
215# Potential future developments
217
216
218- Add support for user-supplied type annotations.
217- Add support for user-supplied type annotations.
219− - Fork parser
220− - Bidirectional type inference_[4]_
221- Type holes
218- Type holes
222- Language Server Integration
219- Language Server Integration
220+- Better type rendering
221+- Sum types
223
222
224---
223---
225
224
@@ -228,9 +227,10 @@ The typechecker currently has some support for all language constructs.
228
227
229# References
228# References
230
229
231−1. Damas L., Milner R. Principal type-schemes for functional programs //Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. – 1982. – С. 207-212.
230+1. L. Damas and R. Milner, “Principal type-schemes for functional pro- grams,” in Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, 1982, pp. 207–212.
232−2. Jones S. P. et al. Practical type inference for arbitrary-rank types //Journal of functional programming. – 2007. – Т. 17. – №. 1. – С. 1-82. MLA
231+2. E. Dolstra and A. Loh, “Nixos: A purely functional linux distribution,” in Proceedings of the 13th ACM SIGPLAN international conference on Functional programming, 2008, pp. 367–378.
233−3. Stuckey P. J., Sulzmann M., Wazny J. Improved inference for checking type annotations //arXiv preprint cs/0507036. – 2005. MLA
232+3. J. G. Morris and J. McKinna, “Abstracting extensible data types: or, rows by any other name,” Proceedings of the ACM on Programming Languages, vol. 3, no. POPL, pp. 1–28, 2019.
233+4. D. Leijen, “Extensible records with scoped labels.” Trends in Functional Programming, vol. 6, pp. 179–194, 2005.
234
234
235---
235---
236
236
@@ -347,7 +347,7 @@ let f = x: x.a; in f {b = "hello";}
347```
347```
348
348
349```
349```
350−Error: key "a" NotPresent in { b = String; }
350+Error: key "a" not present in { b = String; }
351```
351```
352
352
353---
353---
paper.pdfnew file

Binary file not shown.

src/Tix/Builtins.hsnew file+68
@@ -0,0 +1,68 @@
1+module Tix.Builtins (builtins) where
2+
3+import Data.Map (Map)
4+import qualified Data.Map as M
5+import Data.Text (Text)
6+import Tix.Types
7+
8+builtins :: Map Text Scheme
9+builtins =
10+ M.fromList
11+ [ ( "builtins",
12+ scheme $
13+ NAttrSet $
14+ M.fromList
15+ [ ("abort", scheme $ NAtomic String :-> deBruijn 0 0),
16+ ("add", [StringOrNumber $ deBruijn 2 0] :=> (deBruijn 3 0 :-> (deBruijn 4 0 :-> deBruijn 4 0))),
17+ ("all", [] :=> ((deBruijn 4 0 :-> NAtomic Bool) :-> (List (deBruijn 5 0) :-> NAtomic Bool))),
18+ ("any", [] :=> ((deBruijn 4 0 :-> NAtomic Bool) :-> (List (deBruijn 5 0) :-> NAtomic Bool))),
19+ ("attrNames", [] :=> (deBruijn 3 0 :-> List (NAtomic String))),
20+ ("attrValues", [] :=> (deBruijn 3 0 :-> List (deBruijn 0 0))),
21+ ("baseNameOf", [] :=> (NAtomic String :-> NAtomic String)),
22+ ("bitAnd", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
23+ ("bitXor", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
24+ ("bitOr", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
25+ ("ceil", [] :=> (NAtomic Number :-> NAtomic Number)),
26+ ("compareVersions", [] :=> (NAtomic String :-> (NAtomic String :-> NAtomic Number))),
27+ ("concatLists", [] :=> (List (List (deBruijn 5 0)) :-> List (deBruijn 4 0))),
28+ ("concatMap", [] :=> ((deBruijn 4 0 :-> List (deBruijn 5 1)) :-> (List (deBruijn 5 0) :-> List (deBruijn 5 1)))),
29+ ("map", [] :=> ((deBruijn 4 0 :-> deBruijn 4 1) :-> (List (deBruijn 5 0) :-> List (deBruijn 5 1)))),
30+ ("catAttrs", [] :=> (NAtomic String :-> (List (deBruijn 0 0) :-> List (deBruijn 0 0))))
31+ ]
32+ ),
33+ ( "derivation",
34+ [ deBruijn 2 0
35+ // attrSet
36+ [ ("all", scheme $ List (deBruijn 5 1)),
37+ ("drvAttrs", scheme $ deBruijn 4 0),
38+ ("drvPath", string),
39+ ("out", scheme $ deBruijn 4 1),
40+ ("outPath", string),
41+ ("outputName", string),
42+ ("type", string)
43+ ]
44+ $ deBruijn 2 1,
45+ deBruijn 2 0 .! ("name", string),
46+ deBruijn 2 0 .! ("builder", string),
47+ deBruijn 2 0 .! ("system", string),
48+ deBruijn 2 0 .? ("args", scheme $ List (NAtomic String)),
49+ deBruijn 2 0 .? ("outputs", scheme $ List (NAtomic String))
50+ ]
51+ :=> (deBruijn 3 0 :-> deBruijn 3 1)
52+ )
53+ ]
54+
55+string :: Scheme
56+string = scheme $ NAtomic String
57+
58+deBruijn :: Int -> Int -> NType
59+deBruijn a b = NBruijn $ DeBruijn a b
60+
61+attrSet :: [(Text, Scheme)] -> NType
62+attrSet = NAttrSet . M.fromList
63+
64+(.!) :: NType -> (Text, Scheme) -> Pred
65+(.!) = HasField RequiredField
66+
67+(.?) :: NType -> (Text, Scheme) -> Pred
68+(.?) = HasField OptionalField
src/Tix/Typechecker.hs+4−2
@@ -52,6 +52,7 @@ import Data.Traversable
52import Nix.Atoms
52import Nix.Atoms
53import Nix.Expr
53import Nix.Expr
54import Nix.Pretty
54import Nix.Pretty
55+import Tix.Builtins (builtins)
55import Tix.Types
56import Tix.Types
56import Prelude as P
57import Prelude as P
57
58
@@ -63,6 +64,7 @@ getType r =
63 . evalState @(MKM.Map Pred) mempty
64 . evalState @(MKM.Map Pred) mempty
64 . interpret @(Writer Pred) (\(Tell x) -> modify (<> MKM.singleton x))
65 . interpret @(Writer Pred) (\(Tell x) -> modify (<> MKM.singleton x))
65 . runVariableMapEff
66 . runVariableMapEff
67+ . localVariablesMap builtins
66 . evalState @Substitution mempty
68 . evalState @Substitution mempty
67 . runState @[(TypeVariable, SrcSpan)] []
69 . runState @[(TypeVariable, SrcSpan)] []
68 . interpret @(Writer (TypeVariable, SrcSpan)) (\(Tell x) -> modify (x :))
70 . interpret @(Writer (TypeVariable, SrcSpan)) (\(Tell x) -> modify (x :))
@@ -185,7 +187,7 @@ prettySubstitution :: Substitution -> A.Value
185prettySubstitution = A.toJSON . M.mapKeysMonotonic (TL.pack . show) . fmap renderPretty . unSubstitution
187prettySubstitution = A.toJSON . M.mapKeysMonotonic (TL.pack . show) . fmap renderPretty . unSubstitution
186
188
187instance Semigroup Substitution where
189instance Semigroup Substitution where
188− x'@(Substitution x) <> y'@(Substitution y) = Substitution (M.unionWithKey (error "invariant") (fmap (sub y') x) (fmap (sub x') y))
190+ x'@(Substitution x) <> y'@(Substitution y) = Substitution (M.unionWith (error "invariant") (fmap (sub y') x) (fmap (sub x') y))
189
191
190instance Monoid Substitution where
192instance Monoid Substitution where
191 mempty = Substitution mempty
193 mempty = Substitution mempty
@@ -377,7 +379,7 @@ infer (Fix (Compose (Ann src x))) = local (const src) $ case x of
377 xs' <- traverse infer xs
379 xs' <- traverse infer xs
378 traverse_ tell . fmap (uncurry (:~)) $ zip xs' (tail xs')
380 traverse_ tell . fmap (uncurry (:~)) $ zip xs' (tail xs')
379 case xs' of
381 case xs' of
380− [] -> NTypeVariable <$> fresh
382+ [] -> List . NTypeVariable <$> fresh
381 y : _ -> return $ List y
383 y : _ -> return $ List y
382 NUnary NNeg y -> do
384 NUnary NNeg y -> do
383 t <- infer y
385 t <- infer y
src/Tix/Types.hs+1−1
@@ -252,7 +252,7 @@ prettyScheme u@(cs :=> t) = do
252 x' <- prettyNType False x
252 x' <- prettyNType False x
253 y' <- prettyNType False y
253 y' <- prettyNType False y
254 z' <- prettyNType False z
254 z' <- prettyNType False z
255− return $ group $ paren x' <+> "//" <> line <> paren y' <+> "~" <> line <> paren z'
255+ return $ group $ x' <+> "//" <> line <> y' <+> "~" <> line <> z'
256 prettyPred (StringOrNumber x) = do
256 prettyPred (StringOrNumber x) = do
257 x' <- prettyNType False x
257 x' <- prettyNType False x
258 return $ "(String | Number)" <+> "~" <+> x'
258 return $ "(String | Number)" <+> "~" <+> x'
test/golden/importless/0.10.txt+1−1
@@ -14,7 +14,7 @@
14 nativeBuildInputs = [θ];
14 nativeBuildInputs = [θ];
15 pname = String;
15 pname = String;
16 preConfigure = String;
16 preConfigure = String;
17− pythonPath = ∀ α. α;
17+ pythonPath = ∀ α. [α];
18 src = ι;
18 src = ι;
19 version = String;
19 version = String;
20 } ->
20 } ->
test/golden/importless/0.2.txt+1−1
@@ -42,7 +42,7 @@
42 gst_all_1 = μ;
42 gst_all_1 = μ;
43 libjack2 = ε;
43 libjack2 = ε;
44 libva = ε;
44 libva = ε;
45− makeFontsConf = {fontDirectories = ∀ α. α;} -> δ;
45+ makeFontsConf = {fontDirectories = ∀ α. [α];} -> δ;
46 meson = ι;
46 meson = ι;
47 ninja = ι;
47 ninja = ι;
48 pkgconfig = ι;
48 pkgconfig = ι;
test/golden/importless/0.3.3.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({patches = [String]; sha256 = String; version = String;}) ~ (β),
2+( α // {patches = [String]; sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/0.5.1.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ.
1∀ α β γ δ.
2−( (α) // ({prePatch = String; src = β; version = String;}) ~ (γ),
2+( α // {prePatch = String; src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β
4 α.fetchurl = {sha256 = String; url = String;} -> β
5) =>
5) =>
test/golden/importless/0.8.5.txt+2−2
@@ -1,6 +1,6 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2( α.?meta = β,
2( α.?meta = β,
3− β.?platforms = γ,
3+ β.?platforms = [γ],
4 δ.lib = ε,
4 δ.lib = ε,
5 δ.mkDerivation =
5 δ.mkDerivation =
6 { buildInputs = [α];
6 { buildInputs = [α];
@@ -10,7 +10,7 @@
10 homepage = String;
10 homepage = String;
11 license = ζ;
11 license = ζ;
12 maintainers = [η];
12 maintainers = [η];
13− platforms = γ;
13+ platforms = [γ];
14 };
14 };
15 patches = [θ];
15 patches = [θ];
16 pname = String;
16 pname = String;
test/golden/importless/1-default.txt+1−1
@@ -7,7 +7,7 @@
7 { broken = Bool;
7 { broken = Bool;
8 description = String;
8 description = String;
9 homepage = String;
9 homepage = String;
10− hydraPlatforms = ∀ α. α;
10+ hydraPlatforms = ∀ α. [α];
11 license = [ε];
11 license = [ε];
12 platforms = ζ;
12 platforms = ζ;
13 };
13 };
test/golden/importless/1.0.0.txt+1−1
@@ -8,7 +8,7 @@
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10 license = ε;
10 license = ε;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 platforms = ζ;
12 platforms = ζ;
13 };
13 };
14 nativeBuildInputs = [η];
14 nativeBuildInputs = [η];
test/golden/importless/1.0.txt+2−2
@@ -1,6 +1,6 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2( α.?meta = β,
2( α.?meta = β,
3− β.?platforms = γ,
3+ β.?platforms = [γ],
4 δ.lib = ε,
4 δ.lib = ε,
5 δ.mkDerivation =
5 δ.mkDerivation =
6 { buildInputs = [α];
6 { buildInputs = [α];
@@ -11,7 +11,7 @@
11 homepage = String;
11 homepage = String;
12 license = ζ;
12 license = ζ;
13 maintainers = [η];
13 maintainers = [η];
14− platforms = γ;
14+ platforms = [γ];
15 };
15 };
16 name = String;
16 name = String;
17 preBuild = String;
17 preBuild = String;
test/golden/importless/1.5.txt+2−2
@@ -1,6 +1,6 @@
1∀ α β γ δ ε ζ η θ ι κ λ.
1∀ α β γ δ ε ζ η θ ι κ λ.
2( α.?meta = β,
2( α.?meta = β,
3− β.?platforms = γ,
3+ β.?platforms = [γ],
4 δ.lib = ε,
4 δ.lib = ε,
5 δ.mkDerivation =
5 δ.mkDerivation =
6 { buildInputs = [α];
6 { buildInputs = [α];
@@ -15,7 +15,7 @@
15 homepage = String;
15 homepage = String;
16 license = ζ;
16 license = ζ;
17 maintainers = [η];
17 maintainers = [η];
18− platforms = γ;
18+ platforms = [γ];
19 };
19 };
20 name = String;
20 name = String;
21 src = θ;
21 src = θ;
test/golden/importless/1.55.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ.
1∀ α β γ δ.
2−( (α) // ({patches = [String]; src = β; version = String;}) ~ (γ),
2+( α // {patches = [String]; src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β
4 α.fetchurl = {sha256 = String; url = String;} -> β
5) =>
5) =>
test/golden/importless/1.59.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.stdenv = ε
5 α.stdenv = ε
test/golden/importless/1.60.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.stdenv = ε
5 α.stdenv = ε
test/golden/importless/1.65.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.stdenv = ε
5 α.stdenv = ε
test/golden/importless/1.66.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.stdenv = ε
5 α.stdenv = ε
test/golden/importless/1.67.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η θ ι.
1∀ α β γ δ ε ζ η θ ι.
2−( (α) // ({patches = [β]; src = γ; version = String;}) ~ (δ),
2+( α // {patches = [β]; src = γ; version = String;} ~ δ,
3 α.callPackage = String -> δ -> ε,
3 α.callPackage = String -> δ -> ε,
4 α.fetchpatch = {sha256 = String; stripLen = Number; url = String;} -> β,
4 α.fetchpatch = {sha256 = String; stripLen = Number; url = String;} -> β,
5 α.fetchurl = {sha256 = String; url = String;} -> γ,
5 α.fetchurl = {sha256 = String; url = String;} -> γ,
test/golden/importless/1.68.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchpatch = ε,
4 α.fetchpatch = ε,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
test/golden/importless/1.69.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchpatch = ε,
4 α.fetchpatch = ε,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
test/golden/importless/1.70.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchpatch = ε,
4 α.fetchpatch = ε,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.fetchurl = {sha256 = String; url = String;} -> β,
test/golden/importless/1.71.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchpatch = ε,
4 α.fetchpatch = ε,
5 α.fetchurl = {sha256 = String; urls = [String];} -> β,
5 α.fetchurl = {sha256 = String; urls = [String];} -> β,
test/golden/importless/1.72.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchpatch = ε,
4 α.fetchpatch = ε,
5 α.fetchurl = {sha256 = String; urls = [String];} -> β,
5 α.fetchurl = {sha256 = String; urls = [String];} -> β,
test/golden/importless/12.txt+1−1
@@ -9,7 +9,7 @@
9 description = String;
9 description = String;
10 homepage = String;
10 homepage = String;
11 license = ε;
11 license = ε;
12− maintainers = ∀ α. α;
12+ maintainers = ∀ α. [α];
13 platforms = ζ;
13 platforms = ζ;
14 };
14 };
15 name = String;
15 name = String;
test/golden/importless/1compat.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι.
1∀ β γ δ ε ζ η θ ι.
2−( (β) // ({description = String; priority = Number;}) ~ (γ),
2+( β // {description = String; priority = Number;} ~ γ,
3 δ.mkDerivation = {builder = ε; meta = ∀ α. α; name = String;} -> ζ,
3 δ.mkDerivation = {builder = ε; meta = ∀ α. α; name = String;} -> ζ,
4 η.meta = β,
4 η.meta = β,
5 θ.description = String
5 θ.description = String
test/golden/importless/2.0.0.txt+1−1
@@ -9,7 +9,7 @@
9 { description = String;
9 { description = String;
10 homepage = String;
10 homepage = String;
11 license = ε;
11 license = ε;
12− maintainers = ∀ α. α;
12+ maintainers = ∀ α. [α];
13 platforms = ζ;
13 platforms = ζ;
14 };
14 };
15 nativeBuildInputs = [η];
15 nativeBuildInputs = [η];
test/golden/importless/2.1.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/2.2.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/2.5.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ.
1∀ α β γ δ.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β
4 α.fetchurl = {sha256 = String; url = String;} -> β
5) =>
5) =>
test/golden/importless/2.6.13-pre.txt+1−1
@@ -7,7 +7,7 @@
7 configureFlags = [String];
7 configureFlags = [String];
8 hardeningDisable = [String];
8 hardeningDisable = [String];
9 meta = {description = String; maintainers = [θ]; platforms = ι;};
9 meta = {description = String; maintainers = [θ]; platforms = ι;};
10− patches = ∀ α. α;
10+ patches = ∀ α. [α];
11 pname = String;
11 pname = String;
12 postPatch = String;
12 postPatch = String;
13 sourceRoot = String;
13 sourceRoot = String;
test/golden/importless/2.7-html.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/2.7-pdf-a4.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/2.7-pdf-letter.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/2.7-text.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/2.8.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( ({branch = String; sha256 = String; version = String;}) // (α) ~ (β),
2+( {branch = String; sha256 = String; version = String;} // α ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/2_4.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/3.0.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/3.11.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/3.5.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β; version = String;}) ~ (γ),
2+( α // {src = β; version = String;} ~ γ,
3 α.autoreconfHook = δ,
3 α.autoreconfHook = δ,
4 α.callPackage = String -> γ -> ε,
4 α.callPackage = String -> γ -> ε,
5 α.fetchFromGitHub =
5 α.fetchFromGitHub =
test/golden/importless/3.7-html.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/3.7-pdf-a4.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/3.7-pdf-letter.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/3.7-text.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ ε.
1∀ β γ δ ε.
2( β.mkDerivation =
2( β.mkDerivation =
3 { installPhase = String;
3 { installPhase = String;
4− meta = {maintainers = ∀ α. α;};
4+ meta = {maintainers = ∀ α. [α];};
5 name = String;
5 name = String;
6 src = γ;
6 src = γ;
7 } ->
7 } ->
test/golden/importless/38.txt+1−1
@@ -6,7 +6,7 @@
6 β.mkDerivation =
6 β.mkDerivation =
7 { buildInputs = [ζ];
7 { buildInputs = [ζ];
8 configureFlags = [String];
8 configureFlags = [String];
9− configurePlatforms = ∀ α. α;
9+ configurePlatforms = ∀ α. [α];
10 depsBuildBuild = [η];
10 depsBuildBuild = [η];
11 enableParallelBuilding = Bool;
11 enableParallelBuilding = Bool;
12 meta =
12 meta =
test/golden/importless/3_1.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ.
1∀ α β γ.
2−( (α) // ({sha256 = String; version = String;}) ~ (β),
2+( α // {sha256 = String; version = String;} ~ β,
3 α.callPackage = String -> β -> γ
3 α.callPackage = String -> β -> γ
4) =>
4) =>
5α -> γ
5α -> γ
test/golden/importless/4.13a.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι.
1∀ β γ δ ε ζ η θ ι.
2−( (β) // ({branch = String;}) ~ (γ),
2+( β // {branch = String;} ~ γ,
3 δ.mkDerivation =
3 δ.mkDerivation =
4 { buildInputs = [ε];
4 { buildInputs = [ε];
5 meta = ∀ α. α;
5 meta = ∀ α. α;
test/golden/importless/4.3.2.txt+1−1
@@ -11,7 +11,7 @@
11 homepage = String;
11 homepage = String;
12 license = ε;
12 license = ε;
13 longDescription = String;
13 longDescription = String;
14− maintainers = ∀ α. α;
14+ maintainers = ∀ α. [α];
15 platforms = ζ;
15 platforms = ζ;
16 };
16 };
17 name = String;
17 name = String;
test/golden/importless/422.txt+1−1
@@ -8,7 +8,7 @@
8 homepage = String;
8 homepage = String;
9 license = ζ;
9 license = ζ;
10 longDescription = String;
10 longDescription = String;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 platforms = η;
12 platforms = η;
13 };
13 };
14 name = String;
14 name = String;
test/golden/importless/6.3.txt+1−1
@@ -8,7 +8,7 @@
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10 license = ζ;
10 license = ζ;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 };
12 };
13 nativeBuildInputs = [θ];
13 nativeBuildInputs = [θ];
14 pname = String;
14 pname = String;
test/golden/importless/60.txt+1−1
@@ -5,7 +5,7 @@
5 β.mkDerivation =
5 β.mkDerivation =
6 { buildInputs = [ε];
6 { buildInputs = [ε];
7 configureFlags = [String];
7 configureFlags = [String];
8− configurePlatforms = ∀ α. α;
8+ configurePlatforms = ∀ α. [α];
9 depsBuildBuild = [ζ];
9 depsBuildBuild = [ζ];
10 enableParallelBuilding = Bool;
10 enableParallelBuilding = Bool;
11 meta =
11 meta =
test/golden/importless/68.txt+1−1
@@ -5,7 +5,7 @@
5 β.mkDerivation =
5 β.mkDerivation =
6 { buildInputs = [ε];
6 { buildInputs = [ε];
7 configureFlags = [String];
7 configureFlags = [String];
8− configurePlatforms = ∀ α. α;
8+ configurePlatforms = ∀ α. [α];
9 depsBuildBuild = [ζ];
9 depsBuildBuild = [ζ];
10 enableParallelBuilding = Bool;
10 enableParallelBuilding = Bool;
11 meta =
11 meta =
test/golden/importless/7.6.6.txt+1−1
@@ -15,7 +15,7 @@
15 homepage = String;
15 homepage = String;
16 license = String;
16 license = String;
17 longDescription = String;
17 longDescription = String;
18− maintainers = ∀ α. α;
18+ maintainers = ∀ α. [α];
19 platforms = λ;
19 platforms = λ;
20 };
20 };
21 nativeBuildInputs = [μ];
21 nativeBuildInputs = [μ];
test/golden/importless/78.txt+1−1
@@ -5,7 +5,7 @@
5 β.mkDerivation =
5 β.mkDerivation =
6 { buildInputs = [ε];
6 { buildInputs = [ε];
7 configureFlags = [String];
7 configureFlags = [String];
8− configurePlatforms = ∀ α. α;
8+ configurePlatforms = ∀ α. [α];
9 depsBuildBuild = [ζ];
9 depsBuildBuild = [ζ];
10 enableParallelBuilding = Bool;
10 enableParallelBuilding = Bool;
11 meta =
11 meta =
test/golden/importless/8.5.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε.
1∀ α β γ δ ε.
2−( (α) // ({src = β;}) ~ (γ),
2+( α // {src = β;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.tcl = ε
5 α.tcl = ε
test/golden/importless/8.6.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η θ.
1∀ α β γ δ ε ζ η θ.
2−( (α) // ({patches = [String]; src = β;}) ~ (γ),
2+( α // {patches = [String]; src = β;} ~ γ,
3 α.callPackage = String -> γ -> δ,
3 α.callPackage = String -> γ -> δ,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
4 α.fetchurl = {sha256 = String; url = String;} -> β,
5 α.stdenv = ε,
5 α.stdenv = ε,
test/golden/importless/8_0.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ.
1∀ α β γ.
2−( ( α
2+( α //
3− ) //
4− ( { extraPatches = [String];
3+ { extraPatches = [String];
5− extraPostInstall = String;
4+ extraPostInstall = String;
6− sha256 = String;
5+ sha256 = String;
7− version = String;
6+ version = String;
8− }
7+ } ~
9− ) ~
10− ( β
8+ β,
11− ),
12 α.callPackage = String -> β -> γ
9 α.callPackage = String -> β -> γ
13) =>
10) =>
14α -> γ
11α -> γ
test/golden/importless/9.2.txt+1−1
@@ -8,7 +8,7 @@
8 ldid = ζ;
8 ldid = ζ;
9 meta =
9 meta =
10 { description = String;
10 { description = String;
11− hydraPlatforms = ∀ α. α;
11+ hydraPlatforms = ∀ α. [α];
12 license = η;
12 license = η;
13 maintainers = [θ];
13 maintainers = [θ];
14 platforms = ι;
14 platforms = ι;
test/golden/importless/alexandria.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/aliases.txtdeleted−217
@@ -1,217 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1 ι1 κ1
2−λ1 μ1 ν1 ξ1 ο1 π1 ρ1 σ1 τ1 υ1 φ1 χ1 ψ1 ω1 α2 β2 γ2 δ2 ε2 ζ2 η2 θ2 ι2 κ2 λ2 μ2 ν2
3−ξ2 ο2 π2 ρ2 σ2 τ2 υ2 φ2 χ2 ψ2 ω2 α3 β3 γ3 δ3 ε3 ζ3 η3 θ3 ι3 κ3 λ3 μ3 ν3 ξ3 ο3 π3
4−ρ3 σ3 τ3 υ3 φ3 χ3 ψ3 ω3 α4 β4 γ4 δ4 ε4 ζ4 η4 θ4 ι4 κ4 λ4 μ4 ν4 ξ4 ο4 π4 ρ4 σ4
5−τ4.
6−( ( { BufOnly = α;
7− CSApprox = β;
8− Colour_Sampler_Pack = γ;
9− Cosco = δ;
10− Gist = ε;
11− Gundo = ζ;
12− Hoogle = η;
13− Solarized = θ;
14− Supertab = ι;
15− Syntastic = κ;
16− SyntaxRange = λ;
17− Tabular = μ;
18− Tagbar = ν;
19− The_NERD_Commenter = ξ;
20− The_NERD_tree = ο;
21− UltiSnips = π;
22− WebAPI = ρ;
23− Yankring = σ;
24− airline = τ;
25− alternative = υ;
26− bats = φ;
27− calendar = χ;
28− caw = ψ;
29− coffee-script = ω;
30− coffeeScript = α1;
31− colors-solarized = β1;
32− colorsamplerpack = γ1;
33− command_T = δ1;
34− commentary = ε1;
35− committia = ζ1;
36− concealedyank = η1;
37− context-filetype = θ1;
38− css_color_5056 = ι1;
39− csv = κ1;
40− ctrlp = λ1;
41− cute-python = μ1;
42− denite = ν1;
43− easy-align = ξ1;
44− easygit = ο1;
45− easymotion = π1;
46− echodoc = ρ1;
47− eighties = σ1;
48− extradite = τ1;
49− fugitive = υ1;
50− ghc-mod-vim = φ1;
51− ghcmod = χ1;
52− gitgutter = ψ1;
53− goyo = ω1;
54− gundo = α2;
55− haskellConceal = β2;
56− haskellConcealPlus = γ2;
57− haskellconceal = δ2;
58− hier = ε2;
59− hlint-refactor = ζ2;
60− hoogle = η2;
61− ipython = θ2;
62− latex-live-preview = ι2;
63− maktaba = κ2;
64− multiple-cursors = λ2;
65− necoGhc = μ2;
66− neocomplete = ν2;
67− neoinclude = ξ2;
68− neomru = ο2;
69− neosnippet = π2;
70− open-browser = ρ2;
71− pathogen = σ2;
72− polyglot = τ2;
73− prettyprint = υ2;
74− quickrun = φ2;
75− rainbow_parentheses = χ2;
76− repeat = ψ2;
77− rhubarb = ω2;
78− riv = α3;
79− sensible = β3;
80− signature = γ3;
81− sleuth = δ3;
82− snipmate = ε3;
83− solarized = ζ3;
84− solidity = η3;
85− sourcemap = θ3;
86− sourcemap.vim = ι3;
87− stylish-haskell = κ3;
88− stylishHaskell = λ3;
89− surround = μ3;
90− table-mode = ν3;
91− tabpagebuffer = ξ3;
92− tabpagecd = ο3;
93− taglist = π3;
94− thumbnail = ρ3;
95− tlib = σ3;
96− tmux-navigator = τ3;
97− tmuxNavigator = υ3;
98− tslime = φ3;
99− unite = χ3;
100− vim-addon-vim2nix = ψ3;
101− vimproc = ω3;
102− vimshell = α4;
103− vinegar = β4;
104− watchdogs = γ4;
105− wombat256 = δ4;
106− xterm-color-table = ε4;
107− yankring = ζ4;
108− zeavim = η4;
109− }
110− ) //
111− ( θ4
112− ) ~
113− ( ι4
114− ),
115− κ4.?recurseForDerivations = Bool,
116− λ4.mapAttrs = (μ4 -> κ4 -> κ4) -> ι4 -> ν4,
117− ξ4.BufOnly-vim = α,
118− ξ4.Colour-Sampler-Pack = γ,
119− ξ4.YankRing-vim = σ,
120− ξ4.a-vim = υ,
121− ξ4.bats-vim = φ,
122− ξ4.builtins = ο4,
123− ξ4.calendar-vim = χ,
124− ξ4.caw-vim = ψ,
125− ξ4.command-t = δ1,
126− ξ4.committia-vim = ζ1,
127− ξ4.concealedyank-vim = η1,
128− ξ4.context_filetype-vim = θ1,
129− ξ4.cosco-vim = δ,
130− ξ4.csapprox = β,
131− ξ4.csv-vim = κ1,
132− ξ4.ctrlp-vim = λ1,
133− ξ4.denite-nvim = ν1,
134− ξ4.dontDistribute = κ4 -> κ4,
135− ξ4.echodoc-vim = ρ1,
136− ξ4.ghcmod-vim = φ1,
137− ξ4.goyo-vim = ω1,
138− ξ4.gundo-vim = ζ,
139− ξ4.hlint-refactor-vim = ζ2,
140− ξ4.isDerivation = κ4 -> Bool,
141− ξ4.neco-ghc = μ2,
142− ξ4.neocomplete-vim = ν2,
143− ξ4.neoinclude-vim = ξ2,
144− ξ4.neomru-vim = ο2,
145− ξ4.neosnippet-vim = π2,
146− ξ4.nerdcommenter = ξ,
147− ξ4.nerdtree = ο,
148− ξ4.open-browser-vim = ρ2,
149− ξ4.rainbow_parentheses-vim = χ2,
150− ξ4.removeAttrs = κ4 -> [String] -> κ4,
151− ξ4.riv-vim = α3,
152− ξ4.sourcemap-vim = θ3,
153− ξ4.supertab = ι,
154− ξ4.syntastic = κ,
155− ξ4.tabpagebuffer-vim = ξ3,
156− ξ4.tabular = μ,
157− ξ4.tagbar = ν,
158− ξ4.taglist-vim = π3,
159− ξ4.throw = String -> κ4,
160− ξ4.thumbnail-vim = ρ3,
161− ξ4.tlib_vim = σ3,
162− ξ4.tslime-vim = φ3,
163− ξ4.ultisnips = π,
164− ξ4.unite-vim = χ3,
165− ξ4.vim-SyntaxRange = λ,
166− ξ4.vim-airline = τ,
167− ξ4.vim-coffee-script = ω,
168− ξ4.vim-colors-solarized = θ,
169− ξ4.vim-commentary = ε1,
170− ξ4.vim-css-color = ι1,
171− ξ4.vim-cute-python = μ1,
172− ξ4.vim-easy-align = ξ1,
173− ξ4.vim-easygit = ο1,
174− ξ4.vim-easymotion = π1,
175− ξ4.vim-eighties = σ1,
176− ξ4.vim-extradite = τ1,
177− ξ4.vim-fugitive = υ1,
178− ξ4.vim-gist = ε,
179− ξ4.vim-gitgutter = ψ1,
180− ξ4.vim-haskellConcealPlus = γ2,
181− ξ4.vim-haskellconceal = β2,
182− ξ4.vim-hier = ε2,
183− ξ4.vim-hoogle = η,
184− ξ4.vim-ipython = θ2,
185− ξ4.vim-latex-live-preview = ι2,
186− ξ4.vim-maktaba = κ2,
187− ξ4.vim-multiple-cursors = λ2,
188− ξ4.vim-pathogen = σ2,
189− ξ4.vim-polyglot = τ2,
190− ξ4.vim-prettyprint = υ2,
191− ξ4.vim-quickrun = φ2,
192− ξ4.vim-repeat = ψ2,
193− ξ4.vim-rhubarb = ω2,
194− ξ4.vim-sensible = β3,
195− ξ4.vim-signature = γ3,
196− ξ4.vim-sleuth = δ3,
197− ξ4.vim-snipmate = ε3,
198− ξ4.vim-solidity = η3,
199− ξ4.vim-stylish-haskell = κ3,
200− ξ4.vim-surround = μ3,
201− ξ4.vim-table-mode = ν3,
202− ξ4.vim-tabpagecd = ο3,
203− ξ4.vim-tmux-navigator = τ3,
204− ξ4.vim-vinegar = β4,
205− ξ4.vim-watchdogs = γ4,
206− ξ4.vim2nix = ψ3,
207− ξ4.vimproc-vim = ω3,
208− ξ4.vimshell-vim = α4,
209− ξ4.webapi-vim = ρ,
210− ξ4.wombat256-vim = δ4,
211− ξ4.xterm-color-table-vim = ε4,
212− ξ4.zeavim-vim = η4,
213− ο4.hasAttr = μ4 -> ξ4 -> Bool,
214− π4.fromJSON = ρ4 -> σ4,
215− τ4.readFile = String -> ρ4
216−) =>
217−λ4 -> ξ4 -> ν4
test/golden/importless/apiextractor.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 name = String;
13 name = String;
test/golden/importless/appliance.txt+1−1
@@ -1,6 +1,6 @@
1∀ β.
1∀ β.
2{ fetchzip =
2{ fetchzip =
3− { meta = {hydraPlatforms = ∀ α. α;};
3+ { meta = {hydraPlatforms = ∀ α. [α];};
4 name = String;
4 name = String;
5 sha256 = String;
5 sha256 = String;
6 url = String;
6 url = String;
test/golden/importless/array-utils.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/asdf-finalizers.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/asdf-package-system.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/asdf-system-connections.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/assets.txt+1−1
@@ -7,7 +7,7 @@
7 meta =
7 meta =
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10− hydraPlatforms = ∀ α. α;
10+ hydraPlatforms = ∀ α. [α];
11 license = δ;
11 license = δ;
12 maintainers = [ε];
12 maintainers = [ε];
13 };
13 };
test/golden/importless/atd.txtdeleted−59
@@ -1,59 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1.
2−( α.config = β,
3− α.lib = γ,
4− α.pkgs = δ,
5− β.ids = ε,
6− β.services = ζ,
7− γ.builtins = η,
8− γ.map =
9− ( θ ->
10− { name = String;
11− value =
12− { group = String;
13− owner = String;
14− setgid = Bool;
15− setuid = Bool;
16− source = String;
17− };
18− }
19− ) ->
20− [String] -> ι,
21− γ.mkIf =
22− κ ->
23− { environment = {systemPackages = [λ];};
24− security = {pam = {services = {atd = {};};}; wrappers = μ;};
25− systemd =
26− { services =
27− { atd =
28− { description = String;
29− path = [λ];
30− preStart = String;
31− script = String;
32− serviceConfig = {Type = String;};
33− wantedBy = [String];
34− };
35− };
36− };
37− users =
38− { groups = {atd = {gid = ν;};};
39− users = {atd = {description = String; home = String; uid = ξ;};};
40− };
41− } ->
42− ο,
43− γ.mkOption = {default = Bool; description = String; type = π;} -> ρ,
44− γ.types = σ,
45− δ.at = λ,
46− ζ.atd = τ,
47− τ.enable = κ,
48− η.listToAttrs = ι -> μ,
49− ε.gids = υ,
50− υ.atd = ν,
51− φ.uids = χ,
52− χ.atd = ξ,
53− σ.bool = π,
54− ψ.bool = ω
55−) =>
56−α ->
57−{ config = ο;
58− options = {services = {atd = {allowEveryone = ρ; enable = α1;};};};
59−}
test/golden/importless/attica.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [γ];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ outputs = [String];
10+ } ->
11+ η;
12+ qtbase = γ;
13+} ->
14+η
test/golden/importless/b43.txt+13−15
@@ -1,21 +1,19 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2( α.config = β,
2( α.config = β,
3 α.lib = γ,
3 α.lib = γ,
4 α.pkgs = δ,
4 α.pkgs = δ,
5 β.boot = ε,
5 β.boot = ε,
6 β.networking = ζ,
6 β.networking = ζ,
7− γ.builtins = η,
8− γ.lessThan = Number -> θ -> ι,
7+ γ.lessThan = Number -> η -> θ,
9− γ.mkIf = κ -> {assertions = λ; hardware = {firmware = [μ];};} -> ν,
8+ γ.mkIf = ι -> {assertions = κ; hardware = {firmware = [λ];};} -> μ,
10− γ.mkOption = {default = Bool; description = String; type = ξ;} -> ο,
9+ γ.mkOption = {default = Bool; description = String; type = ν;} -> ξ,
11− γ.singleton = {assertion = ι; message = String;} -> λ,
10+ γ.singleton = {assertion = θ; message = String;} -> κ,
12− γ.types = π,
11+ γ.types = ο,
13− δ.b43Firmware_5_1_138 = μ,
12+ δ.b43Firmware_5_1_138 = λ,
14− ε.kernelPackages = ρ,
13+ ε.kernelPackages = π,
15− ρ.kernel = σ,
14+ π.kernel = ρ,
16− σ.version = τ,
15+ ρ.version = σ,
17− ζ.enableB43Firmware = κ,
16+ ζ.enableB43Firmware = ι,
18− η.compareVersions = τ -> String -> θ,
19− π.bool = ξ
17+ ο.bool = ν
20) =>
18) =>
21−α -> {config = ν; options = {networking = {enableB43Firmware = ο;};};}
19+α -> {config = μ; options = {networking = {enableB43Firmware = ξ;};};}
test/golden/importless/binary-tarball.txt+16−22
@@ -1,26 +1,20 @@
1∀ β γ δ ε ζ η.
1∀ β γ δ ε ζ η.
2−( ( β
2+( β //
3− ) //
4− ( { distPhase = String;
3+ { distPhase = String;
5− doDist = Bool;
4+ doDist = Bool;
6− finalPhase = String;
5+ finalPhase = String;
7− meta = ∀ α. α;
6+ meta = ∀ α. α;
8− name = String;
7+ name = String;
9− postHook = String;
8+ postHook = String;
10− }
9+ } ~
11− ) ~
12− ( γ
10+ γ,
13− ),
14− ( { doCheck = Bool;
11+ { doCheck = Bool;
15− postPhases = String;
12+ postPhases = String;
16− prefix = String;
13+ prefix = String;
17− showBuildStats = Bool;
14+ showBuildStats = Bool;
18− }
19− ) //
15+ } //
20− ( γ
16+ γ ~
21− ) ~
22− ( δ
17+ δ,
23− ),
24 β.meta = {},
18 β.meta = {},
25 β.?name = String,
19 β.?name = String,
26 ε.version = String,
20 ε.version = String,
test/golden/importless/bluez-qt.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ preConfigure = String;
10+ propagatedBuildInputs = [γ];
11+ } ->
12+ θ;
13+ qtbase = γ;
14+ qtdeclarative = η;
15+} ->
16+θ
test/golden/importless/build-rebar3.txt+19−22
@@ -1,26 +1,23 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ.
2−( (β) // (γ) ~ ({buildInputs = [δ]; name = String;}),
2+( β // γ ~ {buildInputs = [δ]; name = String;},
3− ( { buildInputs = [ε];
3+ { buildInputs = [ε];
4− buildPhase = String;
4+ buildPhase = String;
5− buildPlugins = [ζ];
5+ buildPlugins = [ζ];
6− compilePorts = Bool;
6+ compilePorts = Bool;
7− configurePhase = String;
7+ configurePhase = String;
8− dontStrip = Bool;
8+ dontStrip = Bool;
9− installPhase = String;
9+ installPhase = String;
10− meta = ∀ α. α;
10+ meta = ∀ α. α;
11− name = String;
11+ name = String;
12− passthru = {beamDeps = [ζ]; env = η; packageName = θ;};
12+ passthru = {beamDeps = [ζ]; env = η; packageName = θ;};
13− postPatch = String;
13+ postPatch = String;
14− propagatedBuildInputs = ι;
14+ propagatedBuildInputs = ι;
15− setupHook = κ;
15+ setupHook = κ;
16− src = λ;
16+ src = λ;
17− version = μ;
17+ version = μ;
18− }
19− ) //
18+ } //
20− ( ν
19+ ν ~
21− ) ~
22− ( γ
20+ γ,
23− ),
24 β.?beamDeps = [ζ],
21 β.?beamDeps = [ζ],
25 β.?buildInputs = [ε],
22 β.?buildInputs = [ε],
26 β.?buildPhase = Null,
23 β.?buildPhase = Null,
test/golden/importless/build-solution.txt+1−1
@@ -10,7 +10,7 @@
10 ε
10 ε
11) =>
11) =>
12{dotnetfx = β; stdenv = α;} ->
12{dotnetfx = β; stdenv = α;} ->
13−{ assemblyInputs = ζ;
13+{ assemblyInputs = [ζ];
14 baseDir = String;
14 baseDir = String;
15 mainClassFile = Null;
15 mainClassFile = Null;
16 modifyPublicMain = Bool;
16 modifyPublicMain = Bool;
test/golden/importless/build.txt+2−2
@@ -12,7 +12,7 @@
12 platforms = ζ;
12 platforms = ζ;
13 };
13 };
14 nativeBuildInputs = [η];
14 nativeBuildInputs = [η];
15− patches = θ;
15+ patches = [θ];
16 pname = String;
16 pname = String;
17 postInstall = String;
17 postInstall = String;
18 postPatch = String;
18 postPatch = String;
@@ -39,7 +39,7 @@
39 libxslt = γ;
39 libxslt = γ;
40 makeWrapper = γ;
40 makeWrapper = γ;
41 pango = γ;
41 pango = γ;
42− patches = θ;
42+ patches = [θ];
43 pkgconfig = η;
43 pkgconfig = η;
44 rev = ο;
44 rev = ο;
45 sha256 = π;
45 sha256 = π;
test/golden/importless/buildOcamlJane.txt+13−16
@@ -1,20 +1,17 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( ( α
2+( α //
3− ) //
4− ( { buildInputs = [β];
3+ { buildInputs = [β];
5− buildPhase = String;
4+ buildPhase = String;
6− configurePhase = String;
5+ configurePhase = String;
7− dontAddPrefix = Bool;
6+ dontAddPrefix = Bool;
8− hasSharedObjects = Bool;
7+ hasSharedObjects = Bool;
9− installPhase = String;
8+ installPhase = String;
10− minimumSupportedOcamlVersion = String;
9+ minimumSupportedOcamlVersion = String;
11− name = γ;
10+ name = γ;
12− src = δ;
11+ src = δ;
13− version = String;
12+ version = String;
14− }
13+ } ~
15− ) ~
16− ( ε
14+ ε,
17− ),
18 α.?buildInputs = [β],
15 α.?buildInputs = [β],
19 α.?hash = String,
16 α.?hash = String,
20 α.?minimumSupportedOcamlVersion = String,
17 α.?minimumSupportedOcamlVersion = String,
test/golden/importless/builder.txt+10−13
@@ -1,17 +1,14 @@
1∀ α β γ δ ε ζ η θ.
1∀ α β γ δ ε ζ η θ.
2−( ( α
2+( α //
3− ) //
4− ( { buildPhase = String;
3+ { buildPhase = String;
5− checkPhase = String;
4+ checkPhase = String;
6− configurePhase = String;
5+ configurePhase = String;
7− installPhase = String;
6+ installPhase = String;
8− modRoot = String;
7+ modRoot = String;
9− passthru = {forCurses = Bool; forTiles = Bool;};
8+ passthru = {forCurses = Bool; forTiles = Bool;};
10− pname = String;
9+ pname = String;
11− }
12− ) ~
10+ } ~
13− ( β
11+ β,
14− ),
15 α.?buildPhase = String,
12 α.?buildPhase = String,
16 α.?checkPhase = String,
13 α.?checkPhase = String,
17 α.?configurePhase = String,
14 α.?configurePhase = String,
test/golden/importless/chipz.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-aa.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-anonfun.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-css.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-html-parse.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-jpeg.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-l10n-cldr.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-log.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-markup.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-paths.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-unification.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cl-utilities.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/clack-socket.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/closer-mop.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cohttp.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ.
1∀ β γ δ ε ζ η θ ι κ λ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optionals = Bool -> [ε] -> ζ,
3 δ.optionals = Bool -> [ε] -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/combinators.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ.
1∀ β γ δ ε ζ η θ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.src = ε,
4 δ.src = ε,
5 δ.version = ζ
5 δ.version = ζ
test/golden/importless/command-line-arguments.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/common.txt+1−1
@@ -19,7 +19,7 @@
19 β ->
19 β ->
20 { environment = {systemPackages = [δ];};
20 { environment = {systemPackages = [δ];};
21 nix =
21 nix =
22− { binaryCaches = ∀ α. α;
22+ { binaryCaches = ∀ α. [α];
23 buildMachines = [{hostName = String; systems = [ι];}];
23 buildMachines = [{hostName = String; systems = [ι];}];
24 distributedBuilds = Bool;
24 distributedBuilds = Bool;
25 };
25 };
test/golden/importless/compiler.txt+1−1
@@ -6,7 +6,7 @@
6) =>
6) =>
7{ buildDunePackage =
7{ buildDunePackage =
8 { buildInputs = [η];
8 { buildInputs = [η];
9− configurePlatforms = ∀ α. α;
9+ configurePlatforms = ∀ α. [α];
10 meta =
10 meta =
11 { description = String;
11 { description = String;
12 homepage = String;
12 homepage = String;
test/golden/importless/component-packages.txt+671−671
@@ -1,36 +1,36 @@
1{ components =
1{ components =
2− { abode = ∀ α β. α -> β;
2+ { abode = ∀ α β. α -> [β];
3− accuweather = ∀ α β. α -> β;
3+ accuweather = ∀ α β. α -> [β];
4 acer_projector = ∀ α β. (α.pyserial = β) => α -> [β];
4 acer_projector = ∀ α β. (α.pyserial = β) => α -> [β];
5− acmeda = ∀ α β. α -> β;
5+ acmeda = ∀ α β. α -> [β];
6− actiontec = ∀ α β. α -> β;
6+ actiontec = ∀ α β. α -> [β];
7− adguard = ∀ α β. α -> β;
7+ adguard = ∀ α β. α -> [β];
8− ads = ∀ α β. α -> β;
8+ ads = ∀ α β. α -> [β];
9− aftership = ∀ α β. α -> β;
9+ aftership = ∀ α β. α -> [β];
10− agent_dvr = ∀ α β. α -> β;
10+ agent_dvr = ∀ α β. α -> [β];
11− air_quality = ∀ α β. α -> β;
11+ air_quality = ∀ α β. α -> [β];
12− airly = ∀ α β. α -> β;
12+ airly = ∀ α β. α -> [β];
13 airvisual = ∀ α β. (α.pyairvisual = β) => α -> [β];
13 airvisual = ∀ α β. (α.pyairvisual = β) => α -> [β];
14− aladdin_connect = ∀ α β. α -> β;
14+ aladdin_connect = ∀ α β. α -> [β];
15− alarm_control_panel = ∀ α β. α -> β;
15+ alarm_control_panel = ∀ α β. α -> [β];
16− alarmdecoder = ∀ α β. α -> β;
16+ alarmdecoder = ∀ α β. α -> [β];
17− alert = ∀ α β. α -> β;
17+ alert = ∀ α β. α -> [β];
18 alexa = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
18 alexa = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
19 almond = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
19 almond = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
20− alpha_vantage = ∀ α β. α -> β;
20+ alpha_vantage = ∀ α β. α -> [β];
21 amazon_polly = ∀ α β. (α.boto3 = β) => α -> [β];
21 amazon_polly = ∀ α β. (α.boto3 = β) => α -> [β];
22 ambiclimate = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
22 ambiclimate = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
23− ambient_station = ∀ α β. α -> β;
23+ ambient_station = ∀ α β. α -> [β];
24 amcrest = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
24 amcrest = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
25− ampio = ∀ α β. α -> β;
25+ ampio = ∀ α β. α -> [β];
26− android_ip_webcam = ∀ α β. α -> β;
26+ android_ip_webcam = ∀ α β. α -> [β];
27− androidtv = ∀ α β. α -> β;
27+ androidtv = ∀ α β. α -> [β];
28− anel_pwrctrl = ∀ α β. α -> β;
28+ anel_pwrctrl = ∀ α β. α -> [β];
29− anthemav = ∀ α β. α -> β;
29+ anthemav = ∀ α β. α -> [β];
30 apache_kafka = ∀ α β. (α.aiokafka = β) => α -> [β];
30 apache_kafka = ∀ α β. (α.aiokafka = β) => α -> [β];
31− apcupsd = ∀ α β. α -> β;
31+ apcupsd = ∀ α β. α -> [β];
32 api = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
32 api = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
33− apns = ∀ α β. α -> β;
33+ apns = ∀ α β. α -> [β];
34 apple_tv =
34 apple_tv =
35 ∀ α β.
35 ∀ α β.
36 ( α.aiohttp-cors = β,
36 ( α.aiohttp-cors = β,
@@ -40,71 +40,71 @@
40 ) =>
40 ) =>
41 α -> [β];
41 α -> [β];
42 apprise = ∀ α β. (α.apprise = β) => α -> [β];
42 apprise = ∀ α β. (α.apprise = β) => α -> [β];
43− aprs = ∀ α β. α -> β;
43+ aprs = ∀ α β. α -> [β];
44− aqualogic = ∀ α β. α -> β;
44+ aqualogic = ∀ α β. α -> [β];
45− aquostv = ∀ α β. α -> β;
45+ aquostv = ∀ α β. α -> [β];
46− arcam_fmj = ∀ α β. α -> β;
46+ arcam_fmj = ∀ α β. α -> [β];
47− arduino = ∀ α β. α -> β;
47+ arduino = ∀ α β. α -> [β];
48− arest = ∀ α β. α -> β;
48+ arest = ∀ α β. α -> [β];
49 arlo = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
49 arlo = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
50− arris_tg2492lg = ∀ α β. α -> β;
50+ arris_tg2492lg = ∀ α β. α -> [β];
51 aruba = ∀ α β. (α.pexpect = β) => α -> [β];
51 aruba = ∀ α β. (α.pexpect = β) => α -> [β];
52 arwn = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
52 arwn = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
53− asterisk_cdr = ∀ α β. α -> β;
53+ asterisk_cdr = ∀ α β. α -> [β];
54− asterisk_mbox = ∀ α β. α -> β;
54+ asterisk_mbox = ∀ α β. α -> [β];
55− asuswrt = ∀ α β. α -> β;
55+ asuswrt = ∀ α β. α -> [β];
56− atag = ∀ α β. α -> β;
56+ atag = ∀ α β. α -> [β];
57− aten_pe = ∀ α β. α -> β;
57+ aten_pe = ∀ α β. α -> [β];
58− atome = ∀ α β. α -> β;
58+ atome = ∀ α β. α -> [β];
59− august = ∀ α β. α -> β;
59+ august = ∀ α β. α -> [β];
60− aurora = ∀ α β. α -> β;
60+ aurora = ∀ α β. α -> [β];
61− aurora_abb_powerone = ∀ α β. α -> β;
61+ aurora_abb_powerone = ∀ α β. α -> [β];
62 auth = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
62 auth = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
63 automation = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
63 automation = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
64− avea = ∀ α β. α -> β;
64+ avea = ∀ α β. α -> [β];
65− avion = ∀ α β. α -> β;
65+ avion = ∀ α β. α -> [β];
66 avri = ∀ α β. (α.pycountry = β) => α -> [β];
66 avri = ∀ α β. (α.pycountry = β) => α -> [β];
67− awair = ∀ α β. α -> β;
67+ awair = ∀ α β. α -> [β];
68− aws = ∀ α β. α -> β;
68+ aws = ∀ α β. α -> [β];
69 axis = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
69 axis = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
70− azure_devops = ∀ α β. α -> β;
70+ azure_devops = ∀ α β. α -> [β];
71− azure_event_hub = ∀ α β. α -> β;
71+ azure_event_hub = ∀ α β. α -> [β];
72 azure_service_bus = ∀ α β. (α.azure-servicebus = β) => α -> [β];
72 azure_service_bus = ∀ α β. (α.azure-servicebus = β) => α -> [β];
73− baidu = ∀ α β. α -> β;
73+ baidu = ∀ α β. α -> [β];
74− bayesian = ∀ α β. α -> β;
74+ bayesian = ∀ α β. α -> [β];
75− bbb_gpio = ∀ α β. α -> β;
75+ bbb_gpio = ∀ α β. α -> [β];
76− bbox = ∀ α β. α -> β;
76+ bbox = ∀ α β. α -> [β];
77− beewi_smartclim = ∀ α β. α -> β;
77+ beewi_smartclim = ∀ α β. α -> [β];
78− bh1750 = ∀ α β. α -> β;
78+ bh1750 = ∀ α β. α -> [β];
79− binary_sensor = ∀ α β. α -> β;
79+ binary_sensor = ∀ α β. α -> [β];
80− bitcoin = ∀ α β. α -> β;
80+ bitcoin = ∀ α β. α -> [β];
81− bizkaibus = ∀ α β. α -> β;
81+ bizkaibus = ∀ α β. α -> [β];
82− blackbird = ∀ α β. α -> β;
82+ blackbird = ∀ α β. α -> [β];
83− blebox = ∀ α β. α -> β;
83+ blebox = ∀ α β. α -> [β];
84− blink = ∀ α β. α -> β;
84+ blink = ∀ α β. α -> [β];
85 blinksticklight = ∀ α β. (α.BlinkStick = β) => α -> [β];
85 blinksticklight = ∀ α β. (α.BlinkStick = β) => α -> [β];
86− blinkt = ∀ α β. α -> β;
86+ blinkt = ∀ α β. α -> [β];
87− blockchain = ∀ α β. α -> β;
87+ blockchain = ∀ α β. α -> [β];
88− bloomsky = ∀ α β. α -> β;
88+ bloomsky = ∀ α β. α -> [β];
89 bluesound = ∀ α β. (α.xmltodict = β) => α -> [β];
89 bluesound = ∀ α β. (α.xmltodict = β) => α -> [β];
90− bluetooth_le_tracker = ∀ α β. α -> β;
90+ bluetooth_le_tracker = ∀ α β. α -> [β];
91 bluetooth_tracker = ∀ α β. (α.bt_proximity = β) => α -> [β];
91 bluetooth_tracker = ∀ α β. (α.bt_proximity = β) => α -> [β];
92− bme280 = ∀ α β. α -> β;
92+ bme280 = ∀ α β. α -> [β];
93− bme680 = ∀ α β. α -> β;
93+ bme680 = ∀ α β. α -> [β];
94− bmp280 = ∀ α β. α -> β;
94+ bmp280 = ∀ α β. α -> [β];
95− bmw_connected_drive = ∀ α β. α -> β;
95+ bmw_connected_drive = ∀ α β. α -> [β];
96− bom = ∀ α β. α -> β;
96+ bom = ∀ α β. α -> [β];
97− bond = ∀ α β. α -> β;
97+ bond = ∀ α β. α -> [β];
98 braviatv = ∀ α β. (α.bravia-tv = β) => α -> [β];
98 braviatv = ∀ α β. (α.bravia-tv = β) => α -> [β];
99 broadlink = ∀ α β. (α.broadlink = β) => α -> [β];
99 broadlink = ∀ α β. (α.broadlink = β) => α -> [β];
100 brother = ∀ α β. (α.brother = β) => α -> [β];
100 brother = ∀ α β. (α.brother = β) => α -> [β];
101− brottsplatskartan = ∀ α β. α -> β;
101+ brottsplatskartan = ∀ α β. α -> [β];
102− browser = ∀ α β. α -> β;
102+ browser = ∀ α β. α -> [β];
103− brunt = ∀ α β. α -> β;
103+ brunt = ∀ α β. α -> [β];
104− bsblan = ∀ α β. α -> β;
104+ bsblan = ∀ α β. α -> [β];
105− bt_home_hub_5 = ∀ α β. α -> β;
105+ bt_home_hub_5 = ∀ α β. α -> [β];
106− bt_smarthub = ∀ α β. α -> β;
106+ bt_smarthub = ∀ α β. α -> [β];
107− buienradar = ∀ α β. α -> β;
107+ buienradar = ∀ α β. α -> [β];
108 caldav = ∀ α β. (α.caldav = β) => α -> [β];
108 caldav = ∀ α β. (α.caldav = β) => α -> [β];
109 calendar = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
109 calendar = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
110 camera = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
110 camera = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
@@ -117,50 +117,50 @@
117 α.zeroconf = β
117 α.zeroconf = β
118 ) =>
118 ) =>
119 α -> [β];
119 α -> [β];
120− cert_expiry = ∀ α β. α -> β;
120+ cert_expiry = ∀ α β. α -> [β];
121− channels = ∀ α β. α -> β;
121+ channels = ∀ α β. α -> [β];
122− circuit = ∀ α β. α -> β;
122+ circuit = ∀ α β. α -> [β];
123 cisco_ios = ∀ α β. (α.pexpect = β) => α -> [β];
123 cisco_ios = ∀ α β. (α.pexpect = β) => α -> [β];
124− cisco_mobility_express = ∀ α β. α -> β;
124+ cisco_mobility_express = ∀ α β. α -> [β];
125− cisco_webex_teams = ∀ α β. α -> β;
125+ cisco_webex_teams = ∀ α β. α -> [β];
126− citybikes = ∀ α β. α -> β;
126+ citybikes = ∀ α β. α -> [β];
127− clementine = ∀ α β. α -> β;
127+ clementine = ∀ α β. α -> [β];
128− clickatell = ∀ α β. α -> β;
128+ clickatell = ∀ α β. α -> [β];
129− clicksend = ∀ α β. α -> β;
129+ clicksend = ∀ α β. α -> [β];
130− clicksend_tts = ∀ α β. α -> β;
130+ clicksend_tts = ∀ α β. α -> [β];
131− climate = ∀ α β. α -> β;
131+ climate = ∀ α β. α -> [β];
132 cloud = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
132 cloud = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
133− cloudflare = ∀ α β. α -> β;
133+ cloudflare = ∀ α β. α -> [β];
134− cmus = ∀ α β. α -> β;
134+ cmus = ∀ α β. α -> [β];
135− co2signal = ∀ α β. α -> β;
135+ co2signal = ∀ α β. α -> [β];
136− coinbase = ∀ α β. α -> β;
136+ coinbase = ∀ α β. α -> [β];
137 coinmarketcap = ∀ α β. (α.coinmarketcap = β) => α -> [β];
137 coinmarketcap = ∀ α β. (α.coinmarketcap = β) => α -> [β];
138− comed_hourly_pricing = ∀ α β. α -> β;
138+ comed_hourly_pricing = ∀ α β. α -> [β];
139− comfoconnect = ∀ α β. α -> β;
139+ comfoconnect = ∀ α β. α -> [β];
140− command_line = ∀ α β. α -> β;
140+ command_line = ∀ α β. α -> [β];
141− concord232 = ∀ α β. α -> β;
141+ concord232 = ∀ α β. α -> [β];
142 config = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
142 config = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
143− configurator = ∀ α β. α -> β;
143+ configurator = ∀ α β. α -> [β];
144− control4 = ∀ α β. α -> β;
144+ control4 = ∀ α β. α -> [β];
145 conversation = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
145 conversation = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
146− coolmaster = ∀ α β. α -> β;
146+ coolmaster = ∀ α β. α -> [β];
147− coronavirus = ∀ α β. α -> β;
147+ coronavirus = ∀ α β. α -> [β];
148− counter = ∀ α β. α -> β;
148+ counter = ∀ α β. α -> [β];
149− cover = ∀ α β. α -> β;
149+ cover = ∀ α β. α -> [β];
150− cppm_tracker = ∀ α β. α -> β;
150+ cppm_tracker = ∀ α β. α -> [β];
151 cpuspeed = ∀ α β. (α.py-cpuinfo = β) => α -> [β];
151 cpuspeed = ∀ α β. (α.py-cpuinfo = β) => α -> [β];
152− crimereports = ∀ α β. α -> β;
152+ crimereports = ∀ α β. α -> [β];
153 cups = ∀ α β. (α.pycups = β) => α -> [β];
153 cups = ∀ α β. (α.pycups = β) => α -> [β];
154− currencylayer = ∀ α β. α -> β;
154+ currencylayer = ∀ α β. α -> [β];
155− daikin = ∀ α β. α -> β;
155+ daikin = ∀ α β. α -> [β];
156− danfoss_air = ∀ α β. α -> β;
156+ danfoss_air = ∀ α β. α -> [β];
157 darksky = ∀ α β. (α.python-forecastio = β) => α -> [β];
157 darksky = ∀ α β. (α.python-forecastio = β) => α -> [β];
158 datadog = ∀ α β. (α.datadog = β) => α -> [β];
158 datadog = ∀ α β. (α.datadog = β) => α -> [β];
159− ddwrt = ∀ α β. α -> β;
159+ ddwrt = ∀ α β. α -> [β];
160 debugpy = ∀ α β. (α.debugpy = β) => α -> [β];
160 debugpy = ∀ α β. (α.debugpy = β) => α -> [β];
161− deconz = ∀ α β. α -> β;
161+ deconz = ∀ α β. α -> [β];
162 decora = ∀ α β. (α.bluepy = β) => α -> [β];
162 decora = ∀ α β. (α.bluepy = β) => α -> [β];
163− decora_wifi = ∀ α β. α -> β;
163+ decora_wifi = ∀ α β. α -> [β];
164 default_config =
164 default_config =
165 ∀ α β.
165 ∀ α β.
166 ( α.aiohttp-cors = β,
166 ( α.aiohttp-cors = β,
@@ -174,157 +174,157 @@
174 α.zeroconf = β
174 α.zeroconf = β
175 ) =>
175 ) =>
176 α -> [β];
176 α -> [β];
177− delijn = ∀ α β. α -> β;
177+ delijn = ∀ α β. α -> [β];
178 deluge = ∀ α β. (α.deluge-client = β) => α -> [β];
178 deluge = ∀ α β. (α.deluge-client = β) => α -> [β];
179 demo = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
179 demo = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
180− denon = ∀ α β. α -> β;
180+ denon = ∀ α β. α -> [β];
181 denonavr = ∀ α β. (α.denonavr = β, α.getmac = β) => α -> [β];
181 denonavr = ∀ α β. (α.denonavr = β, α.getmac = β) => α -> [β];
182− derivative = ∀ α β. α -> β;
182+ derivative = ∀ α β. α -> [β];
183− deutsche_bahn = ∀ α β. α -> β;
183+ deutsche_bahn = ∀ α β. α -> [β];
184− device_automation = ∀ α β. α -> β;
184+ device_automation = ∀ α β. α -> [β];
185− device_sun_light_trigger = ∀ α β. α -> β;
185+ device_sun_light_trigger = ∀ α β. α -> [β];
186− device_tracker = ∀ α β. α -> β;
186+ device_tracker = ∀ α β. α -> [β];
187− devolo_home_control = ∀ α β. α -> β;
187+ devolo_home_control = ∀ α β. α -> [β];
188− dexcom = ∀ α β. α -> β;
188+ dexcom = ∀ α β. α -> [β];
189− dht = ∀ α β. α -> β;
189+ dht = ∀ α β. α -> [β];
190 dialogflow = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
190 dialogflow = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
191 digital_ocean = ∀ α β. (α.digital-ocean = β) => α -> [β];
191 digital_ocean = ∀ α β. (α.digital-ocean = β) => α -> [β];
192− digitalloggers = ∀ α β. α -> β;
192+ digitalloggers = ∀ α β. α -> [β];
193− directv = ∀ α β. α -> β;
193+ directv = ∀ α β. α -> [β];
194 discogs = ∀ α β. (α.discogs_client = β) => α -> [β];
194 discogs = ∀ α β. (α.discogs_client = β) => α -> [β];
195 discord = ∀ α β. (α.discordpy = β) => α -> [β];
195 discord = ∀ α β. (α.discordpy = β) => α -> [β];
196 discovery =
196 discovery =
197 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
197 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
198 dlib_face_detect = ∀ α β. (α.face_recognition = β) => α -> [β];
198 dlib_face_detect = ∀ α β. (α.face_recognition = β) => α -> [β];
199 dlib_face_identify = ∀ α β. (α.face_recognition = β) => α -> [β];
199 dlib_face_identify = ∀ α β. (α.face_recognition = β) => α -> [β];
200− dlink = ∀ α β. α -> β;
200+ dlink = ∀ α β. α -> [β];
201 dlna_dmr = ∀ α β. (α.async-upnp-client = β) => α -> [β];
201 dlna_dmr = ∀ α β. (α.async-upnp-client = β) => α -> [β];
202 dnsip = ∀ α β. (α.aiodns = β) => α -> [β];
202 dnsip = ∀ α β. (α.aiodns = β) => α -> [β];
203 dominos = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
203 dominos = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
204 doods = ∀ α β. (α.pillow = β) => α -> [β];
204 doods = ∀ α β. (α.pillow = β) => α -> [β];
205 doorbird = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
205 doorbird = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
206− dovado = ∀ α β. α -> β;
206+ dovado = ∀ α β. α -> [β];
207− downloader = ∀ α β. α -> β;
207+ downloader = ∀ α β. α -> [β];
208− dsmr = ∀ α β. α -> β;
208+ dsmr = ∀ α β. α -> [β];
209 dsmr_reader = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
209 dsmr_reader = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
210− dte_energy_bridge = ∀ α β. α -> β;
210+ dte_energy_bridge = ∀ α β. α -> [β];
211− dublin_bus_transport = ∀ α β. α -> β;
211+ dublin_bus_transport = ∀ α β. α -> [β];
212− duckdns = ∀ α β. α -> β;
212+ duckdns = ∀ α β. α -> [β];
213− dunehd = ∀ α β. α -> β;
213+ dunehd = ∀ α β. α -> [β];
214 dwd_weather_warnings =
214 dwd_weather_warnings =
215 ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
215 ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
216− dweet = ∀ α β. α -> β;
216+ dweet = ∀ α β. α -> [β];
217− dynalite = ∀ α β. α -> β;
217+ dynalite = ∀ α β. α -> [β];
218 dyson = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
218 dyson = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
219− ebox = ∀ α β. α -> β;
219+ ebox = ∀ α β. α -> [β];
220− ebusd = ∀ α β. α -> β;
220+ ebusd = ∀ α β. α -> [β];
221− ecoal_boiler = ∀ α β. α -> β;
221+ ecoal_boiler = ∀ α β. α -> [β];
222− ecobee = ∀ α β. α -> β;
222+ ecobee = ∀ α β. α -> [β];
223− econet = ∀ α β. α -> β;
223+ econet = ∀ α β. α -> [β];
224− ecovacs = ∀ α β. α -> β;
224+ ecovacs = ∀ α β. α -> [β];
225 eddystone_temperature = ∀ α β. (α.construct = β) => α -> [β];
225 eddystone_temperature = ∀ α β. (α.construct = β) => α -> [β];
226− edimax = ∀ α β. α -> β;
226+ edimax = ∀ α β. α -> [β];
227− edl21 = ∀ α β. α -> β;
227+ edl21 = ∀ α β. α -> [β];
228− ee_brightbox = ∀ α β. α -> β;
228+ ee_brightbox = ∀ α β. α -> [β];
229− efergy = ∀ α β. α -> β;
229+ efergy = ∀ α β. α -> [β];
230− egardia = ∀ α β. α -> β;
230+ egardia = ∀ α β. α -> [β];
231− eight_sleep = ∀ α β. α -> β;
231+ eight_sleep = ∀ α β. α -> [β];
232− elgato = ∀ α β. α -> β;
232+ elgato = ∀ α β. α -> [β];
233− eliqonline = ∀ α β. α -> β;
233+ eliqonline = ∀ α β. α -> [β];
234− elkm1 = ∀ α β. α -> β;
234+ elkm1 = ∀ α β. α -> [β];
235− elv = ∀ α β. α -> β;
235+ elv = ∀ α β. α -> [β];
236− emby = ∀ α β. α -> β;
236+ emby = ∀ α β. α -> [β];
237− emoncms = ∀ α β. α -> β;
237+ emoncms = ∀ α β. α -> [β];
238− emoncms_history = ∀ α β. α -> β;
238+ emoncms_history = ∀ α β. α -> [β];
239 emulated_hue = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
239 emulated_hue = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
240− emulated_roku = ∀ α β. α -> β;
240+ emulated_roku = ∀ α β. α -> [β];
241 enigma2 = ∀ α β. (α.openwebifpy = β) => α -> [β];
241 enigma2 = ∀ α β. (α.openwebifpy = β) => α -> [β];
242− enocean = ∀ α β. α -> β;
242+ enocean = ∀ α β. α -> [β];
243− enphase_envoy = ∀ α β. α -> β;
243+ enphase_envoy = ∀ α β. α -> [β];
244− entur_public_transport = ∀ α β. α -> β;
244+ entur_public_transport = ∀ α β. α -> [β];
245− environment_canada = ∀ α β. α -> β;
245+ environment_canada = ∀ α β. α -> [β];
246− envirophat = ∀ α β. α -> β;
246+ envirophat = ∀ α β. α -> [β];
247− envisalink = ∀ α β. α -> β;
247+ envisalink = ∀ α β. α -> [β];
248− ephember = ∀ α β. α -> β;
248+ ephember = ∀ α β. α -> [β];
249− epson = ∀ α β. α -> β;
249+ epson = ∀ α β. α -> [β];
250− epsonworkforce = ∀ α β. α -> β;
250+ epsonworkforce = ∀ α β. α -> [β];
251 eq3btsmart = ∀ α β. (α.construct = β) => α -> [β];
251 eq3btsmart = ∀ α β. (α.construct = β) => α -> [β];
252 esphome = ∀ α β. (α.aioesphomeapi = β) => α -> [β];
252 esphome = ∀ α β. (α.aioesphomeapi = β) => α -> [β];
253− essent = ∀ α β. α -> β;
253+ essent = ∀ α β. α -> [β];
254− etherscan = ∀ α β. α -> β;
254+ etherscan = ∀ α β. α -> [β];
255− eufy = ∀ α β. α -> β;
255+ eufy = ∀ α β. α -> [β];
256− everlights = ∀ α β. α -> β;
256+ everlights = ∀ α β. α -> [β];
257− evohome = ∀ α β. α -> β;
257+ evohome = ∀ α β. α -> [β];
258− ezviz = ∀ α β. α -> β;
258+ ezviz = ∀ α β. α -> [β];
259− facebook = ∀ α β. α -> β;
259+ facebook = ∀ α β. α -> [β];
260− facebox = ∀ α β. α -> β;
260+ facebox = ∀ α β. α -> [β];
261− fail2ban = ∀ α β. α -> β;
261+ fail2ban = ∀ α β. α -> [β];
262− familyhub = ∀ α β. α -> β;
262+ familyhub = ∀ α β. α -> [β];
263− fan = ∀ α β. α -> β;
263+ fan = ∀ α β. α -> [β];
264− fastdotcom = ∀ α β. α -> β;
264+ fastdotcom = ∀ α β. α -> [β];
265− feedreader = ∀ α β. α -> β;
265+ feedreader = ∀ α β. α -> [β];
266 ffmpeg = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
266 ffmpeg = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
267 ffmpeg_motion = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
267 ffmpeg_motion = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
268 ffmpeg_noise = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
268 ffmpeg_noise = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
269− fibaro = ∀ α β. α -> β;
269+ fibaro = ∀ α β. α -> [β];
270− fido = ∀ α β. α -> β;
270+ fido = ∀ α β. α -> [β];
271− file = ∀ α β. α -> β;
271+ file = ∀ α β. α -> [β];
272− filesize = ∀ α β. α -> β;
272+ filesize = ∀ α β. α -> [β];
273 filter = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
273 filter = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
274 fints = ∀ α β. (α.fints = β) => α -> [β];
274 fints = ∀ α β. (α.fints = β) => α -> [β];
275− firmata = ∀ α β. α -> β;
275+ firmata = ∀ α β. α -> [β];
276 fitbit = ∀ α β. (α.aiohttp-cors = β, α.fitbit = β) => α -> [β];
276 fitbit = ∀ α β. (α.aiohttp-cors = β, α.fitbit = β) => α -> [β];
277− fixer = ∀ α β. α -> β;
277+ fixer = ∀ α β. α -> [β];
278− fleetgo = ∀ α β. α -> β;
278+ fleetgo = ∀ α β. α -> [β];
279− flexit = ∀ α β. α -> β;
279+ flexit = ∀ α β. α -> [β];
280− flic = ∀ α β. α -> β;
280+ flic = ∀ α β. α -> [β];
281− flick_electric = ∀ α β. α -> β;
281+ flick_electric = ∀ α β. α -> [β];
282− flock = ∀ α β. α -> β;
282+ flock = ∀ α β. α -> [β];
283− flume = ∀ α β. α -> β;
283+ flume = ∀ α β. α -> [β];
284− flunearyou = ∀ α β. α -> β;
284+ flunearyou = ∀ α β. α -> [β];
285− flux = ∀ α β. α -> β;
285+ flux = ∀ α β. α -> [β];
286 flux_led = ∀ α β. (α.flux-led = β) => α -> [β];
286 flux_led = ∀ α β. (α.flux-led = β) => α -> [β];
287− folder = ∀ α β. α -> β;
287+ folder = ∀ α β. α -> [β];
288 folder_watcher = ∀ α β. (α.watchdog = β) => α -> [β];
288 folder_watcher = ∀ α β. (α.watchdog = β) => α -> [β];
289− foobot = ∀ α β. α -> β;
289+ foobot = ∀ α β. α -> [β];
290− forked_daapd = ∀ α β. α -> β;
290+ forked_daapd = ∀ α β. α -> [β];
291− fortios = ∀ α β. α -> β;
291+ fortios = ∀ α β. α -> [β];
292− foscam = ∀ α β. α -> β;
292+ foscam = ∀ α β. α -> [β];
293 foursquare = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
293 foursquare = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
294− free_mobile = ∀ α β. α -> β;
294+ free_mobile = ∀ α β. α -> [β];
295 freebox =
295 freebox =
296 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
296 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
297− freedns = ∀ α β. α -> β;
297+ freedns = ∀ α β. α -> [β];
298 fritz = ∀ α β. (α.fritzconnection = β) => α -> [β];
298 fritz = ∀ α β. (α.fritzconnection = β) => α -> [β];
299 fritzbox = ∀ α β. (α.pyfritzhome = β) => α -> [β];
299 fritzbox = ∀ α β. (α.pyfritzhome = β) => α -> [β];
300 fritzbox_callmonitor = ∀ α β. (α.fritzconnection = β) => α -> [β];
300 fritzbox_callmonitor = ∀ α β. (α.fritzconnection = β) => α -> [β];
301 fritzbox_netmonitor = ∀ α β. (α.fritzconnection = β) => α -> [β];
301 fritzbox_netmonitor = ∀ α β. (α.fritzconnection = β) => α -> [β];
302− fronius = ∀ α β. α -> β;
302+ fronius = ∀ α β. α -> [β];
303 frontend = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
303 frontend = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
304− frontier_silicon = ∀ α β. α -> β;
304+ frontier_silicon = ∀ α β. α -> [β];
305− futurenow = ∀ α β. α -> β;
305+ futurenow = ∀ α β. α -> [β];
306− garadget = ∀ α β. α -> β;
306+ garadget = ∀ α β. α -> [β];
307− garmin_connect = ∀ α β. α -> β;
307+ garmin_connect = ∀ α β. α -> [β];
308− gc100 = ∀ α β. α -> β;
308+ gc100 = ∀ α β. α -> [β];
309− gdacs = ∀ α β. α -> β;
309+ gdacs = ∀ α β. α -> [β];
310− geizhals = ∀ α β. α -> β;
310+ geizhals = ∀ α β. α -> [β];
311− generic = ∀ α β. α -> β;
311+ generic = ∀ α β. α -> [β];
312− generic_thermostat = ∀ α β. α -> β;
312+ generic_thermostat = ∀ α β. α -> [β];
313− geniushub = ∀ α β. α -> β;
313+ geniushub = ∀ α β. α -> [β];
314− geo_json_events = ∀ α β. α -> β;
314+ geo_json_events = ∀ α β. α -> [β];
315− geo_location = ∀ α β. α -> β;
315+ geo_location = ∀ α β. α -> [β];
316− geo_rss_events = ∀ α β. α -> β;
316+ geo_rss_events = ∀ α β. α -> [β];
317 geofency = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
317 geofency = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
318− geonetnz_quakes = ∀ α β. α -> β;
318+ geonetnz_quakes = ∀ α β. α -> [β];
319− geonetnz_volcano = ∀ α β. α -> β;
319+ geonetnz_volcano = ∀ α β. α -> [β];
320− gios = ∀ α β. α -> β;
320+ gios = ∀ α β. α -> [β];
321 github = ∀ α β. (α.PyGithub = β) => α -> [β];
321 github = ∀ α β. (α.PyGithub = β) => α -> [β];
322 gitlab_ci = ∀ α β. (α.python-gitlab = β) => α -> [β];
322 gitlab_ci = ∀ α β. (α.python-gitlab = β) => α -> [β];
323− gitter = ∀ α β. α -> β;
323+ gitter = ∀ α β. α -> [β];
324− glances = ∀ α β. α -> β;
324+ glances = ∀ α β. α -> [β];
325− gntp = ∀ α β. α -> β;
325+ gntp = ∀ α β. α -> [β];
326− goalfeed = ∀ α β. α -> β;
326+ goalfeed = ∀ α β. α -> [β];
327− gogogate2 = ∀ α β. α -> β;
327+ gogogate2 = ∀ α β. α -> [β];
328 google =
328 google =
329 ∀ α β.
329 ∀ α β.
330 ( α.google_api_python_client = β,
330 ( α.google_api_python_client = β,
@@ -334,45 +334,45 @@
334 α -> [β];
334 α -> [β];
335 google_assistant = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
335 google_assistant = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
336 google_cloud = ∀ α β. (α.google_cloud_texttospeech = β) => α -> [β];
336 google_cloud = ∀ α β. (α.google_cloud_texttospeech = β) => α -> [β];
337− google_domains = ∀ α β. α -> β;
337+ google_domains = ∀ α β. α -> [β];
338− google_maps = ∀ α β. α -> β;
338+ google_maps = ∀ α β. α -> [β];
339 google_pubsub = ∀ α β. (α.google_cloud_pubsub = β) => α -> [β];
339 google_pubsub = ∀ α β. (α.google_cloud_pubsub = β) => α -> [β];
340 google_translate = ∀ α β. (α.gtts-token = β) => α -> [β];
340 google_translate = ∀ α β. (α.gtts-token = β) => α -> [β];
341− google_travel_time = ∀ α β. α -> β;
341+ google_travel_time = ∀ α β. α -> [β];
342− google_wifi = ∀ α β. α -> β;
342+ google_wifi = ∀ α β. α -> [β];
343 gpmdp = ∀ α β. (α.websocket_client = β) => α -> [β];
343 gpmdp = ∀ α β. (α.websocket_client = β) => α -> [β];
344− gpsd = ∀ α β. α -> β;
344+ gpsd = ∀ α β. α -> [β];
345 gpslogger = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
345 gpslogger = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
346− graphite = ∀ α β. α -> β;
346+ graphite = ∀ α β. α -> [β];
347− greeneye_monitor = ∀ α β. α -> β;
347+ greeneye_monitor = ∀ α β. α -> [β];
348− greenwave = ∀ α β. α -> β;
348+ greenwave = ∀ α β. α -> [β];
349− griddy = ∀ α β. α -> β;
349+ griddy = ∀ α β. α -> [β];
350− group = ∀ α β. α -> β;
350+ group = ∀ α β. α -> [β];
351− growatt_server = ∀ α β. α -> β;
351+ growatt_server = ∀ α β. α -> [β];
352− gstreamer = ∀ α β. α -> β;
352+ gstreamer = ∀ α β. α -> [β];
353− gtfs = ∀ α β. α -> β;
353+ gtfs = ∀ α β. α -> [β];
354− guardian = ∀ α β. α -> β;
354+ guardian = ∀ α β. α -> [β];
355− habitica = ∀ α β. α -> β;
355+ habitica = ∀ α β. α -> [β];
356− hangouts = ∀ α β. α -> β;
356+ hangouts = ∀ α β. α -> [β];
357− harman_kardon_avr = ∀ α β. α -> β;
357+ harman_kardon_avr = ∀ α β. α -> [β];
358 harmony = ∀ α β. (α.aioharmony = β) => α -> [β];
358 harmony = ∀ α β. (α.aioharmony = β) => α -> [β];
359 hassio = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
359 hassio = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
360− haveibeenpwned = ∀ α β. α -> β;
360+ haveibeenpwned = ∀ α β. α -> [β];
361− hddtemp = ∀ α β. α -> β;
361+ hddtemp = ∀ α β. α -> [β];
362− hdmi_cec = ∀ α β. α -> β;
362+ hdmi_cec = ∀ α β. α -> [β];
363− heatmiser = ∀ α β. α -> β;
363+ heatmiser = ∀ α β. α -> [β];
364− heos = ∀ α β. α -> β;
364+ heos = ∀ α β. α -> [β];
365− here_travel_time = ∀ α β. α -> β;
365+ here_travel_time = ∀ α β. α -> [β];
366− hikvision = ∀ α β. α -> β;
366+ hikvision = ∀ α β. α -> [β];
367− hikvisioncam = ∀ α β. α -> β;
367+ hikvisioncam = ∀ α β. α -> [β];
368− hisense_aehw4a1 = ∀ α β. α -> β;
368+ hisense_aehw4a1 = ∀ α β. α -> [β];
369 history = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
369 history = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
370 history_stats = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
370 history_stats = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
371− hitron_coda = ∀ α β. α -> β;
371+ hitron_coda = ∀ α β. α -> [β];
372− hive = ∀ α β. α -> β;
372+ hive = ∀ α β. α -> [β];
373− hlk_sw16 = ∀ α β. α -> β;
373+ hlk_sw16 = ∀ α β. α -> [β];
374 home_connect = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
374 home_connect = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
375− homeassistant = ∀ α β. α -> β;
375+ homeassistant = ∀ α β. α -> [β];
376 homekit =
376 homekit =
377 ∀ α β.
377 ∀ α β.
378 ( α.HAP-python = β,
378 ( α.HAP-python = β,
@@ -385,152 +385,152 @@
385 homekit_controller =
385 homekit_controller =
386 ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
386 ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
387 homematic = ∀ α β. (α.pyhomematic = β) => α -> [β];
387 homematic = ∀ α β. (α.pyhomematic = β) => α -> [β];
388− homematicip_cloud = ∀ α β. α -> β;
388+ homematicip_cloud = ∀ α β. α -> [β];
389− homeworks = ∀ α β. α -> β;
389+ homeworks = ∀ α β. α -> [β];
390− honeywell = ∀ α β. α -> β;
390+ honeywell = ∀ α β. α -> [β];
391− horizon = ∀ α β. α -> β;
391+ horizon = ∀ α β. α -> [β];
392− hp_ilo = ∀ α β. α -> β;
392+ hp_ilo = ∀ α β. α -> [β];
393 html5 = ∀ α β. (α.aiohttp-cors = β, α.pywebpush = β) => α -> [β];
393 html5 = ∀ α β. (α.aiohttp-cors = β, α.pywebpush = β) => α -> [β];
394 http = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
394 http = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
395− htu21d = ∀ α β. α -> β;
395+ htu21d = ∀ α β. α -> [β];
396 huawei_lte = ∀ α β. (α.getmac = β, α.stringcase = β) => α -> [β];
396 huawei_lte = ∀ α β. (α.getmac = β, α.stringcase = β) => α -> [β];
397− huawei_router = ∀ α β. α -> β;
397+ huawei_router = ∀ α β. α -> [β];
398 hue = ∀ α β. (α.aiohue = β) => α -> [β];
398 hue = ∀ α β. (α.aiohue = β) => α -> [β];
399− humidifier = ∀ α β. α -> β;
399+ humidifier = ∀ α β. α -> [β];
400− hunterdouglas_powerview = ∀ α β. α -> β;
400+ hunterdouglas_powerview = ∀ α β. α -> [β];
401− hvv_departures = ∀ α β. α -> β;
401+ hvv_departures = ∀ α β. α -> [β];
402− hydrawise = ∀ α β. α -> β;
402+ hydrawise = ∀ α β. α -> [β];
403− hyperion = ∀ α β. α -> β;
403+ hyperion = ∀ α β. α -> [β];
404− ialarm = ∀ α β. α -> β;
404+ ialarm = ∀ α β. α -> [β];
405− iammeter = ∀ α β. α -> β;
405+ iammeter = ∀ α β. α -> [β];
406− iaqualink = ∀ α β. α -> β;
406+ iaqualink = ∀ α β. α -> [β];
407 icloud = ∀ α β. (α.pyicloud = β) => α -> [β];
407 icloud = ∀ α β. (α.pyicloud = β) => α -> [β];
408− idteck_prox = ∀ α β. α -> β;
408+ idteck_prox = ∀ α β. α -> [β];
409 ifttt = ∀ α β. (α.aiohttp-cors = β, α.pyfttt = β) => α -> [β];
409 ifttt = ∀ α β. (α.aiohttp-cors = β, α.pyfttt = β) => α -> [β];
410− iglo = ∀ α β. α -> β;
410+ iglo = ∀ α β. α -> [β];
411− ign_sismologia = ∀ α β. α -> β;
411+ ign_sismologia = ∀ α β. α -> [β];
412 ihc = ∀ α β. (α.defusedxml = β) => α -> [β];
412 ihc = ∀ α β. (α.defusedxml = β) => α -> [β];
413 image_processing = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
413 image_processing = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
414− imap = ∀ α β. α -> β;
414+ imap = ∀ α β. α -> [β];
415− imap_email_content = ∀ α β. α -> β;
415+ imap_email_content = ∀ α β. α -> [β];
416− incomfort = ∀ α β. α -> β;
416+ incomfort = ∀ α β. α -> [β];
417 influxdb = ∀ α β. (α.influxdb = β, α.influxdb-client = β) => α -> [β];
417 influxdb = ∀ α β. (α.influxdb = β, α.influxdb-client = β) => α -> [β];
418− input_boolean = ∀ α β. α -> β;
418+ input_boolean = ∀ α β. α -> [β];
419− input_datetime = ∀ α β. α -> β;
419+ input_datetime = ∀ α β. α -> [β];
420− input_number = ∀ α β. α -> β;
420+ input_number = ∀ α β. α -> [β];
421− input_select = ∀ α β. α -> β;
421+ input_select = ∀ α β. α -> [β];
422− input_text = ∀ α β. α -> β;
422+ input_text = ∀ α β. α -> [β];
423− insteon = ∀ α β. α -> β;
423+ insteon = ∀ α β. α -> [β];
424− integration = ∀ α β. α -> β;
424+ integration = ∀ α β. α -> [β];
425 intent = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
425 intent = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
426− intent_script = ∀ α β. α -> β;
426+ intent_script = ∀ α β. α -> [β];
427− intesishome = ∀ α β. α -> β;
427+ intesishome = ∀ α β. α -> [β];
428 ios = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
428 ios = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
429− iota = ∀ α β. α -> β;
429+ iota = ∀ α β. α -> [β];
430− iperf3 = ∀ α β. α -> β;
430+ iperf3 = ∀ α β. α -> [β];
431− ipma = ∀ α β. α -> β;
431+ ipma = ∀ α β. α -> [β];
432 ipp = ∀ α β. (α.pyipp = β) => α -> [β];
432 ipp = ∀ α β. (α.pyipp = β) => α -> [β];
433 iqvia = ∀ α β. (α.numpy = β) => α -> [β];
433 iqvia = ∀ α β. (α.numpy = β) => α -> [β];
434− irish_rail_transport = ∀ α β. α -> β;
434+ irish_rail_transport = ∀ α β. α -> [β];
435− islamic_prayer_times = ∀ α β. α -> β;
435+ islamic_prayer_times = ∀ α β. α -> [β];
436− iss = ∀ α β. α -> β;
436+ iss = ∀ α β. α -> [β];
437− isy994 = ∀ α β. α -> β;
437+ isy994 = ∀ α β. α -> [β];
438− itach = ∀ α β. α -> β;
438+ itach = ∀ α β. α -> [β];
439− itunes = ∀ α β. α -> β;
439+ itunes = ∀ α β. α -> [β];
440− izone = ∀ α β. α -> β;
440+ izone = ∀ α β. α -> [β];
441− jewish_calendar = ∀ α β. α -> β;
441+ jewish_calendar = ∀ α β. α -> [β];
442− joaoapps_join = ∀ α β. α -> β;
442+ joaoapps_join = ∀ α β. α -> [β];
443− juicenet = ∀ α β. α -> β;
443+ juicenet = ∀ α β. α -> [β];
444− kaiterra = ∀ α β. α -> β;
444+ kaiterra = ∀ α β. α -> [β];
445− kankun = ∀ α β. α -> β;
445+ kankun = ∀ α β. α -> [β];
446− keba = ∀ α β. α -> β;
446+ keba = ∀ α β. α -> [β];
447− keenetic_ndms2 = ∀ α β. α -> β;
447+ keenetic_ndms2 = ∀ α β. α -> [β];
448 kef = ∀ α β. (α.getmac = β) => α -> [β];
448 kef = ∀ α β. (α.getmac = β) => α -> [β];
449− keyboard = ∀ α β. α -> β;
449+ keyboard = ∀ α β. α -> [β];
450 keyboard_remote = ∀ α β. (α.evdev = β) => α -> [β];
450 keyboard_remote = ∀ α β. (α.evdev = β) => α -> [β];
451− kira = ∀ α β. α -> β;
451+ kira = ∀ α β. α -> [β];
452− kiwi = ∀ α β. α -> β;
452+ kiwi = ∀ α β. α -> [β];
453− knx = ∀ α β. α -> β;
453+ knx = ∀ α β. α -> [β];
454 kodi = ∀ α β. (α.jsonrpc-async = β, α.jsonrpc-websocket = β) => α -> [β];
454 kodi = ∀ α β. (α.jsonrpc-async = β, α.jsonrpc-websocket = β) => α -> [β];
455 konnected = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
455 konnected = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
456− kwb = ∀ α β. α -> β;
456+ kwb = ∀ α β. α -> [β];
457− lacrosse = ∀ α β. α -> β;
457+ lacrosse = ∀ α β. α -> [β];
458− lametric = ∀ α β. α -> β;
458+ lametric = ∀ α β. α -> [β];
459− lannouncer = ∀ α β. α -> β;
459+ lannouncer = ∀ α β. α -> [β];
460 lastfm = ∀ α β. (α.pylast = β) => α -> [β];
460 lastfm = ∀ α β. (α.pylast = β) => α -> [β];
461− launch_library = ∀ α β. α -> β;
461+ launch_library = ∀ α β. α -> [β];
462− lcn = ∀ α β. α -> β;
462+ lcn = ∀ α β. α -> [β];
463− lg_netcast = ∀ α β. α -> β;
463+ lg_netcast = ∀ α β. α -> [β];
464− lg_soundbar = ∀ α β. α -> β;
464+ lg_soundbar = ∀ α β. α -> [β];
465− life360 = ∀ α β. α -> β;
465+ life360 = ∀ α β. α -> [β];
466 lifx = ∀ α β. (α.aiolifx = β, α.aiolifx-effects = β) => α -> [β];
466 lifx = ∀ α β. (α.aiolifx = β, α.aiolifx-effects = β) => α -> [β];
467− lifx_cloud = ∀ α β. α -> β;
467+ lifx_cloud = ∀ α β. α -> [β];
468− lifx_legacy = ∀ α β. α -> β;
468+ lifx_legacy = ∀ α β. α -> [β];
469− light = ∀ α β. α -> β;
469+ light = ∀ α β. α -> [β];
470− lightwave = ∀ α β. α -> β;
470+ lightwave = ∀ α β. α -> [β];
471 limitlessled = ∀ α β. (α.limitlessled = β) => α -> [β];
471 limitlessled = ∀ α β. (α.limitlessled = β) => α -> [β];
472− linksys_smart = ∀ α β. α -> β;
472+ linksys_smart = ∀ α β. α -> [β];
473 linode = ∀ α β. (α.linode-api = β) => α -> [β];
473 linode = ∀ α β. (α.linode-api = β) => α -> [β];
474 linux_battery = ∀ α β. (α.batinfo = β) => α -> [β];
474 linux_battery = ∀ α β. (α.batinfo = β) => α -> [β];
475− lirc = ∀ α β. α -> β;
475+ lirc = ∀ α β. α -> [β];
476− litejet = ∀ α β. α -> β;
476+ litejet = ∀ α β. α -> [β];
477− llamalab_automate = ∀ α β. α -> β;
477+ llamalab_automate = ∀ α β. α -> [β];
478− local_file = ∀ α β. α -> β;
478+ local_file = ∀ α β. α -> [β];
479− local_ip = ∀ α β. α -> β;
479+ local_ip = ∀ α β. α -> [β];
480 locative = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
480 locative = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
481− lock = ∀ α β. α -> β;
481+ lock = ∀ α β. α -> [β];
482 logbook = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
482 logbook = ∀ α β. (α.aiohttp-cors = β, α.sqlalchemy = β) => α -> [β];
483− logentries = ∀ α β. α -> β;
483+ logentries = ∀ α β. α -> [β];
484− logger = ∀ α β. α -> β;
484+ logger = ∀ α β. α -> [β];
485 logi_circle = ∀ α β. (α.aiohttp-cors = β, α.ha-ffmpeg = β) => α -> [β];
485 logi_circle = ∀ α β. (α.aiohttp-cors = β, α.ha-ffmpeg = β) => α -> [β];
486− london_air = ∀ α β. α -> β;
486+ london_air = ∀ α β. α -> [β];
487− london_underground = ∀ α β. α -> β;
487+ london_underground = ∀ α β. α -> [β];
488− loopenergy = ∀ α β. α -> β;
488+ loopenergy = ∀ α β. α -> [β];
489− lovelace = ∀ α β. α -> β;
489+ lovelace = ∀ α β. α -> [β];
490 luci = ∀ α β. (α.openwrt-luci-rpc = β) => α -> [β];
490 luci = ∀ α β. (α.openwrt-luci-rpc = β) => α -> [β];
491 luftdaten = ∀ α β. (α.luftdaten = β) => α -> [β];
491 luftdaten = ∀ α β. (α.luftdaten = β) => α -> [β];
492− lupusec = ∀ α β. α -> β;
492+ lupusec = ∀ α β. α -> [β];
493− lutron = ∀ α β. α -> β;
493+ lutron = ∀ α β. α -> [β];
494− lutron_caseta = ∀ α β. α -> β;
494+ lutron_caseta = ∀ α β. α -> [β];
495− lw12wifi = ∀ α β. α -> β;
495+ lw12wifi = ∀ α β. α -> [β];
496− lyft = ∀ α β. α -> β;
496+ lyft = ∀ α β. α -> [β];
497− magicseaweed = ∀ α β. α -> β;
497+ magicseaweed = ∀ α β. α -> [β];
498 mailbox = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
498 mailbox = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
499 mailgun = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
499 mailgun = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
500− manual = ∀ α β. α -> β;
500+ manual = ∀ α β. α -> [β];
501 manual_mqtt = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
501 manual_mqtt = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
502 map = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
502 map = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
503− marytts = ∀ α β. α -> β;
503+ marytts = ∀ α β. α -> [β];
504− mastodon = ∀ α β. α -> β;
504+ mastodon = ∀ α β. α -> [β];
505 matrix = ∀ α β. (α.matrix-client = β) => α -> [β];
505 matrix = ∀ α β. (α.matrix-client = β) => α -> [β];
506− maxcube = ∀ α β. α -> β;
506+ maxcube = ∀ α β. α -> [β];
507− mcp23017 = ∀ α β. α -> β;
507+ mcp23017 = ∀ α β. α -> [β];
508 media_extractor =
508 media_extractor =
509 ∀ α β. (α.aiohttp-cors = β, α.youtube-dl-light = β) => α -> [β];
509 ∀ α β. (α.aiohttp-cors = β, α.youtube-dl-light = β) => α -> [β];
510 media_player = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
510 media_player = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
511− mediaroom = ∀ α β. α -> β;
511+ mediaroom = ∀ α β. α -> [β];
512− melcloud = ∀ α β. α -> β;
512+ melcloud = ∀ α β. α -> [β];
513− melissa = ∀ α β. α -> β;
513+ melissa = ∀ α β. α -> [β];
514 meraki = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
514 meraki = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
515− message_bird = ∀ α β. α -> β;
515+ message_bird = ∀ α β. α -> [β];
516 met = ∀ α β. (α.pymetno = β) => α -> [β];
516 met = ∀ α β. (α.pymetno = β) => α -> [β];
517− meteo_france = ∀ α β. α -> β;
517+ meteo_france = ∀ α β. α -> [β];
518− meteoalarm = ∀ α β. α -> β;
518+ meteoalarm = ∀ α β. α -> [β];
519− metoffice = ∀ α β. α -> β;
519+ metoffice = ∀ α β. α -> [β];
520− mfi = ∀ α β. α -> β;
520+ mfi = ∀ α β. α -> [β];
521− mhz19 = ∀ α β. α -> β;
521+ mhz19 = ∀ α β. α -> [β];
522− microsoft = ∀ α β. α -> β;
522+ microsoft = ∀ α β. α -> [β];
523 microsoft_face = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
523 microsoft_face = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
524 microsoft_face_detect = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
524 microsoft_face_detect = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
525 microsoft_face_identify = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
525 microsoft_face_identify = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
526 miflora = ∀ α β. (α.bluepy = β) => α -> [β];
526 miflora = ∀ α β. (α.bluepy = β) => α -> [β];
527− mikrotik = ∀ α β. α -> β;
527+ mikrotik = ∀ α β. α -> [β];
528− mill = ∀ α β. α -> β;
528+ mill = ∀ α β. α -> [β];
529− min_max = ∀ α β. α -> β;
529+ min_max = ∀ α β. α -> [β];
530 minecraft_server = ∀ α β. (α.aiodns = β, α.getmac = β) => α -> [β];
530 minecraft_server = ∀ α β. (α.aiodns = β, α.getmac = β) => α -> [β];
531 minio = ∀ α β. (α.minio = β) => α -> [β];
531 minio = ∀ α β. (α.minio = β) => α -> [β];
532− mitemp_bt = ∀ α β. α -> β;
532+ mitemp_bt = ∀ α β. α -> [β];
533− mjpeg = ∀ α β. α -> β;
533+ mjpeg = ∀ α β. α -> [β];
534 mobile_app =
534 mobile_app =
535 ∀ α β.
535 ∀ α β.
536 ( α.aiohttp-cors = β,
536 ( α.aiohttp-cors = β,
@@ -539,13 +539,13 @@
539 α.pynacl = β
539 α.pynacl = β
540 ) =>
540 ) =>
541 α -> [β];
541 α -> [β];
542− mochad = ∀ α β. α -> β;
542+ mochad = ∀ α β. α -> [β];
543− modbus = ∀ α β. α -> β;
543+ modbus = ∀ α β. α -> [β];
544− modem_callerid = ∀ α β. α -> β;
544+ modem_callerid = ∀ α β. α -> [β];
545− mold_indicator = ∀ α β. α -> β;
545+ mold_indicator = ∀ α β. α -> [β];
546− monoprice = ∀ α β. α -> β;
546+ monoprice = ∀ α β. α -> [β];
547− moon = ∀ α β. α -> β;
547+ moon = ∀ α β. α -> [β];
548− mpchc = ∀ α β. α -> β;
548+ mpchc = ∀ α β. α -> [β];
549 mpd = ∀ α β. (α.mpd2 = β) => α -> [β];
549 mpd = ∀ α β. (α.mpd2 = β) => α -> [β];
550 mqtt = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
550 mqtt = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
551 mqtt_eventstream =
551 mqtt_eventstream =
@@ -554,89 +554,89 @@
554 mqtt_room = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
554 mqtt_room = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
555 mqtt_statestream =
555 mqtt_statestream =
556 ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
556 ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
557− msteams = ∀ α β. α -> β;
557+ msteams = ∀ α β. α -> [β];
558 mvglive = ∀ α β. (α.PyMVGLive = β) => α -> [β];
558 mvglive = ∀ α β. (α.PyMVGLive = β) => α -> [β];
559− mychevy = ∀ α β. α -> β;
559+ mychevy = ∀ α β. α -> [β];
560− mycroft = ∀ α β. α -> β;
560+ mycroft = ∀ α β. α -> [β];
561− myq = ∀ α β. α -> β;
561+ myq = ∀ α β. α -> [β];
562 mysensors = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
562 mysensors = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
563 mystrom = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
563 mystrom = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
564− mythicbeastsdns = ∀ α β. α -> β;
564+ mythicbeastsdns = ∀ α β. α -> [β];
565− n26 = ∀ α β. α -> β;
565+ n26 = ∀ α β. α -> [β];
566− nad = ∀ α β. α -> β;
566+ nad = ∀ α β. α -> [β];
567 namecheapdns = ∀ α β. (α.defusedxml = β) => α -> [β];
567 namecheapdns = ∀ α β. (α.defusedxml = β) => α -> [β];
568 nanoleaf = ∀ α β. (α.pynanoleaf = β) => α -> [β];
568 nanoleaf = ∀ α β. (α.pynanoleaf = β) => α -> [β];
569 neato = ∀ α β. (α.pybotvac = β) => α -> [β];
569 neato = ∀ α β. (α.pybotvac = β) => α -> [β];
570− nederlandse_spoorwegen = ∀ α β. α -> β;
570+ nederlandse_spoorwegen = ∀ α β. α -> [β];
571− nello = ∀ α β. α -> β;
571+ nello = ∀ α β. α -> [β];
572− ness_alarm = ∀ α β. α -> β;
572+ ness_alarm = ∀ α β. α -> [β];
573− nest = ∀ α β. α -> β;
573+ nest = ∀ α β. α -> [β];
574 netatmo =
574 netatmo =
575 ∀ α β.
575 ∀ α β.
576 (α.aiohttp-cors = β, α.hass-nabucasa = β, α.pyatmo = β) => α -> [β];
576 (α.aiohttp-cors = β, α.hass-nabucasa = β, α.pyatmo = β) => α -> [β];
577− netdata = ∀ α β. α -> β;
577+ netdata = ∀ α β. α -> [β];
578− netgear = ∀ α β. α -> β;
578+ netgear = ∀ α β. α -> [β];
579− netgear_lte = ∀ α β. α -> β;
579+ netgear_lte = ∀ α β. α -> [β];
580 netio = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
580 netio = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
581− neurio_energy = ∀ α β. α -> β;
581+ neurio_energy = ∀ α β. α -> [β];
582− nexia = ∀ α β. α -> β;
582+ nexia = ∀ α β. α -> [β];
583− nextbus = ∀ α β. α -> β;
583+ nextbus = ∀ α β. α -> [β];
584− nextcloud = ∀ α β. α -> β;
584+ nextcloud = ∀ α β. α -> [β];
585− nfandroidtv = ∀ α β. α -> β;
585+ nfandroidtv = ∀ α β. α -> [β];
586− niko_home_control = ∀ α β. α -> β;
586+ niko_home_control = ∀ α β. α -> [β];
587− nilu = ∀ α β. α -> β;
587+ nilu = ∀ α β. α -> [β];
588− nissan_leaf = ∀ α β. α -> β;
588+ nissan_leaf = ∀ α β. α -> [β];
589 nmap_tracker = ∀ α β. (α.getmac = β) => α -> [β];
589 nmap_tracker = ∀ α β. (α.getmac = β) => α -> [β];
590− nmbs = ∀ α β. α -> β;
590+ nmbs = ∀ α β. α -> [β];
591− no_ip = ∀ α β. α -> β;
591+ no_ip = ∀ α β. α -> [β];
592− noaa_tides = ∀ α β. α -> β;
592+ noaa_tides = ∀ α β. α -> [β];
593 norway_air = ∀ α β. (α.pymetno = β) => α -> [β];
593 norway_air = ∀ α β. (α.pymetno = β) => α -> [β];
594− notify = ∀ α β. α -> β;
594+ notify = ∀ α β. α -> [β];
595− notify_events = ∀ α β. α -> β;
595+ notify_events = ∀ α β. α -> [β];
596− notion = ∀ α β. α -> β;
596+ notion = ∀ α β. α -> [β];
597− nsw_fuel_station = ∀ α β. α -> β;
597+ nsw_fuel_station = ∀ α β. α -> [β];
598− nsw_rural_fire_service_feed = ∀ α β. α -> β;
598+ nsw_rural_fire_service_feed = ∀ α β. α -> [β];
599− nuheat = ∀ α β. α -> β;
599+ nuheat = ∀ α β. α -> [β];
600− nuimo_controller = ∀ α β. α -> β;
600+ nuimo_controller = ∀ α β. α -> [β];
601− nuki = ∀ α β. α -> β;
601+ nuki = ∀ α β. α -> [β];
602− numato = ∀ α β. α -> β;
602+ numato = ∀ α β. α -> [β];
603− nut = ∀ α β. α -> β;
603+ nut = ∀ α β. α -> [β];
604− nws = ∀ α β. α -> β;
604+ nws = ∀ α β. α -> [β];
605− nx584 = ∀ α β. α -> β;
605+ nx584 = ∀ α β. α -> [β];
606− nzbget = ∀ α β. α -> β;
606+ nzbget = ∀ α β. α -> [β];
607− oasa_telematics = ∀ α β. α -> β;
607+ oasa_telematics = ∀ α β. α -> [β];
608− obihai = ∀ α β. α -> β;
608+ obihai = ∀ α β. α -> [β];
609 octoprint =
609 octoprint =
610 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
610 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
611− oem = ∀ α β. α -> β;
611+ oem = ∀ α β. α -> [β];
612 ohmconnect = ∀ α β. (α.defusedxml = β) => α -> [β];
612 ohmconnect = ∀ α β. (α.defusedxml = β) => α -> [β];
613− ombi = ∀ α β. α -> β;
613+ ombi = ∀ α β. α -> [β];
614 onboarding = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
614 onboarding = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
615− onewire = ∀ α β. α -> β;
615+ onewire = ∀ α β. α -> [β];
616 onkyo = ∀ α β. (α.onkyo-eiscp = β) => α -> [β];
616 onkyo = ∀ α β. (α.onkyo-eiscp = β) => α -> [β];
617 onvif = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
617 onvif = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
618− openalpr_cloud = ∀ α β. α -> β;
618+ openalpr_cloud = ∀ α β. α -> [β];
619− openalpr_local = ∀ α β. α -> β;
619+ openalpr_local = ∀ α β. α -> [β];
620 opencv = ∀ α β. (α.numpy = β) => α -> [β];
620 opencv = ∀ α β. (α.numpy = β) => α -> [β];
621− openerz = ∀ α β. α -> β;
621+ openerz = ∀ α β. α -> [β];
622− openevse = ∀ α β. α -> β;
622+ openevse = ∀ α β. α -> [β];
623− openexchangerates = ∀ α β. α -> β;
623+ openexchangerates = ∀ α β. α -> [β];
624− opengarage = ∀ α β. α -> β;
624+ opengarage = ∀ α β. α -> [β];
625− openhardwaremonitor = ∀ α β. α -> β;
625+ openhardwaremonitor = ∀ α β. α -> [β];
626− openhome = ∀ α β. α -> β;
626+ openhome = ∀ α β. α -> [β];
627− opensensemap = ∀ α β. α -> β;
627+ opensensemap = ∀ α β. α -> [β];
628− opensky = ∀ α β. α -> β;
628+ opensky = ∀ α β. α -> [β];
629− opentherm_gw = ∀ α β. α -> β;
629+ opentherm_gw = ∀ α β. α -> [β];
630− openuv = ∀ α β. α -> β;
630+ openuv = ∀ α β. α -> [β];
631 openweathermap = ∀ α β. (α.pyowm = β) => α -> [β];
631 openweathermap = ∀ α β. (α.pyowm = β) => α -> [β];
632− opnsense = ∀ α β. α -> β;
632+ opnsense = ∀ α β. α -> [β];
633− opple = ∀ α β. α -> β;
633+ opple = ∀ α β. α -> [β];
634− orangepi_gpio = ∀ α β. α -> β;
634+ orangepi_gpio = ∀ α β. α -> [β];
635− oru = ∀ α β. α -> β;
635+ oru = ∀ α β. α -> [β];
636− orvibo = ∀ α β. α -> β;
636+ orvibo = ∀ α β. α -> [β];
637− osramlightify = ∀ α β. α -> β;
637+ osramlightify = ∀ α β. α -> [β];
638 otp = ∀ α β. (α.pyotp = β) => α -> [β];
638 otp = ∀ α β. (α.pyotp = β) => α -> [β];
639− ovo_energy = ∀ α β. α -> β;
639+ ovo_energy = ∀ α β. α -> [β];
640 owntracks =
640 owntracks =
641 ∀ α β.
641 ∀ α β.
642 ( α.aiohttp-cors = β,
642 ( α.aiohttp-cors = β,
@@ -646,24 +646,24 @@
646 ) =>
646 ) =>
647 α -> [β];
647 α -> [β];
648 ozw = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
648 ozw = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
649− panasonic_bluray = ∀ α β. α -> β;
649+ panasonic_bluray = ∀ α β. α -> [β];
650− panasonic_viera = ∀ α β. α -> β;
650+ panasonic_viera = ∀ α β. α -> [β];
651 pandora = ∀ α β. (α.pexpect = β) => α -> [β];
651 pandora = ∀ α β. (α.pexpect = β) => α -> [β];
652 panel_custom = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
652 panel_custom = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
653 panel_iframe = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
653 panel_iframe = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
654− pcal9535a = ∀ α β. α -> β;
654+ pcal9535a = ∀ α β. α -> [β];
655− pencom = ∀ α β. α -> β;
655+ pencom = ∀ α β. α -> [β];
656− persistent_notification = ∀ α β. α -> β;
656+ persistent_notification = ∀ α β. α -> [β];
657− person = ∀ α β. α -> β;
657+ person = ∀ α β. α -> [β];
658− philips_js = ∀ α β. α -> β;
658+ philips_js = ∀ α β. α -> [β];
659− pi4ioe5v9xxxx = ∀ α β. α -> β;
659+ pi4ioe5v9xxxx = ∀ α β. α -> [β];
660− pi_hole = ∀ α β. α -> β;
660+ pi_hole = ∀ α β. α -> [β];
661− picotts = ∀ α β. α -> β;
661+ picotts = ∀ α β. α -> [β];
662− piglow = ∀ α β. α -> β;
662+ piglow = ∀ α β. α -> [β];
663− pilight = ∀ α β. α -> β;
663+ pilight = ∀ α β. α -> [β];
664− ping = ∀ α β. α -> β;
664+ ping = ∀ α β. α -> [β];
665− pioneer = ∀ α β. α -> β;
665+ pioneer = ∀ α β. α -> [β];
666− pjlink = ∀ α β. α -> β;
666+ pjlink = ∀ α β. α -> [β];
667 plaato = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
667 plaato = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
668 plant = ∀ α β. (α.sqlalchemy = β) => α -> [β];
668 plant = ∀ α β. (α.sqlalchemy = β) => α -> [β];
669 plex =
669 plex =
@@ -675,158 +675,158 @@
675 α.pysonos = β
675 α.pysonos = β
676 ) =>
676 ) =>
677 α -> [β];
677 α -> [β];
678− plugwise = ∀ α β. α -> β;
678+ plugwise = ∀ α β. α -> [β];
679− plum_lightpad = ∀ α β. α -> β;
679+ plum_lightpad = ∀ α β. α -> [β];
680− pocketcasts = ∀ α β. α -> β;
680+ pocketcasts = ∀ α β. α -> [β];
681 point = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
681 point = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
682− poolsense = ∀ α β. α -> β;
682+ poolsense = ∀ α β. α -> [β];
683− powerwall = ∀ α β. α -> β;
683+ powerwall = ∀ α β. α -> [β];
684− prezzibenzina = ∀ α β. α -> β;
684+ prezzibenzina = ∀ α β. α -> [β];
685− proliphix = ∀ α β. α -> β;
685+ proliphix = ∀ α β. α -> [β];
686 prometheus =
686 prometheus =
687 ∀ α β. (α.aiohttp-cors = β, α.prometheus_client = β) => α -> [β];
687 ∀ α β. (α.aiohttp-cors = β, α.prometheus_client = β) => α -> [β];
688− prowl = ∀ α β. α -> β;
688+ prowl = ∀ α β. α -> [β];
689− proximity = ∀ α β. α -> β;
689+ proximity = ∀ α β. α -> [β];
690− proxmoxve = ∀ α β. α -> β;
690+ proxmoxve = ∀ α β. α -> [β];
691 proxy = ∀ α β. (α.pillow = β) => α -> [β];
691 proxy = ∀ α β. (α.pillow = β) => α -> [β];
692− ps4 = ∀ α β. α -> β;
692+ ps4 = ∀ α β. α -> [β];
693− ptvsd = ∀ α β. α -> β;
693+ ptvsd = ∀ α β. α -> [β];
694 pulseaudio_loopback = ∀ α β. (α.pulsectl = β) => α -> [β];
694 pulseaudio_loopback = ∀ α β. (α.pulsectl = β) => α -> [β];
695 push = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
695 push = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
696 pushbullet = ∀ α β. (α.pushbullet = β) => α -> [β];
696 pushbullet = ∀ α β. (α.pushbullet = β) => α -> [β];
697 pushover = ∀ α β. (α.pushover-complete = β) => α -> [β];
697 pushover = ∀ α β. (α.pushover-complete = β) => α -> [β];
698− pushsafer = ∀ α β. α -> β;
698+ pushsafer = ∀ α β. α -> [β];
699 pvoutput = ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
699 pvoutput = ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
700− pvpc_hourly_pricing = ∀ α β. α -> β;
700+ pvpc_hourly_pricing = ∀ α β. α -> [β];
701− pyload = ∀ α β. α -> β;
701+ pyload = ∀ α β. α -> [β];
702 python_script = ∀ α β. (α.restrictedpython = β) => α -> [β];
702 python_script = ∀ α β. (α.restrictedpython = β) => α -> [β];
703− qbittorrent = ∀ α β. α -> β;
703+ qbittorrent = ∀ α β. α -> [β];
704− qld_bushfire = ∀ α β. α -> β;
704+ qld_bushfire = ∀ α β. α -> [β];
705− qnap = ∀ α β. α -> β;
705+ qnap = ∀ α β. α -> [β];
706 qrcode = ∀ α β. (α.pillow = β) => α -> [β];
706 qrcode = ∀ α β. (α.pillow = β) => α -> [β];
707− quantum_gateway = ∀ α β. α -> β;
707+ quantum_gateway = ∀ α β. α -> [β];
708− qvr_pro = ∀ α β. α -> β;
708+ qvr_pro = ∀ α β. α -> [β];
709− qwikswitch = ∀ α β. α -> β;
709+ qwikswitch = ∀ α β. α -> [β];
710 rachio = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
710 rachio = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
711− radarr = ∀ α β. α -> β;
711+ radarr = ∀ α β. α -> [β];
712− radiotherm = ∀ α β. α -> β;
712+ radiotherm = ∀ α β. α -> [β];
713− rainbird = ∀ α β. α -> β;
713+ rainbird = ∀ α β. α -> [β];
714− raincloud = ∀ α β. α -> β;
714+ raincloud = ∀ α β. α -> [β];
715− rainforest_eagle = ∀ α β. α -> β;
715+ rainforest_eagle = ∀ α β. α -> [β];
716− rainmachine = ∀ α β. α -> β;
716+ rainmachine = ∀ α β. α -> [β];
717− random = ∀ α β. α -> β;
717+ random = ∀ α β. α -> [β];
718− raspihats = ∀ α β. α -> β;
718+ raspihats = ∀ α β. α -> [β];
719− raspyrfm = ∀ α β. α -> β;
719+ raspyrfm = ∀ α β. α -> [β];
720− recollect_waste = ∀ α β. α -> β;
720+ recollect_waste = ∀ α β. α -> [β];
721 recorder = ∀ α β. (α.sqlalchemy = β) => α -> [β];
721 recorder = ∀ α β. (α.sqlalchemy = β) => α -> [β];
722− recswitch = ∀ α β. α -> β;
722+ recswitch = ∀ α β. α -> [β];
723 reddit = ∀ α β. (α.praw = β) => α -> [β];
723 reddit = ∀ α β. (α.praw = β) => α -> [β];
724− rejseplanen = ∀ α β. α -> β;
724+ rejseplanen = ∀ α β. α -> [β];
725 remember_the_milk = ∀ α β. (α.httplib2 = β) => α -> [β];
725 remember_the_milk = ∀ α β. (α.httplib2 = β) => α -> [β];
726− remote = ∀ α β. α -> β;
726+ remote = ∀ α β. α -> [β];
727− remote_rpi_gpio = ∀ α β. α -> β;
727+ remote_rpi_gpio = ∀ α β. α -> [β];
728− repetier = ∀ α β. α -> β;
728+ repetier = ∀ α β. α -> [β];
729 rest = ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
729 rest = ∀ α β. (α.jsonpath = β, α.xmltodict = β) => α -> [β];
730− rest_command = ∀ α β. α -> β;
730+ rest_command = ∀ α β. α -> [β];
731− rflink = ∀ α β. α -> β;
731+ rflink = ∀ α β. α -> [β];
732− rfxtrx = ∀ α β. α -> β;
732+ rfxtrx = ∀ α β. α -> [β];
733 ring = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
733 ring = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
734− ripple = ∀ α β. α -> β;
734+ ripple = ∀ α β. α -> [β];
735 rmvtransport = ∀ α β. (α.PyRMVtransport = β) => α -> [β];
735 rmvtransport = ∀ α β. (α.PyRMVtransport = β) => α -> [β];
736− rocketchat = ∀ α β. α -> β;
736+ rocketchat = ∀ α β. α -> [β];
737− roku = ∀ α β. α -> β;
737+ roku = ∀ α β. α -> [β];
738− roomba = ∀ α β. α -> β;
738+ roomba = ∀ α β. α -> [β];
739 route53 = ∀ α β. (α.boto3 = β) => α -> [β];
739 route53 = ∀ α β. (α.boto3 = β) => α -> [β];
740− rova = ∀ α β. α -> β;
740+ rova = ∀ α β. α -> [β];
741− rpi_camera = ∀ α β. α -> β;
741+ rpi_camera = ∀ α β. α -> [β];
742− rpi_gpio = ∀ α β. α -> β;
742+ rpi_gpio = ∀ α β. α -> [β];
743− rpi_gpio_pwm = ∀ α β. α -> β;
743+ rpi_gpio_pwm = ∀ α β. α -> [β];
744− rpi_pfio = ∀ α β. α -> β;
744+ rpi_pfio = ∀ α β. α -> [β];
745− rpi_rf = ∀ α β. α -> β;
745+ rpi_rf = ∀ α β. α -> [β];
746 rss_feed_template = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
746 rss_feed_template = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
747− rtorrent = ∀ α β. α -> β;
747+ rtorrent = ∀ α β. α -> [β];
748− russound_rio = ∀ α β. α -> β;
748+ russound_rio = ∀ α β. α -> [β];
749− russound_rnet = ∀ α β. α -> β;
749+ russound_rnet = ∀ α β. α -> [β];
750 sabnzbd =
750 sabnzbd =
751 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
751 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
752 safe_mode = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
752 safe_mode = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
753− saj = ∀ α β. α -> β;
753+ saj = ∀ α β. α -> [β];
754− salt = ∀ α β. α -> β;
754+ salt = ∀ α β. α -> [β];
755 samsungtv = ∀ α β. (α.samsungctl = β, α.samsungtvws = β) => α -> [β];
755 samsungtv = ∀ α β. (α.samsungctl = β, α.samsungtvws = β) => α -> [β];
756− satel_integra = ∀ α β. α -> β;
756+ satel_integra = ∀ α β. α -> [β];
757− scene = ∀ α β. α -> β;
757+ scene = ∀ α β. α -> [β];
758− schluter = ∀ α β. α -> β;
758+ schluter = ∀ α β. α -> [β];
759 scrape =
759 scrape =
760 ∀ α β.
760 ∀ α β.
761 (α.beautifulsoup4 = β, α.jsonpath = β, α.xmltodict = β) => α -> [β];
761 (α.beautifulsoup4 = β, α.jsonpath = β, α.xmltodict = β) => α -> [β];
762− script = ∀ α β. α -> β;
762+ script = ∀ α β. α -> [β];
763− scsgate = ∀ α β. α -> β;
763+ scsgate = ∀ α β. α -> [β];
764 search = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
764 search = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
765 season = ∀ α β. (α.ephem = β) => α -> [β];
765 season = ∀ α β. (α.ephem = β) => α -> [β];
766− sendgrid = ∀ α β. α -> β;
766+ sendgrid = ∀ α β. α -> [β];
767− sense = ∀ α β. α -> β;
767+ sense = ∀ α β. α -> [β];
768− sensehat = ∀ α β. α -> β;
768+ sensehat = ∀ α β. α -> [β];
769− sensibo = ∀ α β. α -> β;
769+ sensibo = ∀ α β. α -> [β];
770− sensor = ∀ α β. α -> β;
770+ sensor = ∀ α β. α -> [β];
771 sentry = ∀ α β. (α.sentry-sdk = β) => α -> [β];
771 sentry = ∀ α β. (α.sentry-sdk = β) => α -> [β];
772 serial = ∀ α β. (α.pyserial-asyncio = β) => α -> [β];
772 serial = ∀ α β. (α.pyserial-asyncio = β) => α -> [β];
773− serial_pm = ∀ α β. α -> β;
773+ serial_pm = ∀ α β. α -> [β];
774− sesame = ∀ α β. α -> β;
774+ sesame = ∀ α β. α -> [β];
775 seven_segments = ∀ α β. (α.pillow = β) => α -> [β];
775 seven_segments = ∀ α β. (α.pillow = β) => α -> [β];
776− seventeentrack = ∀ α β. α -> β;
776+ seventeentrack = ∀ α β. α -> [β];
777− shell_command = ∀ α β. α -> β;
777+ shell_command = ∀ α β. α -> [β];
778 shiftr = ∀ α β. (α.paho-mqtt = β) => α -> [β];
778 shiftr = ∀ α β. (α.paho-mqtt = β) => α -> [β];
779 shodan = ∀ α β. (α.shodan = β) => α -> [β];
779 shodan = ∀ α β. (α.shodan = β) => α -> [β];
780 shopping_list = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
780 shopping_list = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
781− sht31 = ∀ α β. α -> β;
781+ sht31 = ∀ α β. α -> [β];
782− sigfox = ∀ α β. α -> β;
782+ sigfox = ∀ α β. α -> [β];
783 sighthound = ∀ α β. (α.pillow = β) => α -> [β];
783 sighthound = ∀ α β. (α.pillow = β) => α -> [β];
784− signal_messenger = ∀ α β. α -> β;
784+ signal_messenger = ∀ α β. α -> [β];
785− simplepush = ∀ α β. α -> β;
785+ simplepush = ∀ α β. α -> [β];
786− simplisafe = ∀ α β. α -> β;
786+ simplisafe = ∀ α β. α -> [β];
787− simulated = ∀ α β. α -> β;
787+ simulated = ∀ α β. α -> [β];
788− sinch = ∀ α β. α -> β;
788+ sinch = ∀ α β. α -> [β];
789− sisyphus = ∀ α β. α -> β;
789+ sisyphus = ∀ α β. α -> [β];
790− sky_hub = ∀ α β. α -> β;
790+ sky_hub = ∀ α β. α -> [β];
791− skybeacon = ∀ α β. α -> β;
791+ skybeacon = ∀ α β. α -> [β];
792− skybell = ∀ α β. α -> β;
792+ skybell = ∀ α β. α -> [β];
793− slack = ∀ α β. α -> β;
793+ slack = ∀ α β. α -> [β];
794− sleepiq = ∀ α β. α -> β;
794+ sleepiq = ∀ α β. α -> [β];
795− slide = ∀ α β. α -> β;
795+ slide = ∀ α β. α -> [β];
796− sma = ∀ α β. α -> β;
796+ sma = ∀ α β. α -> [β];
797 smappee = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
797 smappee = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
798− smarthab = ∀ α β. α -> β;
798+ smarthab = ∀ α β. α -> [β];
799 smartthings =
799 smartthings =
800 ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
800 ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
801− smarty = ∀ α β. α -> β;
801+ smarty = ∀ α β. α -> [β];
802− smhi = ∀ α β. α -> β;
802+ smhi = ∀ α β. α -> [β];
803− sms = ∀ α β. α -> β;
803+ sms = ∀ α β. α -> [β];
804− smtp = ∀ α β. α -> β;
804+ smtp = ∀ α β. α -> [β];
805 snapcast = ∀ α β. (α.snapcast = β) => α -> [β];
805 snapcast = ∀ α β. (α.snapcast = β) => α -> [β];
806 snips = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
806 snips = ∀ α β. (α.aiohttp-cors = β, α.paho-mqtt = β) => α -> [β];
807 snmp = ∀ α β. (α.pysnmp = β) => α -> [β];
807 snmp = ∀ α β. (α.pysnmp = β) => α -> [β];
808− sochain = ∀ α β. α -> β;
808+ sochain = ∀ α β. α -> [β];
809− socialblade = ∀ α β. α -> β;
809+ socialblade = ∀ α β. α -> [β];
810 solaredge = ∀ α β. (α.stringcase = β) => α -> [β];
810 solaredge = ∀ α β. (α.stringcase = β) => α -> [β];
811− solaredge_local = ∀ α β. α -> β;
811+ solaredge_local = ∀ α β. α -> [β];
812− solarlog = ∀ α β. α -> β;
812+ solarlog = ∀ α β. α -> [β];
813− solax = ∀ α β. α -> β;
813+ solax = ∀ α β. α -> [β];
814− soma = ∀ α β. α -> β;
814+ soma = ∀ α β. α -> [β];
815 somfy = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
815 somfy = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
816− somfy_mylink = ∀ α β. α -> β;
816+ somfy_mylink = ∀ α β. α -> [β];
817− sonarr = ∀ α β. α -> β;
817+ sonarr = ∀ α β. α -> [β];
818− songpal = ∀ α β. α -> β;
818+ songpal = ∀ α β. α -> [β];
819 sonos = ∀ α β. (α.pysonos = β) => α -> [β];
819 sonos = ∀ α β. (α.pysonos = β) => α -> [β];
820− sony_projector = ∀ α β. α -> β;
820+ sony_projector = ∀ α β. α -> [β];
821 soundtouch =
821 soundtouch =
822 ∀ α β.
822 ∀ α β.
823 (α.aiohttp-cors = β, α.libsoundtouch = β, α.zeroconf = β) => α -> [β];
823 (α.aiohttp-cors = β, α.libsoundtouch = β, α.zeroconf = β) => α -> [β];
824 spaceapi = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
824 spaceapi = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
825− spc = ∀ α β. α -> β;
825+ spc = ∀ α β. α -> [β];
826 speedtestdotnet = ∀ α β. (α.speedtest-cli = β) => α -> [β];
826 speedtestdotnet = ∀ α β. (α.speedtest-cli = β) => α -> [β];
827− spider = ∀ α β. α -> β;
827+ spider = ∀ α β. α -> [β];
828− splunk = ∀ α β. α -> β;
828+ splunk = ∀ α β. α -> [β];
829− spotcrime = ∀ α β. α -> β;
829+ spotcrime = ∀ α β. α -> [β];
830 spotify = ∀ α β. (α.aiohttp-cors = β, α.spotipy = β) => α -> [β];
830 spotify = ∀ α β. (α.aiohttp-cors = β, α.spotipy = β) => α -> [β];
831 sql = ∀ α β. (α.sqlalchemy = β) => α -> [β];
831 sql = ∀ α β. (α.sqlalchemy = β) => α -> [β];
832 squeezebox = ∀ α β. (α.pysqueezebox = β) => α -> [β];
832 squeezebox = ∀ α β. (α.pysqueezebox = β) => α -> [β];
@@ -838,47 +838,47 @@
838 α.zeroconf = β
838 α.zeroconf = β
839 ) =>
839 ) =>
840 α -> [β];
840 α -> [β];
841− starline = ∀ α β. α -> β;
841+ starline = ∀ α β. α -> [β];
842− starlingbank = ∀ α β. α -> β;
842+ starlingbank = ∀ α β. α -> [β];
843 startca = ∀ α β. (α.xmltodict = β) => α -> [β];
843 startca = ∀ α β. (α.xmltodict = β) => α -> [β];
844 statistics = ∀ α β. (α.sqlalchemy = β) => α -> [β];
844 statistics = ∀ α β. (α.sqlalchemy = β) => α -> [β];
845 statsd = ∀ α β. (α.statsd = β) => α -> [β];
845 statsd = ∀ α β. (α.statsd = β) => α -> [β];
846− steam_online = ∀ α β. α -> β;
846+ steam_online = ∀ α β. α -> [β];
847− stiebel_eltron = ∀ α β. α -> β;
847+ stiebel_eltron = ∀ α β. α -> [β];
848− stookalert = ∀ α β. α -> β;
848+ stookalert = ∀ α β. α -> [β];
849 stream = ∀ α β. (α.aiohttp-cors = β, α.av = β) => α -> [β];
849 stream = ∀ α β. (α.aiohttp-cors = β, α.av = β) => α -> [β];
850− streamlabswater = ∀ α β. α -> β;
850+ streamlabswater = ∀ α β. α -> [β];
851 stt = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
851 stt = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
852− suez_water = ∀ α β. α -> β;
852+ suez_water = ∀ α β. α -> [β];
853− sun = ∀ α β. α -> β;
853+ sun = ∀ α β. α -> [β];
854− supervisord = ∀ α β. α -> β;
854+ supervisord = ∀ α β. α -> [β];
855− supla = ∀ α β. α -> β;
855+ supla = ∀ α β. α -> [β];
856− surepetcare = ∀ α β. α -> β;
856+ surepetcare = ∀ α β. α -> [β];
857− swiss_hydrological_data = ∀ α β. α -> β;
857+ swiss_hydrological_data = ∀ α β. α -> [β];
858− swiss_public_transport = ∀ α β. α -> β;
858+ swiss_public_transport = ∀ α β. α -> [β];
859− swisscom = ∀ α β. α -> β;
859+ swisscom = ∀ α β. α -> [β];
860− switch = ∀ α β. α -> β;
860+ switch = ∀ α β. α -> [β];
861− switchbot = ∀ α β. α -> β;
861+ switchbot = ∀ α β. α -> [β];
862− switcher_kis = ∀ α β. α -> β;
862+ switcher_kis = ∀ α β. α -> [β];
863− switchmate = ∀ α β. α -> β;
863+ switchmate = ∀ α β. α -> [β];
864− syncthru = ∀ α β. α -> β;
864+ syncthru = ∀ α β. α -> [β];
865− synology = ∀ α β. α -> β;
865+ synology = ∀ α β. α -> [β];
866− synology_chat = ∀ α β. α -> β;
866+ synology_chat = ∀ α β. α -> [β];
867− synology_dsm = ∀ α β. α -> β;
867+ synology_dsm = ∀ α β. α -> [β];
868− synology_srm = ∀ α β. α -> β;
868+ synology_srm = ∀ α β. α -> [β];
869− syslog = ∀ α β. α -> β;
869+ syslog = ∀ α β. α -> [β];
870 system_health = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
870 system_health = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
871 system_log = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
871 system_log = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
872 systemmonitor = ∀ α β. (α.psutil = β) => α -> [β];
872 systemmonitor = ∀ α β. (α.psutil = β) => α -> [β];
873− tado = ∀ α β. α -> β;
873+ tado = ∀ α β. α -> [β];
874− tahoma = ∀ α β. α -> β;
874+ tahoma = ∀ α β. α -> [β];
875− tank_utility = ∀ α β. α -> β;
875+ tank_utility = ∀ α β. α -> [β];
876− tankerkoenig = ∀ α β. α -> β;
876+ tankerkoenig = ∀ α β. α -> [β];
877− tapsaff = ∀ α β. α -> β;
877+ tapsaff = ∀ α β. α -> [β];
878− tautulli = ∀ α β. α -> β;
878+ tautulli = ∀ α β. α -> [β];
879− tcp = ∀ α β. α -> β;
879+ tcp = ∀ α β. α -> [β];
880 ted5000 = ∀ α β. (α.xmltodict = β) => α -> [β];
880 ted5000 = ∀ α β. (α.xmltodict = β) => α -> [β];
881− teksavvy = ∀ α β. α -> β;
881+ teksavvy = ∀ α β. α -> [β];
882 telegram =
882 telegram =
883 ∀ α β.
883 ∀ α β.
884 (α.aiohttp-cors = β, α.pysocks = β, α.python-telegram-bot = β) => α ->
884 (α.aiohttp-cors = β, α.pysocks = β, α.python-telegram-bot = β) => α ->
@@ -887,139 +887,139 @@
887 ∀ α β.
887 ∀ α β.
888 (α.aiohttp-cors = β, α.pysocks = β, α.python-telegram-bot = β) => α ->
888 (α.aiohttp-cors = β, α.pysocks = β, α.python-telegram-bot = β) => α ->
889 [β];
889 [β];
890− tellduslive = ∀ α β. α -> β;
890+ tellduslive = ∀ α β. α -> [β];
891− tellstick = ∀ α β. α -> β;
891+ tellstick = ∀ α β. α -> [β];
892− telnet = ∀ α β. α -> β;
892+ telnet = ∀ α β. α -> [β];
893− temper = ∀ α β. α -> β;
893+ temper = ∀ α β. α -> [β];
894− template = ∀ α β. α -> β;
894+ template = ∀ α β. α -> [β];
895 tensorflow =
895 tensorflow =
896 ∀ α β. (α.numpy = β, α.pillow = β, α.protobuf = β) => α -> [β];
896 ∀ α β. (α.numpy = β, α.pillow = β, α.protobuf = β) => α -> [β];
897− tesla = ∀ α β. α -> β;
897+ tesla = ∀ α β. α -> [β];
898− tfiac = ∀ α β. α -> β;
898+ tfiac = ∀ α β. α -> [β];
899 thermoworks_smoke = ∀ α β. (α.stringcase = β) => α -> [β];
899 thermoworks_smoke = ∀ α β. (α.stringcase = β) => α -> [β];
900− thethingsnetwork = ∀ α β. α -> β;
900+ thethingsnetwork = ∀ α β. α -> [β];
901− thingspeak = ∀ α β. α -> β;
901+ thingspeak = ∀ α β. α -> [β];
902− thinkingcleaner = ∀ α β. α -> β;
902+ thinkingcleaner = ∀ α β. α -> [β];
903− thomson = ∀ α β. α -> β;
903+ thomson = ∀ α β. α -> [β];
904− threshold = ∀ α β. α -> β;
904+ threshold = ∀ α β. α -> [β];
905− tibber = ∀ α β. α -> β;
905+ tibber = ∀ α β. α -> [β];
906− tikteck = ∀ α β. α -> β;
906+ tikteck = ∀ α β. α -> [β];
907− tile = ∀ α β. α -> β;
907+ tile = ∀ α β. α -> [β];
908− time_date = ∀ α β. α -> β;
908+ time_date = ∀ α β. α -> [β];
909− timer = ∀ α β. α -> β;
909+ timer = ∀ α β. α -> [β];
910− tmb = ∀ α β. α -> β;
910+ tmb = ∀ α β. α -> [β];
911− tod = ∀ α β. α -> β;
911+ tod = ∀ α β. α -> [β];
912 todoist = ∀ α β. (α.todoist = β) => α -> [β];
912 todoist = ∀ α β. (α.todoist = β) => α -> [β];
913− tof = ∀ α β. α -> β;
913+ tof = ∀ α β. α -> [β];
914− tomato = ∀ α β. α -> β;
914+ tomato = ∀ α β. α -> [β];
915 toon = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
915 toon = ∀ α β. (α.aiohttp-cors = β, α.hass-nabucasa = β) => α -> [β];
916 torque = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
916 torque = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
917− totalconnect = ∀ α β. α -> β;
917+ totalconnect = ∀ α β. α -> [β];
918− touchline = ∀ α β. α -> β;
918+ touchline = ∀ α β. α -> [β];
919 tplink = ∀ α β. (α.pyhs100 = β) => α -> [β];
919 tplink = ∀ α β. (α.pyhs100 = β) => α -> [β];
920− tplink_lte = ∀ α β. α -> β;
920+ tplink_lte = ∀ α β. α -> [β];
921 traccar = ∀ α β. (α.aiohttp-cors = β, α.stringcase = β) => α -> [β];
921 traccar = ∀ α β. (α.aiohttp-cors = β, α.stringcase = β) => α -> [β];
922− trackr = ∀ α β. α -> β;
922+ trackr = ∀ α β. α -> [β];
923− tradfri = ∀ α β. α -> β;
923+ tradfri = ∀ α β. α -> [β];
924− trafikverket_train = ∀ α β. α -> β;
924+ trafikverket_train = ∀ α β. α -> [β];
925− trafikverket_weatherstation = ∀ α β. α -> β;
925+ trafikverket_weatherstation = ∀ α β. α -> [β];
926 transmission = ∀ α β. (α.transmissionrpc = β) => α -> [β];
926 transmission = ∀ α β. (α.transmissionrpc = β) => α -> [β];
927− transport_nsw = ∀ α β. α -> β;
927+ transport_nsw = ∀ α β. α -> [β];
928− travisci = ∀ α β. α -> β;
928+ travisci = ∀ α β. α -> [β];
929 trend = ∀ α β. (α.numpy = β) => α -> [β];
929 trend = ∀ α β. (α.numpy = β) => α -> [β];
930 tts = ∀ α β. (α.aiohttp-cors = β, α.mutagen = β) => α -> [β];
930 tts = ∀ α β. (α.aiohttp-cors = β, α.mutagen = β) => α -> [β];
931− tuya = ∀ α β. α -> β;
931+ tuya = ∀ α β. α -> [β];
932− twentemilieu = ∀ α β. α -> β;
932+ twentemilieu = ∀ α β. α -> [β];
933 twilio = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
933 twilio = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
934 twilio_call = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
934 twilio_call = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
935 twilio_sms = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
935 twilio_sms = ∀ α β. (α.aiohttp-cors = β, α.twilio = β) => α -> [β];
936− twitch = ∀ α β. α -> β;
936+ twitch = ∀ α β. α -> [β];
937− twitter = ∀ α β. α -> β;
937+ twitter = ∀ α β. α -> [β];
938− ubee = ∀ α β. α -> β;
938+ ubee = ∀ α β. α -> [β];
939− ubus = ∀ α β. α -> β;
939+ ubus = ∀ α β. α -> [β];
940− ue_smart_radio = ∀ α β. α -> β;
940+ ue_smart_radio = ∀ α β. α -> [β];
941− uk_transport = ∀ α β. α -> β;
941+ uk_transport = ∀ α β. α -> [β];
942 unifi = ∀ α β. (α.aiounifi = β) => α -> [β];
942 unifi = ∀ α β. (α.aiounifi = β) => α -> [β];
943 unifi_direct = ∀ α β. (α.pexpect = β) => α -> [β];
943 unifi_direct = ∀ α β. (α.pexpect = β) => α -> [β];
944− unifiled = ∀ α β. α -> β;
944+ unifiled = ∀ α β. α -> [β];
945− universal = ∀ α β. α -> β;
945+ universal = ∀ α β. α -> [β];
946− upb = ∀ α β. α -> β;
946+ upb = ∀ α β. α -> [β];
947− upc_connect = ∀ α β. α -> β;
947+ upc_connect = ∀ α β. α -> [β];
948− upcloud = ∀ α β. α -> β;
948+ upcloud = ∀ α β. α -> [β];
949 updater = ∀ α β. (α.distro = β) => α -> [β];
949 updater = ∀ α β. (α.distro = β) => α -> [β];
950 upnp = ∀ α β. (α.async-upnp-client = β) => α -> [β];
950 upnp = ∀ α β. (α.async-upnp-client = β) => α -> [β];
951− uptime = ∀ α β. α -> β;
951+ uptime = ∀ α β. α -> [β];
952− uptimerobot = ∀ α β. α -> β;
952+ uptimerobot = ∀ α β. α -> [β];
953− uscis = ∀ α β. α -> β;
953+ uscis = ∀ α β. α -> [β];
954− usgs_earthquakes_feed = ∀ α β. α -> β;
954+ usgs_earthquakes_feed = ∀ α β. α -> [β];
955− utility_meter = ∀ α β. α -> β;
955+ utility_meter = ∀ α β. α -> [β];
956 uvc = ∀ α β. (α.uvcclient = β) => α -> [β];
956 uvc = ∀ α β. (α.uvcclient = β) => α -> [β];
957− vacuum = ∀ α β. α -> β;
957+ vacuum = ∀ α β. α -> [β];
958− vallox = ∀ α β. α -> β;
958+ vallox = ∀ α β. α -> [β];
959− vasttrafik = ∀ α β. α -> β;
959+ vasttrafik = ∀ α β. α -> [β];
960− velbus = ∀ α β. α -> β;
960+ velbus = ∀ α β. α -> [β];
961− velux = ∀ α β. α -> β;
961+ velux = ∀ α β. α -> [β];
962− venstar = ∀ α β. α -> β;
962+ venstar = ∀ α β. α -> [β];
963− vera = ∀ α β. α -> β;
963+ vera = ∀ α β. α -> [β];
964 verisure = ∀ α β. (α.jsonpath = β) => α -> [β];
964 verisure = ∀ α β. (α.jsonpath = β) => α -> [β];
965− versasense = ∀ α β. α -> β;
965+ versasense = ∀ α β. α -> [β];
966 version = ∀ α β. (α.pyhaversion = β) => α -> [β];
966 version = ∀ α β. (α.pyhaversion = β) => α -> [β];
967− vesync = ∀ α β. α -> β;
967+ vesync = ∀ α β. α -> [β];
968− viaggiatreno = ∀ α β. α -> β;
968+ viaggiatreno = ∀ α β. α -> [β];
969− vicare = ∀ α β. α -> β;
969+ vicare = ∀ α β. α -> [β];
970− vilfo = ∀ α β. α -> β;
970+ vilfo = ∀ α β. α -> [β];
971− vivotek = ∀ α β. α -> β;
971+ vivotek = ∀ α β. α -> [β];
972− vizio = ∀ α β. α -> β;
972+ vizio = ∀ α β. α -> [β];
973 vlc = ∀ α β. (α.python-vlc = β) => α -> [β];
973 vlc = ∀ α β. (α.python-vlc = β) => α -> [β];
974− vlc_telnet = ∀ α β. α -> β;
974+ vlc_telnet = ∀ α β. α -> [β];
975− voicerss = ∀ α β. α -> β;
975+ voicerss = ∀ α β. α -> [β];
976− volkszaehler = ∀ α β. α -> β;
976+ volkszaehler = ∀ α β. α -> [β];
977− volumio = ∀ α β. α -> β;
977+ volumio = ∀ α β. α -> [β];
978− volvooncall = ∀ α β. α -> β;
978+ volvooncall = ∀ α β. α -> [β];
979 vultr = ∀ α β. (α.vultr = β) => α -> [β];
979 vultr = ∀ α β. (α.vultr = β) => α -> [β];
980− w800rf32 = ∀ α β. α -> β;
980+ w800rf32 = ∀ α β. α -> [β];
981 wake_on_lan = ∀ α β. (α.wakeonlan = β) => α -> [β];
981 wake_on_lan = ∀ α β. (α.wakeonlan = β) => α -> [β];
982− waqi = ∀ α β. α -> β;
982+ waqi = ∀ α β. α -> [β];
983− water_heater = ∀ α β. α -> β;
983+ water_heater = ∀ α β. α -> [β];
984− waterfurnace = ∀ α β. α -> β;
984+ waterfurnace = ∀ α β. α -> [β];
985− watson_iot = ∀ α β. α -> β;
985+ watson_iot = ∀ α β. α -> [β];
986− watson_tts = ∀ α β. α -> β;
986+ watson_tts = ∀ α β. α -> [β];
987 waze_travel_time = ∀ α β. (α.WazeRouteCalculator = β) => α -> [β];
987 waze_travel_time = ∀ α β. (α.WazeRouteCalculator = β) => α -> [β];
988− weather = ∀ α β. α -> β;
988+ weather = ∀ α β. α -> [β];
989 webhook = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
989 webhook = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
990− webostv = ∀ α β. α -> β;
990+ webostv = ∀ α β. α -> [β];
991 websocket_api = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
991 websocket_api = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
992− wemo = ∀ α β. α -> β;
992+ wemo = ∀ α β. α -> [β];
993− whois = ∀ α β. α -> β;
993+ whois = ∀ α β. α -> [β];
994− wiffi = ∀ α β. α -> β;
994+ wiffi = ∀ α β. α -> [β];
995 wink = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
995 wink = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
996− wirelesstag = ∀ α β. α -> β;
996+ wirelesstag = ∀ α β. α -> [β];
997 withings = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
997 withings = ∀ α β. (α.aiohttp-cors = β) => α -> [β];
998− wled = ∀ α β. α -> β;
998+ wled = ∀ α β. α -> [β];
999− wolflink = ∀ α β. α -> β;
999+ wolflink = ∀ α β. α -> [β];
1000 workday = ∀ α β. (α.holidays = β) => α -> [β];
1000 workday = ∀ α β. (α.holidays = β) => α -> [β];
1001− worldclock = ∀ α β. α -> β;
1001+ worldclock = ∀ α β. α -> [β];
1002− worldtidesinfo = ∀ α β. α -> β;
1002+ worldtidesinfo = ∀ α β. α -> [β];
1003− worxlandroid = ∀ α β. α -> β;
1003+ worxlandroid = ∀ α β. α -> [β];
1004− wsdot = ∀ α β. α -> β;
1004+ wsdot = ∀ α β. α -> [β];
1005− wunderground = ∀ α β. α -> β;
1005+ wunderground = ∀ α β. α -> [β];
1006− x10 = ∀ α β. α -> β;
1006+ x10 = ∀ α β. α -> [β];
1007− xbee = ∀ α β. α -> β;
1007+ xbee = ∀ α β. α -> [β];
1008− xbox_live = ∀ α β. α -> β;
1008+ xbox_live = ∀ α β. α -> [β];
1009− xeoma = ∀ α β. α -> β;
1009+ xeoma = ∀ α β. α -> [β];
1010− xfinity = ∀ α β. α -> β;
1010+ xfinity = ∀ α β. α -> [β];
1011 xiaomi = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
1011 xiaomi = ∀ α β. (α.ha-ffmpeg = β) => α -> [β];
1012 xiaomi_aqara =
1012 xiaomi_aqara =
1013 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
1013 ∀ α β. (α.aiohttp-cors = β, α.netdisco = β, α.zeroconf = β) => α -> [β];
1014 xiaomi_miio = ∀ α β. (α.construct = β, α.python-miio = β) => α -> [β];
1014 xiaomi_miio = ∀ α β. (α.construct = β, α.python-miio = β) => α -> [β];
1015− xiaomi_tv = ∀ α β. α -> β;
1015+ xiaomi_tv = ∀ α β. α -> [β];
1016 xmpp = ∀ α β. (α.slixmpp = β) => α -> [β];
1016 xmpp = ∀ α β. (α.slixmpp = β) => α -> [β];
1017− xs1 = ∀ α β. α -> β;
1017+ xs1 = ∀ α β. α -> [β];
1018− yale_smart_alarm = ∀ α β. α -> β;
1018+ yale_smart_alarm = ∀ α β. α -> [β];
1019 yamaha = ∀ α β. (α.rxv = β) => α -> [β];
1019 yamaha = ∀ α β. (α.rxv = β) => α -> [β];
1020− yamaha_musiccast = ∀ α β. α -> β;
1020+ yamaha_musiccast = ∀ α β. α -> [β];
1021− yandex_transport = ∀ α β. α -> β;
1021+ yandex_transport = ∀ α β. α -> [β];
1022− yandextts = ∀ α β. α -> β;
1022+ yandextts = ∀ α β. α -> [β];
1023 yeelight =
1023 yeelight =
1024 ∀ α β.
1024 ∀ α β.
1025 ( α.aiohttp-cors = β,
1025 ( α.aiohttp-cors = β,
@@ -1028,15 +1028,15 @@
1028 α.zeroconf = β
1028 α.zeroconf = β
1029 ) =>
1029 ) =>
1030 α -> [β];
1030 α -> [β];
1031− yeelightsunflower = ∀ α β. α -> β;
1031+ yeelightsunflower = ∀ α β. α -> [β];
1032− yessssms = ∀ α β. α -> β;
1032+ yessssms = ∀ α β. α -> [β];
1033 yi = ∀ α β. (α.aioftp = β, α.ha-ffmpeg = β) => α -> [β];
1033 yi = ∀ α β. (α.aioftp = β, α.ha-ffmpeg = β) => α -> [β];
1034 yr = ∀ α β. (α.xmltodict = β) => α -> [β];
1034 yr = ∀ α β. (α.xmltodict = β) => α -> [β];
1035− zabbix = ∀ α β. α -> β;
1035+ zabbix = ∀ α β. α -> [β];
1036− zamg = ∀ α β. α -> β;
1036+ zamg = ∀ α β. α -> [β];
1037− zengge = ∀ α β. α -> β;
1037+ zengge = ∀ α β. α -> [β];
1038 zeroconf = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
1038 zeroconf = ∀ α β. (α.aiohttp-cors = β, α.zeroconf = β) => α -> [β];
1039− zerproc = ∀ α β. α -> β;
1039+ zerproc = ∀ α β. α -> [β];
1040 zestimate = ∀ α β. (α.xmltodict = β) => α -> [β];
1040 zestimate = ∀ α β. (α.xmltodict = β) => α -> [β];
1041 zha =
1041 zha =
1042 ∀ α β.
1042 ∀ α β.
@@ -1050,9 +1050,9 @@
1050 α.zigpy-zigate = β
1050 α.zigpy-zigate = β
1051 ) =>
1051 ) =>
1052 α -> [β];
1052 α -> [β];
1053− zhong_hong = ∀ α β. α -> β;
1053+ zhong_hong = ∀ α β. α -> [β];
1054− ziggo_mediabox_xl = ∀ α β. α -> β;
1054+ ziggo_mediabox_xl = ∀ α β. α -> [β];
1055− zone = ∀ α β. α -> β;
1055+ zone = ∀ α β. α -> [β];
1056 zoneminder = ∀ α β. (α.zm-py = β) => α -> [β];
1056 zoneminder = ∀ α β. (α.zm-py = β) => α -> [β];
1057 zwave =
1057 zwave =
1058 ∀ α β. (α.homeassistant-pyozw = β, α.pydispatcher = β) => α -> [β];
1058 ∀ α β. (α.homeassistant-pyozw = β, α.pydispatcher = β) => α -> [β];
test/golden/importless/contrib.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1.
2−( (β) // ({description = String; homepage = String;}) ~ (γ),
2+( β // {description = String; homepage = String;} ~ γ,
3 δ.lib = ε,
3 δ.lib = ε,
4 δ.mkDerivation =
4 δ.mkDerivation =
5 { doInstallCheck = Bool;
5 { doInstallCheck = Bool;
test/golden/importless/cryptsetup.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 name = String;
13 name = String;
test/golden/importless/css-lite.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/cstruct.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι.
1∀ β γ δ ε ζ η θ ι.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.minimumOCamlVersion = ε,
4 δ.minimumOCamlVersion = ε,
5 δ.src = ζ,
5 δ.src = ζ,
test/golden/importless/data.txt+1−1
@@ -5,7 +5,7 @@
5 meta =
5 meta =
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8− hydraPlatforms = ∀ α. α;
8+ hydraPlatforms = ∀ α. [α];
9 license = δ;
9 license = δ;
10 platforms = ε;
10 platforms = ε;
11 };
11 };
test/golden/importless/db3.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/debian-build.txt+12−15
@@ -1,19 +1,16 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2−( ( β
2+( β //
3− ) //
4− ( { installExtraDebsPhase = String;
3+ { installExtraDebsPhase = String;
5− installPhase = String;
4+ installPhase = String;
6− meta = ∀ α. α;
5+ meta = ∀ α. α;
7− name = String;
6+ name = String;
8− postHook = String;
7+ postHook = String;
9− sysInfoPhase = String;
8+ sysInfoPhase = String;
10− }
9+ } ~
11− ) ~
12− ( γ
10+ γ,
13− ),
14− ({doCheck = Bool; prePhases = String; prefix = String;}) // (γ) ~ (δ),
11+ {doCheck = Bool; prePhases = String; prefix = String;} // γ ~ δ,
15− ε.?debProvides = ζ,
12+ ε.?debProvides = [ζ],
16− ε.?debRequires = η,
13+ ε.?debRequires = [η],
17 ε.?fsTranslation = Bool,
14 ε.?fsTranslation = Bool,
18 ε.meta = {},
15 ε.meta = {},
19 ε.?name = String,
16 ε.?name = String,
test/golden/importless/declare-lazyAttrsOf.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η θ.
1∀ α β γ δ ε ζ η θ.
2−( (α) // ({emptyValue = {value = String;};}) ~ (β),
2+( α // {emptyValue = {value = String;};} ~ β,
3 γ.lib = δ,
3 γ.lib = δ,
4 δ.mkOption = {default = {}; type = ε;} -> ζ,
4 δ.mkOption = {default = {}; type = ε;} -> ζ,
5 δ.types = η,
5 δ.types = η,
test/golden/importless/declare-submoduleWith-special.txt+1−1
@@ -1,5 +1,5 @@
1∀ ζ η θ ι κ λ.
1∀ ζ η θ ι κ λ.
2−( (ζ) // ({foo = String;}) ~ (η),
2+( ζ // {foo = String;} ~ η,
3 θ.lib = ζ,
3 θ.lib = ζ,
4 ζ.mkOption = {default = {}; type = ι;} -> κ,
4 ζ.mkOption = {default = {}; type = ι;} -> κ,
5 ζ.types = λ,
5 ζ.types = λ,
test/golden/importless/define-option-dependently-nested.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( ({value = Number;}) // (β) ~ (γ),
2+( {value = Number;} // β ~ γ,
3 δ.?set = ε,
3 δ.?set = ε,
4 ε.?enable = ζ,
4 ε.?enable = ζ,
5 η.?enable = θ,
5 η.?enable = θ,
test/golden/importless/define-option-dependently.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η.
1∀ β γ δ ε ζ η.
2−( ({value = Number;}) // (β) ~ (γ),
2+( {value = Number;} // β ~ γ,
3 δ.?enable = ε,
3 δ.?enable = ε,
4 ζ.lib = η,
4 ζ.lib = η,
5 ζ.options = δ,
5 ζ.options = δ,
test/golden/importless/define-value-list.txt+1−1
@@ -1 +1 @@
1−{value = ∀ α. α;}
1+{value = ∀ α. [α];}
test/golden/importless/dfu-util.txt+1−1
@@ -7,7 +7,7 @@
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9 longDescription = String;
9 longDescription = String;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 nativeBuildInputs = [η];
13 nativeBuildInputs = [η];
test/golden/importless/dictd-wiktionary.txt+1−1
@@ -8,7 +8,7 @@
8 meta =
8 meta =
9 { description = String;
9 { description = String;
10 homepage = String;
10 homepage = String;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 platforms = η;
12 platforms = η;
13 };
13 };
14 pname = String;
14 pname = String;
test/golden/importless/dictd-wordnet.txt+1−1
@@ -8,7 +8,7 @@
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10 longDescription = String;
10 longDescription = String;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 platforms = ζ;
12 platforms = ζ;
13 };
13 };
14 pname = String;
14 pname = String;
test/golden/importless/dissect.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/dsseries.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.config = ε,
3 δ.config = ε,
4 δ.lib = ζ,
4 δ.lib = ζ,
5 δ.pkgs = η,
5 δ.pkgs = η,
test/golden/importless/dvtm.txt+2−2
@@ -14,7 +14,7 @@
14 };
14 };
15 name = ι;
15 name = ι;
16 nativeBuildInputs = [ε];
16 nativeBuildInputs = [ε];
17− patches = κ;
17+ patches = [κ];
18 postPatch = λ;
18 postPatch = λ;
19 prePatch = String;
19 prePatch = String;
20 src = μ;
20 src = μ;
@@ -32,7 +32,7 @@
32{ customConfig = Null;
32{ customConfig = Null;
33 name = ι;
33 name = ι;
34 ncurses = ε;
34 ncurses = ε;
35− patches = κ;
35+ patches = [κ];
36 src = μ;
36 src = μ;
37 stdenv = α;
37 stdenv = α;
38} ->
38} ->
test/golden/importless/eggs.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ ζ η θ.
2+( ζ.eggDerivation = ∀ ε. {buildInputs = ∀ β. [β]; name = String; src = η;} -> ε,
3+ ζ.fetchegg = {name = String; sha256 = String; version = String;} -> η
4+) =>
5+{pkgs = ζ; stdenv = θ;} ->
6+{ args = δ;
7+ eggDerivation = ∀ γ. {buildInputs = ∀ α. [α]; name = String; src = η;} -> γ;
8+ fetchegg = {name = String; sha256 = String; version = String;} -> η;
9+ matchable = δ;
10+ srfi-1 = δ;
11+ srfi-13 = δ;
12+ srfi-14 = δ;
13+ srfi-37 = δ;
14+}
test/golden/importless/emulate-app.txt+1−1
@@ -20,7 +20,7 @@
20 app = Null;
20 app = Null;
21 avdHomeDir = Null;
21 avdHomeDir = Null;
22 enableGPU = Bool;
22 enableGPU = Bool;
23− extraAVDFiles = θ;
23+ extraAVDFiles = [θ];
24 name = β;
24 name = β;
25 package = Null;
25 package = Null;
26 platformVersion = String;
26 platformVersion = String;
test/golden/importless/eos.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/extpack.txtdeleted−27
@@ -1,27 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι.
2−( α.builtins = β,
3− α.cdepillabout = γ,
4− α.licenses = δ,
5− α.maintainers = ε,
6− α.sander = γ,
7− ζ.version = η,
8− β.stringLength = String -> Number,
9− δ.virtualbox-puel = θ
10−) =>
11−{ fetchurl =
12− { meta =
13− { description = String;
14− homepage = String;
15− license = θ;
16− maintainers = [γ];
17− platforms = [String];
18− };
19− name = String;
20− sha256 = String;
21− url = String;
22− } ->
23− ι;
24− lib = α;
25− virtualbox = ζ;
26−} ->
27−ι
test/golden/importless/fare-utils.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/faust1.txt+37−46
@@ -1,50 +1,41 @@
1∀ γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1.
1∀ γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1.
2−( ( γ
2+( γ //
3− ) //
4− ( { dontBuild = Bool;
3+ { dontBuild = Bool;
5− installPhase = String;
4+ installPhase = String;
6− meta = ∀ β. β;
5+ meta = ∀ β. β;
7− name = String;
6+ name = String;
8− postInstall = String;
7+ postInstall = String;
9− src = δ;
8+ src = δ;
10− }
11− ) ~
9+ } ~
12− ( ε
10+ ε,
13− ),
14− ( ζ
11+ ζ //
15− ) //
16− ( { buildInputs = [η];
12+ { buildInputs = [η];
17− nativeBuildInputs = [θ];
13+ nativeBuildInputs = [θ];
18− postFixup = String;
14+ postFixup = String;
19− propagatedBuildInputs = [ι];
15+ propagatedBuildInputs = [ι];
20− }
16+ } ~
21− ) ~
22− ( { buildInputs = [η];
17+ { buildInputs = [η];
23− meta = ∀ β. β;
18+ meta = ∀ β. β;
24− passthru = {wrap = κ; wrapWithBuildEnv = λ;};
19+ passthru = {wrap = κ; wrapWithBuildEnv = λ;};
25− pname = String;
20+ pname = String;
26− postFixup = String;
21+ postFixup = String;
27− postInstall = String;
22+ postInstall = String;
28− preConfigure = String;
23+ preConfigure = String;
29− src = δ;
24+ src = δ;
30− version = μ;
25+ version = μ;
31− }
32− ),
26+ },
33− ( ν
27+ ν //
34− ) //
35− ( {buildInputs = [η]; postFixup = String;}
28+ {buildInputs = [η]; postFixup = String;} ~
36− ) ~
37− ( { buildInputs = [η];
29+ { buildInputs = [η];
38− meta = ∀ β. β;
30+ meta = ∀ β. β;
39− passthru = {wrap = κ; wrapWithBuildEnv = λ;};
31+ passthru = {wrap = κ; wrapWithBuildEnv = λ;};
40− pname = String;
32+ pname = String;
41− postFixup = String;
33+ postFixup = String;
42− postInstall = String;
34+ postInstall = String;
43− preConfigure = String;
35+ preConfigure = String;
44− src = δ;
36+ src = δ;
45− version = μ;
37+ version = μ;
46− }
47− ),
38+ },
48 ξ.?scripts = [ο],
39 ξ.?scripts = [ο],
49 π.?scripts = [ο],
40 π.?scripts = [ο],
50 ρ.lib = σ,
41 ρ.lib = σ,
test/golden/importless/faust2.txt+42−51
@@ -1,55 +1,46 @@
1∀ γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1.
1∀ γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1.
2−( ( γ
2+( γ //
3− ) //
4− ( { dontBuild = Bool;
3+ { dontBuild = Bool;
5− installPhase = String;
4+ installPhase = String;
6− meta = ∀ β. β;
5+ meta = ∀ β. β;
7− name = String;
6+ name = String;
8− postInstall = String;
7+ postInstall = String;
9− src = δ;
8+ src = δ;
10− }
11− ) ~
9+ } ~
12− ( ε
10+ ε,
13− ),
14− ( ζ
11+ ζ //
15− ) //
16− ( { buildInputs = [η];
12+ { buildInputs = [η];
17− libPath = θ;
13+ libPath = θ;
18− nativeBuildInputs = [η];
14+ nativeBuildInputs = [η];
19− postFixup = String;
15+ postFixup = String;
20− propagatedBuildInputs = [ι];
16+ propagatedBuildInputs = [ι];
21− }
22− ) ~
17+ } ~
23− ( { buildInputs = [κ];
18+ { buildInputs = [κ];
24− cmakeFlags = String;
19+ cmakeFlags = String;
25− meta = ∀ β. β;
20+ meta = ∀ β. β;
26− nativeBuildInputs = [η];
21+ nativeBuildInputs = [η];
27− passthru = {wrap = λ; wrapWithBuildEnv = μ;};
22+ passthru = {wrap = λ; wrapWithBuildEnv = μ;};
28− pname = String;
23+ pname = String;
29− postFixup = String;
24+ postFixup = String;
30− postInstall = String;
25+ postInstall = String;
31− preConfigure = String;
26+ preConfigure = String;
32− src = δ;
27+ src = δ;
33− version = ν;
28+ version = ν;
34− }
29+ },
35− ),
36− ( ξ
30+ ξ //
37− ) //
38− ( {buildInputs = [η]; postFixup = String;}
31+ {buildInputs = [η]; postFixup = String;} ~
39− ) ~
40− ( { buildInputs = [κ];
32+ { buildInputs = [κ];
41− cmakeFlags = String;
33+ cmakeFlags = String;
42− meta = ∀ β. β;
34+ meta = ∀ β. β;
43− nativeBuildInputs = [η];
35+ nativeBuildInputs = [η];
44− passthru = {wrap = λ; wrapWithBuildEnv = μ;};
36+ passthru = {wrap = λ; wrapWithBuildEnv = μ;};
45− pname = String;
37+ pname = String;
46− postFixup = String;
38+ postFixup = String;
47− postInstall = String;
39+ postInstall = String;
48− preConfigure = String;
40+ preConfigure = String;
49− src = δ;
41+ src = δ;
50− version = ν;
42+ version = ν;
51− }
43+ },
52− ),
53 ο.?scripts = [π],
44 ο.?scripts = [π],
54 ρ.?scripts = [π],
45 ρ.?scripts = [π],
55 σ.lib = τ,
46 σ.lib = τ,
test/golden/importless/fcitx.txt+2−2
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1 ι1.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1 ι1.
2−( (β) // ({check = γ -> Bool; name = String;}) ~ (δ),
2+( β // {check = γ -> Bool; name = String;} ~ δ,
3 ε.config = ζ,
3 ε.config = ζ,
4 ε.lib = η,
4 ε.lib = η,
5 ε.pkgs = θ,
5 ε.pkgs = θ,
@@ -30,7 +30,7 @@
30 } ->
30 } ->
31 ω,
31 ω,
32 η.mkOption =
32 η.mkOption =
33− {default = ∀ α. α; description = String; example = φ; type = υ;} -> α1,
33+ {default = ∀ α. [α]; description = String; example = φ; type = υ;} -> α1,
34 η.types = β1,
34 η.types = β1,
35 κ.override = {plugins = γ1;} -> ψ,
35 κ.override = {plugins = γ1;} -> ψ,
36 ξ.engines = γ1,
36 ξ.engines = γ1,
test/golden/importless/fixed-points.txt+5−9
@@ -2,18 +2,14 @@
2θ ->
2θ ->
3{ composeExtensions =
3{ composeExtensions =
4 ∀ α β γ δ ε ζ η.
4 ∀ α β γ δ ε ζ η.
5− ((α) // (β) ~ (γ), (β) // (δ) ~ (ε)) => (ζ -> α -> β) ->
5+ (α // β ~ γ, β // δ ~ ε) => (ζ -> α -> β) -> (ζ -> η -> δ) -> ζ -> α -> ε;
6− (ζ -> η -> δ) -> ζ -> α -> ε;
7 converge = ∀ α. (α -> α) -> α -> α;
6 converge = ∀ α. (α -> α) -> α -> α;
8− extends =
9− ∀ α β γ δ. ((α) // (β) ~ (γ)) => (δ -> α -> β) -> (δ -> α) -> δ -> γ;
7+ extends = ∀ α β γ δ. (α // β ~ γ) => (δ -> α -> β) -> (δ -> α) -> δ -> γ;
10 fix = ∀ α. (α -> α) -> α;
8 fix = ∀ α. (α -> α) -> α;
11− fix' = ∀ α β. ((α) // ({__unfix__ = β -> α;}) ~ (β)) => (β -> α) -> β;
9+ fix' = ∀ α β. (α // {__unfix__ = β -> α;} ~ β) => (β -> α) -> β;
12 makeExtensible =
10 makeExtensible =
13− ∀ α β γ.
14− ((α) // ({__unfix__ = β -> α;}) ~ (β), (β) // ({}) ~ (γ)) => (β -> α) -> γ;
11+ ∀ α β γ. (α // {__unfix__ = β -> α;} ~ β, β // {} ~ γ) => (β -> α) -> γ;
15 makeExtensibleWithCustomName =
12 makeExtensibleWithCustomName =
16 ∀ α β γ δ.
13 ∀ α β γ δ.
17− ((α) // ({__unfix__ = β -> α;}) ~ (β), (β) // ({}) ~ (γ)) => δ ->
14+ (α // {__unfix__ = β -> α;} ~ β, β // {} ~ γ) => δ -> (β -> α) -> γ;
18− (β -> α) -> γ;
19}
15}
test/golden/importless/flatpak.txt+1−1
@@ -22,7 +22,7 @@
22 } ->
22 } ->
23 ξ,
23 ξ,
24 δ.mkOption =
24 δ.mkOption =
25− { default = ∀ α. α;
25+ { default = ∀ α. [α];
26 description = String;
26 description = String;
27 example = θ;
27 example = θ;
28 internal = Bool;
28 internal = Bool;
test/golden/importless/fox-1.6.txt+1−1
@@ -12,7 +12,7 @@
12 homepage = String;
12 homepage = String;
13 license = η;
13 license = η;
14 longDescription = String;
14 longDescription = String;
15− maintainers = ∀ α. α;
15+ maintainers = ∀ α. [α];
16 platforms = θ;
16 platforms = θ;
17 };
17 };
18 pname = String;
18 pname = String;
test/golden/importless/frameworks.txt+60−60
@@ -47,115 +47,115 @@
47{frameworks = β; libobjc = χ; libs = ψ;} ->
47{frameworks = β; libobjc = χ; libs = ψ;} ->
48{ AGL = [θ];
48{ AGL = [θ];
49 AVFoundation = [ε];
49 AVFoundation = [ε];
50− AVKit = ∀ α. α;
50+ AVKit = ∀ α. [α];
51 Accelerate = [ο];
51 Accelerate = [ο];
52− Accounts = ∀ α. α;
52+ Accounts = ∀ α. [α];
53 AddressBook = [ω];
53 AddressBook = [ω];
54 AppKit = [ζ];
54 AppKit = [ζ];
55− AppKitScripting = ∀ α. α;
55+ AppKitScripting = ∀ α. [α];
56− AppleScriptKit = ∀ α. α;
56+ AppleScriptKit = ∀ α. [α];
57− AppleScriptObjC = ∀ α. α;
57+ AppleScriptObjC = ∀ α. [α];
58 ApplicationServices = [ν];
58 ApplicationServices = [ν];
59 AudioToolbox = [ι];
59 AudioToolbox = [ι];
60 AudioUnit = [α1];
60 AudioUnit = [α1];
61 AudioVideoBridging = [β1];
61 AudioVideoBridging = [β1];
62− Automator = ∀ α. α;
62+ Automator = ∀ α. [α];
63− CFNetwork = ∀ α. α;
63+ CFNetwork = ∀ α. [α];
64− CalendarStore = ∀ α. α;
64+ CalendarStore = ∀ α. [α];
65 Carbon = [π];
65 Carbon = [π];
66 Cocoa = [δ];
66 Cocoa = [δ];
67− Collaboration = ∀ α. α;
67+ Collaboration = ∀ α. [α];
68 CoreAudio = [γ1];
68 CoreAudio = [γ1];
69 CoreAudioKit = [δ1];
69 CoreAudioKit = [δ1];
70− CoreBluetooth = ∀ α. α;
70+ CoreBluetooth = ∀ α. [α];
71− CoreData = ∀ α. α;
71+ CoreData = ∀ α. [α];
72− CoreFoundation = ∀ α. α;
72+ CoreFoundation = ∀ α. [α];
73 CoreGraphics = [γ];
73 CoreGraphics = [γ];
74− CoreImage = ∀ α. α;
74+ CoreImage = ∀ α. [α];
75− CoreLocation = ∀ α. α;
75+ CoreLocation = ∀ α. [α];
76− CoreMIDI = ∀ α. α;
76+ CoreMIDI = ∀ α. [α];
77− CoreMIDIServer = ∀ α. α;
77+ CoreMIDIServer = ∀ α. [α];
78 CoreMedia = [ξ];
78 CoreMedia = [ξ];
79 CoreMediaIO = [λ];
79 CoreMediaIO = [λ];
80 CoreServices = [η];
80 CoreServices = [η];
81 CoreText = [ε1];
81 CoreText = [ε1];
82 CoreVideo = [ζ1];
82 CoreVideo = [ζ1];
83 CoreWLAN = [υ];
83 CoreWLAN = [υ];
84− DVDPlayback = ∀ α. α;
84+ DVDPlayback = ∀ α. [α];
85− DirectoryService = ∀ α. α;
85+ DirectoryService = ∀ α. [α];
86 DiscRecording = [η1];
86 DiscRecording = [η1];
87− DiscRecordingUI = ∀ α. α;
87+ DiscRecordingUI = ∀ α. [α];
88 DiskArbitration = [θ1];
88 DiskArbitration = [θ1];
89− EventKit = ∀ α. α;
89+ EventKit = ∀ α. [α];
90− ExceptionHandling = ∀ α. α;
90+ ExceptionHandling = ∀ α. [α];
91− FWAUserLib = ∀ α. α;
91+ FWAUserLib = ∀ α. [α];
92 ForceFeedback = [ι1];
92 ForceFeedback = [ι1];
93 Foundation = [χ];
93 Foundation = [χ];
94− GLKit = ∀ α. α;
94+ GLKit = ∀ α. [α];
95 GLUT = [κ1];
95 GLUT = [κ1];
96− GSS = ∀ α. α;
96+ GSS = ∀ α. [α];
97− GameController = ∀ α. α;
97+ GameController = ∀ α. [α];
98 GameKit = [λ1];
98 GameKit = [λ1];
99− Hypervisor = ∀ α. α;
99+ Hypervisor = ∀ α. [α];
100 ICADevices = [μ1];
100 ICADevices = [μ1];
101− IMServicePlugIn = ∀ α. α;
101+ IMServicePlugIn = ∀ α. [α];
102 IOBluetooth = [ν1];
102 IOBluetooth = [ν1];
103 IOBluetoothUI = [ξ1];
103 IOBluetoothUI = [ξ1];
104− IOKit = ∀ α. α;
104+ IOKit = ∀ α. [α];
105 IOSurface = [φ];
105 IOSurface = [φ];
106− ImageCaptureCore = ∀ α. α;
106+ ImageCaptureCore = ∀ α. [α];
107 ImageIO = [ο1];
107 ImageIO = [ο1];
108 InputMethodKit = [π1];
108 InputMethodKit = [π1];
109− InstallerPlugins = ∀ α. α;
109+ InstallerPlugins = ∀ α. [α];
110− InstantMessage = ∀ α. α;
110+ InstantMessage = ∀ α. [α];
111− JavaFrameEmbedding = ∀ α. α;
111+ JavaFrameEmbedding = ∀ α. [α];
112− JavaNativeFoundation = ∀ α. α;
112+ JavaNativeFoundation = ∀ α. [α];
113− JavaRuntimeSupport = ∀ α. α;
113+ JavaRuntimeSupport = ∀ α. [α];
114− JavaScriptCore = ∀ α. α;
114+ JavaScriptCore = ∀ α. [α];
115− JavaVM = ∀ α. α;
115+ JavaVM = ∀ α. [α];
116− Kerberos = ∀ α. α;
116+ Kerberos = ∀ α. [α];
117 Kernel = [ρ1];
117 Kernel = [ρ1];
118− LDAP = ∀ α. α;
118+ LDAP = ∀ α. [α];
119 LatentSemanticMapping = [σ1];
119 LatentSemanticMapping = [σ1];
120− LocalAuthentication = ∀ α. α;
120+ LocalAuthentication = ∀ α. [α];
121− MapKit = ∀ α. α;
121+ MapKit = ∀ α. [α];
122 MediaAccessibility = [τ1];
122 MediaAccessibility = [τ1];
123− MediaPlayer = ∀ α. α;
123+ MediaPlayer = ∀ α. [α];
124 MediaToolbox = [υ1];
124 MediaToolbox = [υ1];
125− Metal = ∀ α. α;
125+ Metal = ∀ α. [α];
126 MetalKit = [σ];
126 MetalKit = [σ];
127− ModelIO = ∀ α. α;
127+ ModelIO = ∀ α. [α];
128− NetFS = ∀ α. α;
128+ NetFS = ∀ α. [α];
129 OSAKit = [φ1];
129 OSAKit = [φ1];
130− OpenAL = ∀ α. α;
130+ OpenAL = ∀ α. [α];
131 OpenCL = [χ1];
131 OpenCL = [χ1];
132− OpenDirectory = ∀ α. α;
132+ OpenDirectory = ∀ α. [α];
133− OpenGL = ∀ α. α;
133+ OpenGL = ∀ α. [α];
134 PCSC = [ψ1];
134 PCSC = [ψ1];
135− PreferencePanes = ∀ α. α;
135+ PreferencePanes = ∀ α. [α];
136− PubSub = ∀ α. α;
136+ PubSub = ∀ α. [α];
137 QTKit = [μ];
137 QTKit = [μ];
138 Quartz = [τ];
138 Quartz = [τ];
139 QuartzCore = [κ];
139 QuartzCore = [κ];
140 QuickLook = [ω1];
140 QuickLook = [ω1];
141 QuickTime = [α2];
141 QuickTime = [α2];
142− SceneKit = ∀ α. α;
142+ SceneKit = ∀ α. [α];
143− ScreenSaver = ∀ α. α;
143+ ScreenSaver = ∀ α. [α];
144− Scripting = ∀ α. α;
144+ Scripting = ∀ α. [α];
145− ScriptingBridge = ∀ α. α;
145+ ScriptingBridge = ∀ α. [α];
146 Security = [β2];
146 Security = [β2];
147− SecurityFoundation = ∀ α. α;
147+ SecurityFoundation = ∀ α. [α];
148 SecurityInterface = [γ2];
148 SecurityInterface = [γ2];
149 ServiceManagement = [δ2];
149 ServiceManagement = [δ2];
150− Social = ∀ α. α;
150+ Social = ∀ α. [α];
151− SpriteKit = ∀ α. α;
151+ SpriteKit = ∀ α. [α];
152− StoreKit = ∀ α. α;
152+ StoreKit = ∀ α. [α];
153− SyncServices = ∀ α. α;
153+ SyncServices = ∀ α. [α];
154 SystemConfiguration = [ε2];
154 SystemConfiguration = [ε2];
155 TWAIN = [ζ2];
155 TWAIN = [ζ2];
156− Tcl = ∀ α. α;
156+ Tcl = ∀ α. [α];
157 VideoDecodeAcceleration = [η2];
157 VideoDecodeAcceleration = [η2];
158 VideoToolbox = [θ2];
158 VideoToolbox = [θ2];
159 WebKit = [ρ];
159 WebKit = [ρ];
160− vmnet = ∀ α. α;
160+ vmnet = ∀ α. [α];
161}
161}
test/golden/importless/freeoffice.txt+9−12
@@ -1,16 +1,13 @@
1∀ α β γ δ.
1∀ α β γ δ.
2−( ( α
2+( α //
3− ) //
4− ( { archive = String;
3+ { archive = String;
5− edition = String;
4+ edition = String;
6− pname = String;
5+ pname = String;
7− src = β;
6+ src = β;
8− suiteName = String;
7+ suiteName = String;
9− version = String;
8+ version = String;
10− }
9+ } ~
11− ) ~
12− ( γ
10+ γ,
13− ),
14 α.?officeVersion = {edition = String; sha256 = String; version = String;},
11 α.?officeVersion = {edition = String; sha256 = String; version = String;},
15 α.callPackage = String -> γ -> δ,
12 α.callPackage = String -> γ -> δ,
16 α.fetchurl = {sha256 = String; url = String;} -> β
13 α.fetchurl = {sha256 = String; url = String;} -> β
test/golden/importless/fs.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optional = Bool -> ε -> ζ,
3 δ.optional = Bool -> ε -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/full.txt+1−1
@@ -5,7 +5,7 @@
5 meta =
5 meta =
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8− hydraPlatforms = ∀ α. α;
8+ hydraPlatforms = ∀ α. [α];
9 license = [δ];
9 license = [δ];
10 maintainers = [ε];
10 maintainers = [ε];
11 platforms = ζ;
11 platforms = ζ;
test/golden/importless/garbage-pools.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/gdk-pixbuf.txt+2−2
@@ -7,7 +7,7 @@
7 δ.mkIf =
7 δ.mkIf =
8 Bool ->
8 Bool ->
9 {environment = {variables = {GDK_PIXBUF_MODULE_FILE = String;};};} -> θ,
9 {environment = {variables = {GDK_PIXBUF_MODULE_FILE = String;};};} -> θ,
10− δ.mkOption = {default = ∀ α. α; description = String; type = ι;} -> κ,
10+ δ.mkOption = {default = ∀ α. [α]; description = String; type = ι;} -> κ,
11 δ.types = λ,
11 δ.types = λ,
12 δ.unique = [μ] -> ν,
12 δ.unique = [μ] -> ν,
13 ε.gdk-pixbuf = μ,
13 ε.gdk-pixbuf = μ,
@@ -15,7 +15,7 @@
15 η.modulePackages = [μ],
15 η.modulePackages = [μ],
16 ζ.xserver = ο,
16 ζ.xserver = ο,
17 ο.gdk-pixbuf = π,
17 ο.gdk-pixbuf = π,
18− π.modulePackages = ρ,
18+ π.modulePackages = [ρ],
19 λ.listOf = σ -> ι,
19 λ.listOf = σ -> ι,
20 τ.package = σ
20 τ.package = σ
21) =>
21) =>
test/golden/importless/gemset-beta.txt+36−36
@@ -1,228 +1,228 @@
1{ CFPropertyList =
1{ CFPropertyList =
2 { groups = [String];
2 { groups = [String];
3− platforms = ∀ α. α;
3+ platforms = ∀ α. [α];
4 source = {remotes = [String]; sha256 = String; type = String;};
4 source = {remotes = [String]; sha256 = String; type = String;};
5 version = String;
5 version = String;
6 };
6 };
7 activesupport =
7 activesupport =
8 { dependencies = [String];
8 { dependencies = [String];
9 groups = [String];
9 groups = [String];
10− platforms = ∀ α. α;
10+ platforms = ∀ α. [α];
11 source = {remotes = [String]; sha256 = String; type = String;};
11 source = {remotes = [String]; sha256 = String; type = String;};
12 version = String;
12 version = String;
13 };
13 };
14 addressable =
14 addressable =
15 { dependencies = [String];
15 { dependencies = [String];
16 groups = [String];
16 groups = [String];
17− platforms = ∀ α. α;
17+ platforms = ∀ α. [α];
18 source = {remotes = [String]; sha256 = String; type = String;};
18 source = {remotes = [String]; sha256 = String; type = String;};
19 version = String;
19 version = String;
20 };
20 };
21 algoliasearch =
21 algoliasearch =
22 { dependencies = [String];
22 { dependencies = [String];
23 groups = [String];
23 groups = [String];
24− platforms = ∀ α. α;
24+ platforms = ∀ α. [α];
25 source = {remotes = [String]; sha256 = String; type = String;};
25 source = {remotes = [String]; sha256 = String; type = String;};
26 version = String;
26 version = String;
27 };
27 };
28 atomos =
28 atomos =
29 { groups = [String];
29 { groups = [String];
30− platforms = ∀ α. α;
30+ platforms = ∀ α. [α];
31 source = {remotes = [String]; sha256 = String; type = String;};
31 source = {remotes = [String]; sha256 = String; type = String;};
32 version = String;
32 version = String;
33 };
33 };
34 claide =
34 claide =
35 { groups = [String];
35 { groups = [String];
36− platforms = ∀ α. α;
36+ platforms = ∀ α. [α];
37 source = {remotes = [String]; sha256 = String; type = String;};
37 source = {remotes = [String]; sha256 = String; type = String;};
38 version = String;
38 version = String;
39 };
39 };
40 cocoapods =
40 cocoapods =
41 { dependencies = [String];
41 { dependencies = [String];
42 groups = [String];
42 groups = [String];
43− platforms = ∀ α. α;
43+ platforms = ∀ α. [α];
44 source = {remotes = [String]; sha256 = String; type = String;};
44 source = {remotes = [String]; sha256 = String; type = String;};
45 version = String;
45 version = String;
46 };
46 };
47 cocoapods-core =
47 cocoapods-core =
48 { dependencies = [String];
48 { dependencies = [String];
49 groups = [String];
49 groups = [String];
50− platforms = ∀ α. α;
50+ platforms = ∀ α. [α];
51 source = {remotes = [String]; sha256 = String; type = String;};
51 source = {remotes = [String]; sha256 = String; type = String;};
52 version = String;
52 version = String;
53 };
53 };
54 cocoapods-deintegrate =
54 cocoapods-deintegrate =
55 { groups = [String];
55 { groups = [String];
56− platforms = ∀ α. α;
56+ platforms = ∀ α. [α];
57 source = {remotes = [String]; sha256 = String; type = String;};
57 source = {remotes = [String]; sha256 = String; type = String;};
58 version = String;
58 version = String;
59 };
59 };
60 cocoapods-downloader =
60 cocoapods-downloader =
61 { groups = [String];
61 { groups = [String];
62− platforms = ∀ α. α;
62+ platforms = ∀ α. [α];
63 source = {remotes = [String]; sha256 = String; type = String;};
63 source = {remotes = [String]; sha256 = String; type = String;};
64 version = String;
64 version = String;
65 };
65 };
66 cocoapods-plugins =
66 cocoapods-plugins =
67 { dependencies = [String];
67 { dependencies = [String];
68 groups = [String];
68 groups = [String];
69− platforms = ∀ α. α;
69+ platforms = ∀ α. [α];
70 source = {remotes = [String]; sha256 = String; type = String;};
70 source = {remotes = [String]; sha256 = String; type = String;};
71 version = String;
71 version = String;
72 };
72 };
73 cocoapods-search =
73 cocoapods-search =
74 { groups = [String];
74 { groups = [String];
75− platforms = ∀ α. α;
75+ platforms = ∀ α. [α];
76 source = {remotes = [String]; sha256 = String; type = String;};
76 source = {remotes = [String]; sha256 = String; type = String;};
77 version = String;
77 version = String;
78 };
78 };
79 cocoapods-trunk =
79 cocoapods-trunk =
80 { dependencies = [String];
80 { dependencies = [String];
81 groups = [String];
81 groups = [String];
82− platforms = ∀ α. α;
82+ platforms = ∀ α. [α];
83 source = {remotes = [String]; sha256 = String; type = String;};
83 source = {remotes = [String]; sha256 = String; type = String;};
84 version = String;
84 version = String;
85 };
85 };
86 cocoapods-try =
86 cocoapods-try =
87 { groups = [String];
87 { groups = [String];
88− platforms = ∀ α. α;
88+ platforms = ∀ α. [α];
89 source = {remotes = [String]; sha256 = String; type = String;};
89 source = {remotes = [String]; sha256 = String; type = String;};
90 version = String;
90 version = String;
91 };
91 };
92 colored2 =
92 colored2 =
93 { groups = [String];
93 { groups = [String];
94− platforms = ∀ α. α;
94+ platforms = ∀ α. [α];
95 source = {remotes = [String]; sha256 = String; type = String;};
95 source = {remotes = [String]; sha256 = String; type = String;};
96 version = String;
96 version = String;
97 };
97 };
98 concurrent-ruby =
98 concurrent-ruby =
99 { groups = [String];
99 { groups = [String];
100− platforms = ∀ α. α;
100+ platforms = ∀ α. [α];
101 source = {remotes = [String]; sha256 = String; type = String;};
101 source = {remotes = [String]; sha256 = String; type = String;};
102 version = String;
102 version = String;
103 };
103 };
104 escape =
104 escape =
105 { groups = [String];
105 { groups = [String];
106− platforms = ∀ α. α;
106+ platforms = ∀ α. [α];
107 source = {remotes = [String]; sha256 = String; type = String;};
107 source = {remotes = [String]; sha256 = String; type = String;};
108 version = String;
108 version = String;
109 };
109 };
110 ethon =
110 ethon =
111 { dependencies = [String];
111 { dependencies = [String];
112 groups = [String];
112 groups = [String];
113− platforms = ∀ α. α;
113+ platforms = ∀ α. [α];
114 source = {remotes = [String]; sha256 = String; type = String;};
114 source = {remotes = [String]; sha256 = String; type = String;};
115 version = String;
115 version = String;
116 };
116 };
117 ffi =
117 ffi =
118 { groups = [String];
118 { groups = [String];
119− platforms = ∀ α. α;
119+ platforms = ∀ α. [α];
120 source = {remotes = [String]; sha256 = String; type = String;};
120 source = {remotes = [String]; sha256 = String; type = String;};
121 version = String;
121 version = String;
122 };
122 };
123 fourflusher =
123 fourflusher =
124 { groups = [String];
124 { groups = [String];
125− platforms = ∀ α. α;
125+ platforms = ∀ α. [α];
126 source = {remotes = [String]; sha256 = String; type = String;};
126 source = {remotes = [String]; sha256 = String; type = String;};
127 version = String;
127 version = String;
128 };
128 };
129 fuzzy_match =
129 fuzzy_match =
130 { groups = [String];
130 { groups = [String];
131− platforms = ∀ α. α;
131+ platforms = ∀ α. [α];
132 source = {remotes = [String]; sha256 = String; type = String;};
132 source = {remotes = [String]; sha256 = String; type = String;};
133 version = String;
133 version = String;
134 };
134 };
135 gh_inspector =
135 gh_inspector =
136 { groups = [String];
136 { groups = [String];
137− platforms = ∀ α. α;
137+ platforms = ∀ α. [α];
138 source = {remotes = [String]; sha256 = String; type = String;};
138 source = {remotes = [String]; sha256 = String; type = String;};
139 version = String;
139 version = String;
140 };
140 };
141 httpclient =
141 httpclient =
142 { groups = [String];
142 { groups = [String];
143− platforms = ∀ α. α;
143+ platforms = ∀ α. [α];
144 source = {remotes = [String]; sha256 = String; type = String;};
144 source = {remotes = [String]; sha256 = String; type = String;};
145 version = String;
145 version = String;
146 };
146 };
147 i18n =
147 i18n =
148 { dependencies = [String];
148 { dependencies = [String];
149 groups = [String];
149 groups = [String];
150− platforms = ∀ α. α;
150+ platforms = ∀ α. [α];
151 source = {remotes = [String]; sha256 = String; type = String;};
151 source = {remotes = [String]; sha256 = String; type = String;};
152 version = String;
152 version = String;
153 };
153 };
154 json =
154 json =
155 { groups = [String];
155 { groups = [String];
156− platforms = ∀ α. α;
156+ platforms = ∀ α. [α];
157 source = {remotes = [String]; sha256 = String; type = String;};
157 source = {remotes = [String]; sha256 = String; type = String;};
158 version = String;
158 version = String;
159 };
159 };
160 minitest =
160 minitest =
161 { groups = [String];
161 { groups = [String];
162− platforms = ∀ α. α;
162+ platforms = ∀ α. [α];
163 source = {remotes = [String]; sha256 = String; type = String;};
163 source = {remotes = [String]; sha256 = String; type = String;};
164 version = String;
164 version = String;
165 };
165 };
166 molinillo =
166 molinillo =
167 { groups = [String];
167 { groups = [String];
168− platforms = ∀ α. α;
168+ platforms = ∀ α. [α];
169 source = {remotes = [String]; sha256 = String; type = String;};
169 source = {remotes = [String]; sha256 = String; type = String;};
170 version = String;
170 version = String;
171 };
171 };
172 nanaimo =
172 nanaimo =
173 { groups = [String];
173 { groups = [String];
174− platforms = ∀ α. α;
174+ platforms = ∀ α. [α];
175 source = {remotes = [String]; sha256 = String; type = String;};
175 source = {remotes = [String]; sha256 = String; type = String;};
176 version = String;
176 version = String;
177 };
177 };
178 nap =
178 nap =
179 { groups = [String];
179 { groups = [String];
180− platforms = ∀ α. α;
180+ platforms = ∀ α. [α];
181 source = {remotes = [String]; sha256 = String; type = String;};
181 source = {remotes = [String]; sha256 = String; type = String;};
182 version = String;
182 version = String;
183 };
183 };
184 netrc =
184 netrc =
185 { groups = [String];
185 { groups = [String];
186− platforms = ∀ α. α;
186+ platforms = ∀ α. [α];
187 source = {remotes = [String]; sha256 = String; type = String;};
187 source = {remotes = [String]; sha256 = String; type = String;};
188 version = String;
188 version = String;
189 };
189 };
190 public_suffix =
190 public_suffix =
191 { groups = [String];
191 { groups = [String];
192− platforms = ∀ α. α;
192+ platforms = ∀ α. [α];
193 source = {remotes = [String]; sha256 = String; type = String;};
193 source = {remotes = [String]; sha256 = String; type = String;};
194 version = String;
194 version = String;
195 };
195 };
196 ruby-macho =
196 ruby-macho =
197 { groups = [String];
197 { groups = [String];
198− platforms = ∀ α. α;
198+ platforms = ∀ α. [α];
199 source = {remotes = [String]; sha256 = String; type = String;};
199 source = {remotes = [String]; sha256 = String; type = String;};
200 version = String;
200 version = String;
201 };
201 };
202 thread_safe =
202 thread_safe =
203 { groups = [String];
203 { groups = [String];
204− platforms = ∀ α. α;
204+ platforms = ∀ α. [α];
205 source = {remotes = [String]; sha256 = String; type = String;};
205 source = {remotes = [String]; sha256 = String; type = String;};
206 version = String;
206 version = String;
207 };
207 };
208 typhoeus =
208 typhoeus =
209 { dependencies = [String];
209 { dependencies = [String];
210 groups = [String];
210 groups = [String];
211− platforms = ∀ α. α;
211+ platforms = ∀ α. [α];
212 source = {remotes = [String]; sha256 = String; type = String;};
212 source = {remotes = [String]; sha256 = String; type = String;};
213 version = String;
213 version = String;
214 };
214 };
215 tzinfo =
215 tzinfo =
216 { dependencies = [String];
216 { dependencies = [String];
217 groups = [String];
217 groups = [String];
218− platforms = ∀ α. α;
218+ platforms = ∀ α. [α];
219 source = {remotes = [String]; sha256 = String; type = String;};
219 source = {remotes = [String]; sha256 = String; type = String;};
220 version = String;
220 version = String;
221 };
221 };
222 xcodeproj =
222 xcodeproj =
223 { dependencies = [String];
223 { dependencies = [String];
224 groups = [String];
224 groups = [String];
225− platforms = ∀ α. α;
225+ platforms = ∀ α. [α];
226 source = {remotes = [String]; sha256 = String; type = String;};
226 source = {remotes = [String]; sha256 = String; type = String;};
227 version = String;
227 version = String;
228 };
228 };
test/golden/importless/gemset_libvirt.txt+15−15
@@ -1,97 +1,97 @@
1{ builder =
1{ builder =
2 { groups = [String];
2 { groups = [String];
3− platforms = ∀ α. α;
3+ platforms = ∀ α. [α];
4 source = {remotes = [String]; sha256 = String; type = String;};
4 source = {remotes = [String]; sha256 = String; type = String;};
5 version = String;
5 version = String;
6 };
6 };
7 excon =
7 excon =
8 { groups = [String];
8 { groups = [String];
9− platforms = ∀ α. α;
9+ platforms = ∀ α. [α];
10 source = {remotes = [String]; sha256 = String; type = String;};
10 source = {remotes = [String]; sha256 = String; type = String;};
11 version = String;
11 version = String;
12 };
12 };
13 fog-core =
13 fog-core =
14 { dependencies = [String];
14 { dependencies = [String];
15 groups = [String];
15 groups = [String];
16− platforms = ∀ α. α;
16+ platforms = ∀ α. [α];
17 source = {remotes = [String]; sha256 = String; type = String;};
17 source = {remotes = [String]; sha256 = String; type = String;};
18 version = String;
18 version = String;
19 };
19 };
20 fog-json =
20 fog-json =
21 { dependencies = [String];
21 { dependencies = [String];
22 groups = [String];
22 groups = [String];
23− platforms = ∀ α. α;
23+ platforms = ∀ α. [α];
24 source = {remotes = [String]; sha256 = String; type = String;};
24 source = {remotes = [String]; sha256 = String; type = String;};
25 version = String;
25 version = String;
26 };
26 };
27 fog-libvirt =
27 fog-libvirt =
28 { dependencies = [String];
28 { dependencies = [String];
29 groups = [String];
29 groups = [String];
30− platforms = ∀ α. α;
30+ platforms = ∀ α. [α];
31 source = {remotes = [String]; sha256 = String; type = String;};
31 source = {remotes = [String]; sha256 = String; type = String;};
32 version = String;
32 version = String;
33 };
33 };
34 fog-xml =
34 fog-xml =
35 { dependencies = [String];
35 { dependencies = [String];
36 groups = [String];
36 groups = [String];
37− platforms = ∀ α. α;
37+ platforms = ∀ α. [α];
38 source = {remotes = [String]; sha256 = String; type = String;};
38 source = {remotes = [String]; sha256 = String; type = String;};
39 version = String;
39 version = String;
40 };
40 };
41 formatador =
41 formatador =
42 { groups = [String];
42 { groups = [String];
43− platforms = ∀ α. α;
43+ platforms = ∀ α. [α];
44 source = {remotes = [String]; sha256 = String; type = String;};
44 source = {remotes = [String]; sha256 = String; type = String;};
45 version = String;
45 version = String;
46 };
46 };
47 json =
47 json =
48 { groups = [String];
48 { groups = [String];
49− platforms = ∀ α. α;
49+ platforms = ∀ α. [α];
50 source = {remotes = [String]; sha256 = String; type = String;};
50 source = {remotes = [String]; sha256 = String; type = String;};
51 version = String;
51 version = String;
52 };
52 };
53 mime-types =
53 mime-types =
54 { dependencies = [String];
54 { dependencies = [String];
55 groups = [String];
55 groups = [String];
56− platforms = ∀ α. α;
56+ platforms = ∀ α. [α];
57 source = {remotes = [String]; sha256 = String; type = String;};
57 source = {remotes = [String]; sha256 = String; type = String;};
58 version = String;
58 version = String;
59 };
59 };
60 mime-types-data =
60 mime-types-data =
61 { groups = [String];
61 { groups = [String];
62− platforms = ∀ α. α;
62+ platforms = ∀ α. [α];
63 source = {remotes = [String]; sha256 = String; type = String;};
63 source = {remotes = [String]; sha256 = String; type = String;};
64 version = String;
64 version = String;
65 };
65 };
66 mini_portile2 =
66 mini_portile2 =
67 { groups = [String];
67 { groups = [String];
68− platforms = ∀ α. α;
68+ platforms = ∀ α. [α];
69 source = {remotes = [String]; sha256 = String; type = String;};
69 source = {remotes = [String]; sha256 = String; type = String;};
70 version = String;
70 version = String;
71 };
71 };
72 multi_json =
72 multi_json =
73 { groups = [String];
73 { groups = [String];
74− platforms = ∀ α. α;
74+ platforms = ∀ α. [α];
75 source = {remotes = [String]; sha256 = String; type = String;};
75 source = {remotes = [String]; sha256 = String; type = String;};
76 version = String;
76 version = String;
77 };
77 };
78 nokogiri =
78 nokogiri =
79 { dependencies = [String];
79 { dependencies = [String];
80 groups = [String];
80 groups = [String];
81− platforms = ∀ α. α;
81+ platforms = ∀ α. [α];
82 source = {remotes = [String]; sha256 = String; type = String;};
82 source = {remotes = [String]; sha256 = String; type = String;};
83 version = String;
83 version = String;
84 };
84 };
85 ruby-libvirt =
85 ruby-libvirt =
86 { groups = [String];
86 { groups = [String];
87− platforms = ∀ α. α;
87+ platforms = ∀ α. [α];
88 source = {remotes = [String]; sha256 = String; type = String;};
88 source = {remotes = [String]; sha256 = String; type = String;};
89 version = String;
89 version = String;
90 };
90 };
91 vagrant-libvirt =
91 vagrant-libvirt =
92 { dependencies = [String];
92 { dependencies = [String];
93 groups = [String];
93 groups = [String];
94− platforms = ∀ α. α;
94+ platforms = ∀ α. [α];
95 source = {remotes = [String]; sha256 = String; type = String;};
95 source = {remotes = [String]; sha256 = String; type = String;};
96 version = String;
96 version = String;
97 };
97 };
test/golden/importless/generatorrunner.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 name = String;
13 name = String;
test/golden/importless/generic-builder.txt+13−16
@@ -1,20 +1,17 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2−( (α) // ({name = String;}) ~ (β),
2+( α // {name = String;} ~ β,
3− ( { NIX_CFLAGS_COMPILE = γ;
3+ { NIX_CFLAGS_COMPILE = γ;
4− buildInputs = [δ];
4+ buildInputs = [δ];
5− buildPhase = String;
5+ buildPhase = String;
6− checkPhase = String;
6+ checkPhase = String;
7− configurePhase = String;
7+ configurePhase = String;
8− installFlags = [String];
8+ installFlags = [String];
9− installPhase = String;
9+ installPhase = String;
10− postFixup = String;
10+ postFixup = String;
11− rCommand = String;
11+ rCommand = String;
12− }
13− ) //
12+ } //
14− ( β
13+ β ~
15− ) ~
16− ( ε
14+ ε,
17− ),
18 α.?buildInputs = [δ],
15 α.?buildInputs = [δ],
19 α.?doCheck = Bool,
16 α.?doCheck = Bool,
20 α.?requireX = Bool,
17 α.?requireX = Bool,
test/golden/importless/generic-stack-builder.txt+19−22
@@ -1,31 +1,28 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { GIT_SSL_CAINFO = String;
3+ { GIT_SSL_CAINFO = String;
5− LANG = String;
4+ LANG = String;
6− LD_LIBRARY_PATH = β;
5+ LD_LIBRARY_PATH = β;
7− STACK_IN_NIX_EXTRA_ARGS = γ;
6+ STACK_IN_NIX_EXTRA_ARGS = [γ];
8− STACK_IN_NIX_SHELL = Number;
7+ STACK_IN_NIX_SHELL = Number;
9− STACK_PLATFORM_VARIANT = String;
8+ STACK_PLATFORM_VARIANT = String;
10− __noChroot = Bool;
9+ __noChroot = Bool;
11− buildInputs = [δ];
10+ buildInputs = [δ];
12− buildPhase = String;
11+ buildPhase = String;
13− checkPhase = String;
12+ checkPhase = String;
14− doCheck = Bool;
13+ doCheck = Bool;
15− installPhase = String;
14+ installPhase = String;
16− nativeBuildInputs = [ε];
15+ nativeBuildInputs = [ε];
17− preConfigure = String;
16+ preConfigure = String;
18− preferLocalBuild = Bool;
17+ preferLocalBuild = Bool;
19− }
18+ } ~
20− ) ~
21− ( ζ
19+ ζ,
22− ),
23 α.?LD_LIBRARY_PATH = [δ],
20 α.?LD_LIBRARY_PATH = [δ],
24 α.?buildInputs = [δ],
21 α.?buildInputs = [δ],
25 α.?buildPhase = String,
22 α.?buildPhase = String,
26 α.?checkPhase = String,
23 α.?checkPhase = String,
27 α.?doCheck = Bool,
24 α.?doCheck = Bool,
28− α.?extraArgs = γ,
25+ α.?extraArgs = [γ],
29 α.?ghc = ε,
26 α.?ghc = ε,
30 α.?installPhase = String,
27 α.?installPhase = String,
31 α.?nativeBuildInputs = [ε],
28 α.?nativeBuildInputs = [ε],
test/golden/importless/geogebra6.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2−( (β) // ({license = γ; maintainers = [δ]; platforms = ε;}) ~ (ζ),
2+( β // {license = γ; maintainers = [δ]; platforms = ε;} ~ ζ,
3 η.lib = θ,
3 η.lib = θ,
4 η.mkDerivation =
4 η.mkDerivation =
5 { desktopItem = ι;
5 { desktopItem = ι;
test/golden/importless/gerbil-ethereum.txt+1−1
@@ -3,7 +3,7 @@
3 β.maintainers = δ,
3 β.maintainers = δ,
4 β.platforms = ε,
4 β.platforms = ε,
5 ζ.gerbilPackage =
5 ζ.gerbilPackage =
6− { buildInputs = ∀ α. α;
6+ { buildInputs = ∀ α. [α];
7 gambit-params = η;
7 gambit-params = η;
8 gerbil = θ;
8 gerbil = θ;
9 gerbil-package = String;
9 gerbil-package = String;
test/golden/importless/gerbil-persist.txt+1−1
@@ -3,7 +3,7 @@
3 β.maintainers = δ,
3 β.maintainers = δ,
4 β.platforms = ε,
4 β.platforms = ε,
5 ζ.gerbilPackage =
5 ζ.gerbilPackage =
6− { buildInputs = ∀ α. α;
6+ { buildInputs = ∀ α. [α];
7 gambit-params = η;
7 gambit-params = η;
8 gerbil = θ;
8 gerbil = θ;
9 gerbil-package = String;
9 gerbil-package = String;
test/golden/importless/gerbil-poo.txt+1−1
@@ -3,7 +3,7 @@
3 β.maintainers = δ,
3 β.maintainers = δ,
4 β.platforms = ε,
4 β.platforms = ε,
5 ζ.gerbilPackage =
5 ζ.gerbilPackage =
6− { buildInputs = ∀ α. α;
6+ { buildInputs = ∀ α. [α];
7 gambit-params = η;
7 gambit-params = η;
8 gerbil = θ;
8 gerbil = θ;
9 gerbil-package = String;
9 gerbil-package = String;
test/golden/importless/global-vars.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/gmusic.txt+1−1
@@ -5,7 +5,7 @@
5 meta =
5 meta =
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8− hydraPlatforms = ∀ α. α;
8+ hydraPlatforms = ∀ α. [α];
9 license = ε;
9 license = ε;
10 maintainers = [ζ];
10 maintainers = [ζ];
11 };
11 };
test/golden/importless/graphql.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ.
1∀ β γ δ ε ζ η θ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.src = ε,
4 δ.src = ε,
5 δ.version = ζ
5 δ.version = ζ
test/golden/importless/helper.txt+1−1
@@ -5,7 +5,7 @@
5 installPhase = String;
5 installPhase = String;
6 meta =
6 meta =
7 { description = String;
7 { description = String;
8− hydraPlatforms = ∀ α. α;
8+ hydraPlatforms = ∀ α. [α];
9 license = ε;
9 license = ε;
10 maintainers = [ζ];
10 maintainers = [ζ];
11 platforms = η;
11 platforms = η;
test/golden/importless/http.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optionals = Bool -> [ε] -> ζ,
3 δ.optionals = Bool -> [ε] -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/imapfilter.txt+1−1
@@ -6,7 +6,7 @@
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8 license = δ;
8 license = δ;
9− maintainers = ∀ α. α;
9+ maintainers = ∀ α. [α];
10 platforms = ε;
10 platforms = ε;
11 };
11 };
12 pname = String;
12 pname = String;
test/golden/importless/integrations-core.txt+10−13
@@ -1,17 +1,14 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
2−( ( α
2+( α //
3− ) //
4− ( { doCheck = Bool;
3+ { doCheck = Bool;
5− name = String;
4+ name = String;
6− postPatch = String;
5+ postPatch = String;
7− sourceRoot = String;
6+ sourceRoot = String;
8− src = β;
7+ src = β;
9− version = String;
8+ version = String;
10− }
11− ) ~
9+ } ~
12− ( γ
10+ γ,
13− ),
14− (δ) // ({datadog_checks_base = ε; python = ζ;}) ~ (η),
11+ δ // {datadog_checks_base = ε; python = ζ;} ~ η,
15 θ.fetchFromGitHub =
12 θ.fetchFromGitHub =
16 {owner = String; repo = String; rev = String; sha256 = String;} -> β,
13 {owner = String; repo = String; rev = String; sha256 = String;} -> β,
17 θ.lib = ι,
14 θ.lib = ι,
test/golden/importless/introspect-environment.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/iterate.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/janePackage.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ.
1∀ α β γ δ ε ζ η θ ι κ.
2−( ( α
2+( α //
3− ) //
4− ( { meta = {homepage = String; license = β;};
3+ { meta = {homepage = String; license = β;};
5− minimumOCamlVersion = String;
4+ minimumOCamlVersion = String;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?version = String,
9 α.?version = String,
13 ε.lib = ζ,
10 ε.lib = ζ,
14 α.hash = η,
11 α.hash = η,
test/golden/importless/janePackage_0_12.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι.
1∀ α β γ δ ε ζ η θ ι.
2−( ( α
2+( α //
3− ) //
4− ( { meta = {homepage = String; license = β;};
3+ { meta = {homepage = String; license = β;};
5− minimumOCamlVersion = String;
4+ minimumOCamlVersion = String;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?version = String,
9 α.?version = String,
13 ε.licenses = ζ,
10 ε.licenses = ζ,
14 α.hash = η,
11 α.hash = η,
test/golden/importless/janePackage_0_13.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι.
1∀ α β γ δ ε ζ η θ ι.
2−( ( α
2+( α //
3− ) //
4− ( { meta = {homepage = String; license = β;};
3+ { meta = {homepage = String; license = β;};
5− minimumOCamlVersion = String;
4+ minimumOCamlVersion = String;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?version = String,
9 α.?version = String,
13 ε.licenses = ζ,
10 ε.licenses = ζ,
14 α.hash = η,
11 α.hash = η,
test/golden/importless/java.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.config = ε,
3 δ.config = ε,
4 δ.lib = ζ,
4 δ.lib = ζ,
5 δ.pkgs = η,
5 δ.pkgs = η,
test/golden/importless/karchive.txtnew file+18
@@ -0,0 +1,18 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { bzip2 = ζ;
3+ extra-cmake-modules = η;
4+ lib = α;
5+ lzma = ζ;
6+ mkDerivation =
7+ { buildInputs = [ζ];
8+ meta = {broken = Bool; maintainers = [ε];};
9+ name = String;
10+ nativeBuildInputs = [η];
11+ outputs = [String];
12+ propagatedBuildInputs = [γ];
13+ } ->
14+ θ;
15+ qtbase = γ;
16+ zlib = ζ;
17+} ->
18+θ
test/golden/importless/kcodecs.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ gperf = η;
4+ lib = α;
5+ mkDerivation =
6+ { buildInputs = [η];
7+ meta = {broken = Bool; maintainers = [ε];};
8+ name = String;
9+ nativeBuildInputs = [ζ];
10+ outputs = [String];
11+ propagatedBuildInputs = [γ];
12+ } ->
13+ θ;
14+ qtbase = γ;
15+ qttools = η;
16+} ->
17+θ
test/golden/importless/kconfig.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ θ;
12+ qtbase = γ;
13+ qttools = η;
14+} ->
15+θ
test/golden/importless/kcoreaddons.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ θ;
12+ qtbase = γ;
13+ qttools = η;
14+ shared-mime-info = η;
15+} ->
16+θ
test/golden/importless/kdbusaddons.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ θ;
12+ qtbase = γ;
13+ qttools = η;
14+ qtx11extras = η;
15+} ->
16+θ
test/golden/importless/kdebugsettings.txt+1−1
@@ -19,7 +19,7 @@
19 meta = {license = [ε]; maintainers = [ζ];};
19 meta = {license = [ε]; maintainers = [ζ];};
20 name = String;
20 name = String;
21 nativeBuildInputs = [η];
21 nativeBuildInputs = [η];
22− propagatedUserEnvPkgs = ∀ α. α;
22+ propagatedUserEnvPkgs = ∀ α. [α];
23 } ->
23 } ->
24 ι;
24 ι;
25 python = θ;
25 python = θ;
test/golden/importless/kdecoration.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ.
2+(α.version = β) => { extra-cmake-modules = γ;
3+ ki18n = α;
4+ mkDerivation =
5+ { broken = Bool;
6+ buildInputs = [α];
7+ meta = {broken = Bool;};
8+ name = String;
9+ nativeBuildInputs = [γ];
10+ outputs = [String];
11+ } ->
12+ δ;
13+ qtbase = α;
14+} ->
15+δ
test/golden/importless/kdnssd.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { avahi = ζ;
3+ extra-cmake-modules = η;
4+ lib = α;
5+ mkDerivation =
6+ { buildInputs = [ζ];
7+ meta = {broken = Bool; maintainers = [ε];};
8+ name = String;
9+ nativeBuildInputs = [η];
10+ outputs = [String];
11+ propagatedBuildInputs = [γ];
12+ } ->
13+ θ;
14+ qtbase = γ;
15+ qttools = ζ;
16+} ->
17+θ
test/golden/importless/kguiaddons.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ outputs = [String];
10+ propagatedBuildInputs = [γ];
11+ } ->
12+ θ;
13+ qtbase = γ;
14+ qtx11extras = η;
15+} ->
16+θ
test/golden/importless/ki18n.txtnew file+18
@@ -0,0 +1,18 @@
1+∀ α β γ δ ε ζ η θ ι.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ gettext = η;
4+ lib = α;
5+ mkDerivation =
6+ { buildInputs = [θ];
7+ meta = {broken = Bool; maintainers = [ε];};
8+ name = String;
9+ nativeBuildInputs = [ζ];
10+ propagatedNativeBuildInputs = [η];
11+ } ->
12+ ι;
13+ python3 = η;
14+ qtbase = γ;
15+ qtdeclarative = θ;
16+ qtscript = θ;
17+} ->
18+ι
test/golden/importless/kidletime.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ θ;
12+ qtbase = γ;
13+ qtx11extras = η;
14+} ->
15+θ
test/golden/importless/kirigami2.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ.
2+(α.version = β) => { extra-cmake-modules = γ;
3+ mkDerivation =
4+ { buildInputs = [α];
5+ meta = {broken = Bool;};
6+ name = String;
7+ nativeBuildInputs = [γ];
8+ outputs = [String];
9+ } ->
10+ δ;
11+ qtbase = α;
12+ qtquickcontrols2 = α;
13+ qttranslations = α;
14+} ->
15+δ
test/golden/importless/kitemmodels.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { meta = {broken = Bool; maintainers = [ε];};
6+ name = String;
7+ nativeBuildInputs = [ζ];
8+ outputs = [String];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ η;
12+ qtbase = γ;
13+} ->
14+η
test/golden/importless/kitemviews.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ outputs = [String];
10+ propagatedBuildInputs = [γ];
11+ } ->
12+ θ;
13+ qtbase = γ;
14+ qttools = η;
15+} ->
16+θ
test/golden/importless/kmrcl.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/konqueror.txt+1−1
@@ -8,7 +8,7 @@
8 lib = β;
8 lib = β;
9 mkDerivation =
9 mkDerivation =
10 { buildInputs = [η];
10 { buildInputs = [η];
11− meta = {license = [ε]; maintainers = ∀ α. α;};
11+ meta = {license = [ε]; maintainers = ∀ α. [α];};
12 name = String;
12 name = String;
13 nativeBuildInputs = [ζ];
13 nativeBuildInputs = [ζ];
14 postPatch = String;
14 postPatch = String;
test/golden/importless/kplotting.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { meta = {broken = Bool; maintainers = [ε];};
6+ name = String;
7+ nativeBuildInputs = [ζ];
8+ outputs = [String];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ η;
12+ qtbase = γ;
13+ qttools = γ;
14+} ->
15+η
test/golden/importless/kwayland.txtnew file+19
@@ -0,0 +1,19 @@
1+∀ α β γ δ ε ζ η θ ι.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ setupHook = θ;
11+ } ->
12+ ι;
13+ plasma-wayland-protocols = η;
14+ propagateBin = θ;
15+ qtbase = γ;
16+ wayland = η;
17+ wayland-protocols = η;
18+} ->
19+ι
test/golden/importless/kwidgetsaddons.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ outputs = [String];
10+ propagatedBuildInputs = [γ];
11+ } ->
12+ θ;
13+ qtbase = γ;
14+ qttools = η;
15+} ->
16+θ
test/golden/importless/lack-component.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/layout-manager.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = δ;
9 license = δ;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ε;
11 platforms = ε;
12 };
12 };
13 nativeBuildInputs = [ζ];
13 nativeBuildInputs = [ζ];
test/golden/importless/libmaa.txt+1−1
@@ -3,7 +3,7 @@
3 β.mkDerivation =
3 β.mkDerivation =
4 { NIX_CFLAGS_COMPILE = String;
4 { NIX_CFLAGS_COMPILE = String;
5 buildInputs = [δ];
5 buildInputs = [δ];
6− meta = {description = String; maintainers = ∀ α. α; platforms = ε;};
6+ meta = {description = String; maintainers = ∀ α. [α]; platforms = ε;};
7 pname = String;
7 pname = String;
8 src = ζ;
8 src = ζ;
9 version = String;
9 version = String;
test/golden/importless/library.txt+1−1
@@ -6,7 +6,7 @@
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9− maintainers = ∀ α. α;
9+ maintainers = ∀ α. [α];
10 platforms = ζ;
10 platforms = ζ;
11 };
11 };
12 nativeBuildInputs = [η];
12 nativeBuildInputs = [η];
test/golden/importless/libtool2.txt+1−1
@@ -10,7 +10,7 @@
10 homepage = String;
10 homepage = String;
11 license = δ;
11 license = δ;
12 longDescription = String;
12 longDescription = String;
13− maintainers = ∀ α. α;
13+ maintainers = ∀ α. [α];
14 platforms = ε;
14 platforms = ε;
15 };
15 };
16 nativeBuildInputs = [ζ];
16 nativeBuildInputs = [ζ];
test/golden/importless/licenses.txt+14−17
@@ -1,21 +1,18 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1.
2−( (α) // ({shortName = β;}) ~ (γ),
2+( α // {shortName = β;} ~ γ,
3− ( δ
3+ δ //
4− ) //
5− ( { agpl3 = ε;
4+ { agpl3 = ε;
6− fdl11 = ζ;
5+ fdl11 = ζ;
7− fdl12 = η;
6+ fdl12 = η;
8− fdl13 = θ;
7+ fdl13 = θ;
9− gpl1 = ι;
8+ gpl1 = ι;
10− gpl2 = κ;
9+ gpl2 = κ;
11− gpl3 = λ;
10+ gpl3 = λ;
12− lgpl2 = μ;
11+ lgpl2 = μ;
13− lgpl21 = ν;
12+ lgpl21 = ν;
14− lgpl3 = ξ;
13+ lgpl3 = ξ;
15− }
16− ) ~
14+ } ~
17− ( ο
15+ ο,
18− ),
19 π.licenses = ρ,
16 π.licenses = ρ,
20 π.mapAttrs =
17 π.mapAttrs =
21 (β -> α -> γ) ->
18 (β -> α -> γ) ->
test/golden/importless/lift.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/linux-4.14.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = β;};
3+ { extraMeta = {branch = β;};
5− modDirVersion = Null;
4+ modDirVersion = Null;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?argsOverride = {},
9 α.?argsOverride = {},
13 α.?modDirVersionArg = Null,
10 α.?modDirVersionArg = Null,
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
test/golden/importless/linux-4.19.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = β;};
3+ { extraMeta = {branch = β;};
5− modDirVersion = Null;
4+ modDirVersion = Null;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?argsOverride = {},
9 α.?argsOverride = {},
13 α.?modDirVersionArg = Null,
10 α.?modDirVersionArg = Null,
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
test/golden/importless/linux-4.4.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η.
1∀ α β γ δ ε ζ η.
2−( (α) // ({extraMeta = {branch = String;}; src = β; version = String;}) ~ (γ),
2+( α // {extraMeta = {branch = String;}; src = β; version = String;} ~ γ,
3 α.?argsOverride = {},
3 α.?argsOverride = {},
4 α.buildLinux = γ -> δ,
4 α.buildLinux = γ -> δ,
5 α.buildPackages = ε,
5 α.buildPackages = ε,
test/golden/importless/linux-4.9.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η.
1∀ α β γ δ ε ζ η.
2−( (α) // ({extraMeta = {branch = String;}; src = β; version = String;}) ~ (γ),
2+( α // {extraMeta = {branch = String;}; src = β; version = String;} ~ γ,
3 α.?argsOverride = {},
3 α.?argsOverride = {},
4 α.buildLinux = γ -> δ,
4 α.buildLinux = γ -> δ,
5 α.buildPackages = ε,
5 α.buildPackages = ε,
test/golden/importless/linux-5.4.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = β;};
3+ { extraMeta = {branch = β;};
5− modDirVersion = Null;
4+ modDirVersion = Null;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?argsOverride = {},
9 α.?argsOverride = {},
13 α.?modDirVersionArg = Null,
10 α.?modDirVersionArg = Null,
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
test/golden/importless/linux-5.8.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = β;};
3+ { extraMeta = {branch = β;};
5− modDirVersion = Null;
4+ modDirVersion = Null;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?argsOverride = {},
9 α.?argsOverride = {},
13 α.?modDirVersionArg = Null,
10 α.?modDirVersionArg = Null,
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
test/golden/importless/linux-5.9.txt+7−10
@@ -1,14 +1,11 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ.
1∀ α β γ δ ε ζ η θ ι κ λ μ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = β;};
3+ { extraMeta = {branch = β;};
5− modDirVersion = Null;
4+ modDirVersion = Null;
6− src = γ;
5+ src = γ;
7− version = String;
6+ version = String;
8− }
9− ) ~
7+ } ~
10− ( δ
8+ δ,
11− ),
12 α.?argsOverride = {},
9 α.?argsOverride = {},
13 α.?modDirVersionArg = Null,
10 α.?modDirVersionArg = Null,
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
test/golden/importless/linux-hardkernel-4.14.txt+9−12
@@ -1,16 +1,13 @@
1∀ α β γ δ ε ζ η θ ι.
1∀ α β γ δ ε ζ η θ ι.
2−( ( α
2+( α //
3− ) //
4− ( { defconfig = String;
3+ { defconfig = String;
5− extraConfig = String;
4+ extraConfig = String;
6− extraMeta = {branch = String; platforms = [String];};
5+ extraMeta = {branch = String; platforms = [String];};
7− modDirVersion = String;
6+ modDirVersion = String;
8− src = β;
7+ src = β;
9− version = String;
8+ version = String;
10− }
11− ) ~
9+ } ~
12− ( γ
10+ γ,
13− ),
14 α.?argsOverride = {},
11 α.?argsOverride = {},
15 α.?extraConfig = String,
12 α.?extraConfig = String,
16 α.buildLinux = γ -> δ,
13 α.buildLinux = γ -> δ,
test/golden/importless/linux-testing-bcachefs.txt+13−16
@@ -1,20 +1,17 @@
1∀ β γ δ ε ζ η θ ι κ λ μ.
1∀ β γ δ ε ζ η θ ι κ λ μ.
2−( ( β
2+( β //
3− ) //
4− ( { extraConfig = String;
3+ { extraConfig = String;
5− extraMeta =
4+ extraMeta =
6− { branch = String;
5+ { branch = String;
7− hydraPlatforms = ∀ α. α;
6+ hydraPlatforms = ∀ α. [α];
8− maintainers = [γ];
7+ maintainers = [γ];
9− platforms = [String];
8+ platforms = [String];
10− };
9+ };
11− modDirVersion = String;
10+ modDirVersion = String;
12− src = δ;
11+ src = δ;
13− version = String;
12+ version = String;
14− }
15− ) ~
13+ } ~
16− ( ε
14+ ε,
17− ),
18 β.?argsOverride = {},
15 β.?argsOverride = {},
19 β.buildLinux = ε -> ζ,
16 β.buildLinux = ε -> ζ,
20 β.buildPackages = η,
17 β.buildPackages = η,
test/golden/importless/linux-testing.txtdeleted−23
@@ -1,23 +0,0 @@
1−∀ β γ δ ε ζ η θ ι κ.
2−( ( β
3− ) //
4− ( { extraMeta = {branch = String; hydraPlatforms = ∀ α. α;};
5− modDirVersion = Null;
6− src = γ;
7− version = String;
8− }
9− ) ~
10− ( δ
11− ),
12− β.?argsOverride = {},
13− β.?modDirVersionArg = Null,
14− β.buildLinux = δ -> ε,
15− β.buildPackages = ζ,
16− β.fetchurl = {sha256 = String; url = String;} -> γ,
17− β.perl = η,
18− β.stdenv = θ,
19− θ.lib = ι,
20− ι.builtins = κ,
21− κ.replaceStrings = [String] -> [String] -> String -> Null
22−) =>
23−β -> ε
test/golden/importless/linux-zen.txt+8−11
@@ -1,15 +1,12 @@
1∀ α β γ δ ε ζ η θ.
1∀ α β γ δ ε ζ η θ.
2−( ( α
2+( α //
3− ) //
4− ( { extraMeta = {branch = String; maintainers = [β];};
3+ { extraMeta = {branch = String; maintainers = [β];};
5− isZen = Bool;
4+ isZen = Bool;
6− modDirVersion = String;
5+ modDirVersion = String;
7− src = γ;
6+ src = γ;
8− version = String;
7+ version = String;
9− }
10− ) ~
8+ } ~
11− ( δ
9+ δ,
12− ),
13 α.?argsOverride = {},
10 α.?argsOverride = {},
14 α.buildLinux = δ -> ε,
11 α.buildLinux = δ -> ε,
15 α.fetchFromGitHub =
12 α.fetchFromGitHub =
test/golden/importless/liquidsoap.txtdeleted−68
@@ -1,68 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1 ι1 κ1
2−λ1 μ1 ν1 ξ1 ο1.
3−( α.config = β,
4− α.lib = γ,
5− α.pkgs = δ,
6− β.ids = ε,
7− β.services = ζ,
8− γ.builtins = η,
9− γ.literalExample = String -> θ,
10− γ.map =
11− ( ι ->
12− { name = ι;
13− value =
14− { after = [String];
15− description = String;
16− path = [κ];
17− serviceConfig =
18− {ExecStart = String; LogsDirectory = String; User = String;};
19− wantedBy = [String];
20− };
21− }
22− ) ->
23− λ -> μ,
24− γ.mkIf =
25− Bool ->
26− { systemd = {services = ν;};
27− users =
28− { groups = {liquidsoap = {gid = ξ;};};
29− users =
30− { liquidsoap =
31− { createHome = Bool;
32− description = String;
33− extraGroups = [String];
34− group = String;
35− home = String;
36− uid = ο;
37− };
38− };
39− };
40− } ->
41− π,
42− γ.mkOption =
43− { default = {};
44− description = String;
45− example = {myStream1 = θ; myStream2 = ρ; myStream3 = σ;};
46− type = τ;
47− } ->
48− υ,
49− γ.types = φ,
50− δ.wget = κ,
51− η.attrNames = χ -> λ,
52− ζ.liquidsoap = ψ,
53− ψ.streams = χ,
54− ω.getAttr = ι -> α1 -> β1,
55− γ1.liquidsoap = δ1,
56− δ1.streams = α1,
57− ε1.length = λ -> Number,
58− ζ1.listToAttrs = μ -> ν,
59− ε.gids = η1,
60− η1.liquidsoap = ξ,
61− θ1.uids = ι1,
62− ι1.liquidsoap = ο,
63− φ.attrsOf = κ1 -> τ,
64− λ1.either = μ1 -> ν1 -> κ1,
65− ξ1.path = μ1,
66− ο1.str = ν1
67−) =>
68−α -> {config = π; options = {services = {liquidsoap = {streams = υ;};};};}
test/golden/importless/lldpd.txt+1−1
@@ -29,7 +29,7 @@
29 } ->
29 } ->
30 ν,
30 ν,
31 δ.mkOption =
31 δ.mkOption =
32− {default = ∀ α. α; description = String; example = [String]; type = ξ;} ->
32+ {default = ∀ α. [α]; description = String; example = [String]; type = ξ;} ->
33 ο,
33 ο,
34 δ.types = π,
34 δ.types = π,
35 ε.lldpd = λ,
35 ε.lldpd = λ,
test/golden/importless/ltc.txt+1−1
@@ -7,7 +7,7 @@
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9 longDescription = String;
9 longDescription = String;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 nativeBuildInputs = [η];
13 nativeBuildInputs = [η];
test/golden/importless/m32edit.txt+8−11
@@ -1,15 +1,12 @@
1∀ α β γ.
1∀ α β γ.
2−( ( α
2+( α //
3− ) //
4− ( { brand = String;
3+ { brand = String;
5− homepage = String;
4+ homepage = String;
6− sha256 = String;
5+ sha256 = String;
7− type = String;
6+ type = String;
8− version = String;
7+ version = String;
9− }
8+ } ~
10− ) ~
11− ( β
9+ β,
12− ),
13 α.callPackage = String -> β -> γ
10 α.callPackage = String -> β -> γ
14) =>
11) =>
15α -> γ
12α -> γ
test/golden/importless/macvim.txt+1−1
@@ -7,7 +7,7 @@
7 meta =
7 meta =
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10− hydraPlatforms = ∀ α. α;
10+ hydraPlatforms = ∀ α. [α];
11 license = ε;
11 license = ε;
12 maintainers = [ζ];
12 maintainers = [ζ];
13 platforms = η;
13 platforms = η;
test/golden/importless/make-dbus-conf.txt+2−2
@@ -7,11 +7,11 @@
7 allowSubstitutes = Bool;
7 allowSubstitutes = Bool;
8 nativeBuildInputs = [β];
8 nativeBuildInputs = [β];
9 preferLocalBuild = Bool;
9 preferLocalBuild = Bool;
10− serviceDirectories = ε;
10+ serviceDirectories = [ε];
11 suidHelper = String;
11 suidHelper = String;
12 } ->
12 } ->
13 String -> ζ;
13 String -> ζ;
14− serviceDirectories = ε;
14+ serviceDirectories = [ε];
15 suidHelper = String;
15 suidHelper = String;
16 writeText = String -> String -> δ;
16 writeText = String -> String -> δ;
17} ->
17} ->
test/golden/importless/make-squashfs.txt+1−1
@@ -6,6 +6,6 @@
6 comp = String;
6 comp = String;
7 squashfsTools = β;
7 squashfsTools = β;
8 stdenv = α;
8 stdenv = α;
9− storeContents = ε;
9+ storeContents = [ε];
10} ->
10} ->
11γ
11γ
test/golden/importless/map-set.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/marshal.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/master.txtdeleted−56
@@ -1,56 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1.
2−( α.config = β,
3− α.lib = γ,
4− α.pkgs = δ,
5− β.environment = ε,
6− β.services = ζ,
7− δ.writeText = String -> η -> θ,
8− γ.aneeshusa = ι,
9− γ.builtins = κ,
10− γ.cfg = λ,
11− γ.maintainers = μ,
12− γ.mkEnableOption = String -> ν,
13− γ.mkIf =
14− ξ ->
15− { environment =
16− {etc = {salt/master = {source = θ;};}; systemPackages = [ο];};
17− systemd =
18− { services =
19− { salt-master =
20− { after = [String];
21− description = String;
22− path = [π];
23− restartTriggers = [ρ];
24− serviceConfig =
25− { ExecStart = String;
26− LimitNOFILE = Number;
27− NotifyAccess = String;
28− Type = String;
29− };
30− wantedBy = [String];
31− };
32− };
33− };
34− } ->
35− σ,
36− γ.mkOption = {default = {}; description = String; type = τ;} -> υ,
37− γ.recursiveUpdate = {default_include = String; pki_dir = String;} -> φ -> χ,
38− γ.salt = ο,
39− γ.types = ψ,
40− γ.utillinux = π,
41− λ.configuration = φ,
42− ζ.salt = ω,
43− ω.master = α1,
44− α1.enable = ξ,
45− κ.toJSON = χ -> η,
46− ε.etc = β1,
47− β1.salt/master = γ1,
48− γ1.source = ρ,
49− ψ.attrs = τ
50−) =>
51−α ->
52−{ config = σ;
53− meta = {maintainers = [ι];};
54− options =
55− {services = {salt = {master = {configuration = υ; enable = ν;};};};};
56−}
test/golden/importless/material-theme.txt+1−1
@@ -7,7 +7,7 @@
7 description = String;
7 description = String;
8 homepage = String;
8 homepage = String;
9 license = δ;
9 license = δ;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ε;
11 platforms = ε;
12 };
12 };
13 patchPhase = String;
13 patchPhase = String;
test/golden/importless/maven-build.txt+17−20
@@ -1,24 +1,21 @@
1∀ α β γ δ ε ζ.
1∀ α β γ δ ε ζ.
2−( ( { finalPhase = String;
2+( { finalPhase = String;
3− mvnAssembly = String;
3+ mvnAssembly = String;
4− mvnCheckstyle = String;
4+ mvnCheckstyle = String;
5− mvnCompile = String;
5+ mvnCompile = String;
6− mvnJar = String;
6+ mvnJar = String;
7− mvnJavadoc = String;
7+ mvnJavadoc = String;
8− mvnRelease = String;
8+ mvnRelease = String;
9− mvnTest = String;
9+ mvnTest = String;
10− mvnTestCompile = String;
10+ mvnTestCompile = String;
11− mvnTestJar = String;
11+ mvnTestJar = String;
12− name = α;
12+ name = α;
13− phases = String;
13+ phases = String;
14− setupPhase = String;
14+ setupPhase = String;
15− src = β;
15+ src = β;
16− }
17− ) //
16+ } //
18− ( γ
17+ γ ~
19− ) ~
20− ( δ
18+ δ,
21− ),
22 γ.?doCheckstyle = Bool,
19 γ.?doCheckstyle = Bool,
23 γ.?doJavadoc = Bool,
20 γ.?doJavadoc = Bool,
24 γ.?doRelease = Bool,
21 γ.?doRelease = Bool,
test/golden/importless/md5.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/mem.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optional = Bool -> ε -> ζ,
3 δ.optional = Bool -> ε -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/metabang-bind.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/metatilities-base.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/minion.txtdeleted−53
@@ -1,53 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1.
2−( α.config = β,
3− α.lib = γ,
4− α.pkgs = δ,
5− β.environment = ε,
6− β.services = ζ,
7− δ.writeText = String -> η -> θ,
8− γ.builtins = ι,
9− γ.cfg = κ,
10− γ.mkEnableOption = String -> λ,
11− γ.mkIf =
12− μ ->
13− { environment =
14− {etc = {salt/minion = {source = θ;};}; systemPackages = [ν];};
15− systemd =
16− { services =
17− { salt-minion =
18− { after = [String];
19− description = String;
20− path = [ξ];
21− restartTriggers = [ο];
22− serviceConfig =
23− { ExecStart = String;
24− LimitNOFILE = Number;
25− NotifyAccess = String;
26− Type = String;
27− };
28− wantedBy = [String];
29− };
30− };
31− };
32− } ->
33− π,
34− γ.mkOption = {default = {}; description = String; type = ρ;} -> σ,
35− γ.recursiveUpdate = {default_include = String; pki_dir = String;} -> τ -> υ,
36− γ.salt = ν,
37− γ.types = φ,
38− γ.utillinux = ξ,
39− κ.configuration = τ,
40− ζ.salt = χ,
41− χ.minion = ψ,
42− ψ.enable = μ,
43− ι.toJSON = υ -> η,
44− ε.etc = ω,
45− ω.salt/minion = α1,
46− α1.source = ο,
47− φ.attrs = ρ
48−) =>
49−α ->
50−{ config = π;
51− options =
52− {services = {salt = {minion = {configuration = σ; enable = λ;};};};};
53−}
test/golden/importless/misc-extensions.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/mk-string-metrics.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/modemmanager-qt.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { meta = {broken = Bool; maintainers = [ε];};
6+ name = String;
7+ nativeBuildInputs = [ζ];
8+ outputs = [String];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ η;
12+ modemmanager = γ;
13+ qtbase = γ;
14+} ->
15+η
test/golden/importless/modules.txt+163−163
@@ -12,201 +12,201 @@
12 postgresql = ι;
12 postgresql = ι;
13} ->
13} ->
14{ applications =
14{ applications =
15− { abstraction = ∀ α. {inputs = α; path = String;};
15+ { abstraction = ∀ α. {inputs = [α]; path = String;};
16 av = {inputs = [δ]; path = String;};
16 av = {inputs = [δ]; path = String;};
17− avmd = ∀ α. {inputs = α; path = String;};
17+ avmd = ∀ α. {inputs = [α]; path = String;};
18− bert = ∀ α. {inputs = α; path = String;};
18+ bert = ∀ α. {inputs = [α]; path = String;};
19− blacklist = ∀ α. {inputs = α; path = String;};
19+ blacklist = ∀ α. {inputs = [α]; path = String;};
20− callcenter = ∀ α. {inputs = α; path = String;};
20+ callcenter = ∀ α. {inputs = [α]; path = String;};
21− cidlookup = ∀ α. {inputs = α; path = String;};
21+ cidlookup = ∀ α. {inputs = [α]; path = String;};
22− cluechoo = ∀ α. {inputs = α; path = String;};
22+ cluechoo = ∀ α. {inputs = [α]; path = String;};
23− commands = ∀ α. {inputs = α; path = String;};
23+ commands = ∀ α. {inputs = [α]; path = String;};
24− conference = ∀ α. {inputs = α; path = String;};
24+ conference = ∀ α. {inputs = [α]; path = String;};
25 curl = {inputs = [γ]; path = String;};
25 curl = {inputs = [γ]; path = String;};
26− cv = ∀ α. {inputs = α; path = String;};
26+ cv = ∀ α. {inputs = [α]; path = String;};
27− db = ∀ α. {inputs = α; path = String;};
27+ db = ∀ α. {inputs = [α]; path = String;};
28− directory = ∀ α. {inputs = α; path = String;};
28+ directory = ∀ α. {inputs = [α]; path = String;};
29− distributor = ∀ α. {inputs = α; path = String;};
29+ distributor = ∀ α. {inputs = [α]; path = String;};
30− dptools = ∀ α. {inputs = α; path = String;};
30+ dptools = ∀ α. {inputs = [α]; path = String;};
31− easyroute = ∀ α. {inputs = α; path = String;};
31+ easyroute = ∀ α. {inputs = [α]; path = String;};
32− enum = ∀ α. {inputs = α; path = String;};
32+ enum = ∀ α. {inputs = [α]; path = String;};
33− esf = ∀ α. {inputs = α; path = String;};
33+ esf = ∀ α. {inputs = [α]; path = String;};
34− esl = ∀ α. {inputs = α; path = String;};
34+ esl = ∀ α. {inputs = [α]; path = String;};
35− expr = ∀ α. {inputs = α; path = String;};
35+ expr = ∀ α. {inputs = [α]; path = String;};
36− fifo = ∀ α. {inputs = α; path = String;};
36+ fifo = ∀ α. {inputs = [α]; path = String;};
37− fsk = ∀ α. {inputs = α; path = String;};
37+ fsk = ∀ α. {inputs = [α]; path = String;};
38− fsv = ∀ α. {inputs = α; path = String;};
38+ fsv = ∀ α. {inputs = [α]; path = String;};
39− hash = ∀ α. {inputs = α; path = String;};
39+ hash = ∀ α. {inputs = [α]; path = String;};
40− hiredis = ∀ α. {inputs = α; path = String;};
40+ hiredis = ∀ α. {inputs = [α]; path = String;};
41− httapi = ∀ α. {inputs = α; path = String;};
41+ httapi = ∀ α. {inputs = [α]; path = String;};
42− http_cache = ∀ α. {inputs = α; path = String;};
42+ http_cache = ∀ α. {inputs = [α]; path = String;};
43− ladspa = ∀ α. {inputs = α; path = String;};
43+ ladspa = ∀ α. {inputs = [α]; path = String;};
44− lcr = ∀ α. {inputs = α; path = String;};
44+ lcr = ∀ α. {inputs = [α]; path = String;};
45− memcache = ∀ α. {inputs = α; path = String;};
45+ memcache = ∀ α. {inputs = [α]; path = String;};
46− mongo = ∀ α. {inputs = α; path = String;};
46+ mongo = ∀ α. {inputs = [α]; path = String;};
47− mp4 = ∀ α. {inputs = α; path = String;};
47+ mp4 = ∀ α. {inputs = [α]; path = String;};
48− mp4v2 = ∀ α. {inputs = α; path = String;};
48+ mp4v2 = ∀ α. {inputs = [α]; path = String;};
49− nibblebill = ∀ α. {inputs = α; path = String;};
49+ nibblebill = ∀ α. {inputs = [α]; path = String;};
50− oreka = ∀ α. {inputs = α; path = String;};
50+ oreka = ∀ α. {inputs = [α]; path = String;};
51− osp = ∀ α. {inputs = α; path = String;};
51+ osp = ∀ α. {inputs = [α]; path = String;};
52− prefix = ∀ α. {inputs = α; path = String;};
52+ prefix = ∀ α. {inputs = [α]; path = String;};
53− rad_auth = ∀ α. {inputs = α; path = String;};
53+ rad_auth = ∀ α. {inputs = [α]; path = String;};
54− redis = ∀ α. {inputs = α; path = String;};
54+ redis = ∀ α. {inputs = [α]; path = String;};
55− rss = ∀ α. {inputs = α; path = String;};
55+ rss = ∀ α. {inputs = [α]; path = String;};
56− signalwire = ∀ α. {inputs = α; path = String;};
56+ signalwire = ∀ α. {inputs = [α]; path = String;};
57− sms = ∀ α. {inputs = α; path = String;};
57+ sms = ∀ α. {inputs = [α]; path = String;};
58− sms_flowroute = ∀ α. {inputs = α; path = String;};
58+ sms_flowroute = ∀ α. {inputs = [α]; path = String;};
59− snapshot = ∀ α. {inputs = α; path = String;};
59+ snapshot = ∀ α. {inputs = [α]; path = String;};
60− snom = ∀ α. {inputs = α; path = String;};
60+ snom = ∀ α. {inputs = [α]; path = String;};
61− sonar = ∀ α. {inputs = α; path = String;};
61+ sonar = ∀ α. {inputs = [α]; path = String;};
62− soundtouch = ∀ α. {inputs = α; path = String;};
62+ soundtouch = ∀ α. {inputs = [α]; path = String;};
63− spandsp = ∀ α. {inputs = α; path = String;};
63+ spandsp = ∀ α. {inputs = [α]; path = String;};
64− spy = ∀ α. {inputs = α; path = String;};
64+ spy = ∀ α. {inputs = [α]; path = String;};
65− stress = ∀ α. {inputs = α; path = String;};
65+ stress = ∀ α. {inputs = [α]; path = String;};
66− translate = ∀ α. {inputs = α; path = String;};
66+ translate = ∀ α. {inputs = [α]; path = String;};
67− valet_parking = ∀ α. {inputs = α; path = String;};
67+ valet_parking = ∀ α. {inputs = [α]; path = String;};
68− video_filter = ∀ α. {inputs = α; path = String;};
68+ video_filter = ∀ α. {inputs = [α]; path = String;};
69− vmd = ∀ α. {inputs = α; path = String;};
69+ vmd = ∀ α. {inputs = [α]; path = String;};
70− voicemail = ∀ α. {inputs = α; path = String;};
70+ voicemail = ∀ α. {inputs = [α]; path = String;};
71− voicemail_ivr = ∀ α. {inputs = α; path = String;};
71+ voicemail_ivr = ∀ α. {inputs = [α]; path = String;};
72 };
72 };
73 ast_tts =
73 ast_tts =
74− { cepstral = ∀ α. {inputs = α; path = String;};
74+ { cepstral = ∀ α. {inputs = [α]; path = String;};
75− flite = ∀ α. {inputs = α; path = String;};
75+ flite = ∀ α. {inputs = [α]; path = String;};
76− pocketsphinx = ∀ α. {inputs = α; path = String;};
76+ pocketsphinx = ∀ α. {inputs = [α]; path = String;};
77− tts_commandline = ∀ α. {inputs = α; path = String;};
77+ tts_commandline = ∀ α. {inputs = [α]; path = String;};
78− unimrcp = ∀ α. {inputs = α; path = String;};
78+ unimrcp = ∀ α. {inputs = [α]; path = String;};
79 };
79 };
80 codecs =
80 codecs =
81− { amr = ∀ α. {inputs = α; path = String;};
81+ { amr = ∀ α. {inputs = [α]; path = String;};
82− amrwb = ∀ α. {inputs = α; path = String;};
82+ amrwb = ∀ α. {inputs = [α]; path = String;};
83− b64 = ∀ α. {inputs = α; path = String;};
83+ b64 = ∀ α. {inputs = [α]; path = String;};
84− bv = ∀ α. {inputs = α; path = String;};
84+ bv = ∀ α. {inputs = [α]; path = String;};
85− clearmode = ∀ α. {inputs = α; path = String;};
85+ clearmode = ∀ α. {inputs = [α]; path = String;};
86− codec2 = ∀ α. {inputs = α; path = String;};
86+ codec2 = ∀ α. {inputs = [α]; path = String;};
87− com_g729 = ∀ α. {inputs = α; path = String;};
87+ com_g729 = ∀ α. {inputs = [α]; path = String;};
88− dahdi_codec = ∀ α. {inputs = α; path = String;};
88+ dahdi_codec = ∀ α. {inputs = [α]; path = String;};
89− g723_1 = ∀ α. {inputs = α; path = String;};
89+ g723_1 = ∀ α. {inputs = [α]; path = String;};
90− g729 = ∀ α. {inputs = α; path = String;};
90+ g729 = ∀ α. {inputs = [α]; path = String;};
91− h26x = ∀ α. {inputs = α; path = String;};
91+ h26x = ∀ α. {inputs = [α]; path = String;};
92− ilbc = ∀ α. {inputs = α; path = String;};
92+ ilbc = ∀ α. {inputs = [α]; path = String;};
93− isac = ∀ α. {inputs = α; path = String;};
93+ isac = ∀ α. {inputs = [α]; path = String;};
94− mp4v = ∀ α. {inputs = α; path = String;};
94+ mp4v = ∀ α. {inputs = [α]; path = String;};
95 opus = {inputs = [η]; path = String;};
95 opus = {inputs = [η]; path = String;};
96− sangoma_codec = ∀ α. {inputs = α; path = String;};
96+ sangoma_codec = ∀ α. {inputs = [α]; path = String;};
97− silk = ∀ α. {inputs = α; path = String;};
97+ silk = ∀ α. {inputs = [α]; path = String;};
98− siren = ∀ α. {inputs = α; path = String;};
98+ siren = ∀ α. {inputs = [α]; path = String;};
99− theora = ∀ α. {inputs = α; path = String;};
99+ theora = ∀ α. {inputs = [α]; path = String;};
100 };
100 };
101 databases =
101 databases =
102 { mariadb = {inputs = [ζ]; path = String;};
102 { mariadb = {inputs = [ζ]; path = String;};
103 pgsql = {inputs = [ι]; path = String;};
103 pgsql = {inputs = [ι]; path = String;};
104 };
104 };
105 dialplans =
105 dialplans =
106− { asterisk = ∀ α. {inputs = α; path = String;};
106+ { asterisk = ∀ α. {inputs = [α]; path = String;};
107− directory = ∀ α. {inputs = α; path = String;};
107+ directory = ∀ α. {inputs = [α]; path = String;};
108− xml = ∀ α. {inputs = α; path = String;};
108+ xml = ∀ α. {inputs = [α]; path = String;};
109 };
109 };
110− directories = {ldap = ∀ α. {inputs = α; path = String;};};
110+ directories = {ldap = ∀ α. {inputs = [α]; path = String;};};
111 endpoints =
111 endpoints =
112− { alsa = ∀ α. {inputs = α; path = String;};
112+ { alsa = ∀ α. {inputs = [α]; path = String;};
113− dingaling = ∀ α. {inputs = α; path = String;};
113+ dingaling = ∀ α. {inputs = [α]; path = String;};
114 gsmopen = {inputs = [ε]; path = String;};
114 gsmopen = {inputs = [ε]; path = String;};
115− h323 = ∀ α. {inputs = α; path = String;};
115+ h323 = ∀ α. {inputs = [α]; path = String;};
116− khomp = ∀ α. {inputs = α; path = String;};
116+ khomp = ∀ α. {inputs = [α]; path = String;};
117− loopback = ∀ α. {inputs = α; path = String;};
117+ loopback = ∀ α. {inputs = [α]; path = String;};
118− opal = ∀ α. {inputs = α; path = String;};
118+ opal = ∀ α. {inputs = [α]; path = String;};
119− portaudio = ∀ α. {inputs = α; path = String;};
119+ portaudio = ∀ α. {inputs = [α]; path = String;};
120− rtc = ∀ α. {inputs = α; path = String;};
120+ rtc = ∀ α. {inputs = [α]; path = String;};
121− rtmp = ∀ α. {inputs = α; path = String;};
121+ rtmp = ∀ α. {inputs = [α]; path = String;};
122− skinny = ∀ α. {inputs = α; path = String;};
122+ skinny = ∀ α. {inputs = [α]; path = String;};
123− sofia = ∀ α. {inputs = α; path = String;};
123+ sofia = ∀ α. {inputs = [α]; path = String;};
124− verto = ∀ α. {inputs = α; path = String;};
124+ verto = ∀ α. {inputs = [α]; path = String;};
125 };
125 };
126 event_handlers =
126 event_handlers =
127− { amqp = ∀ α. {inputs = α; path = String;};
127+ { amqp = ∀ α. {inputs = [α]; path = String;};
128− cdr_csv = ∀ α. {inputs = α; path = String;};
128+ cdr_csv = ∀ α. {inputs = [α]; path = String;};
129− cdr_mongodb = ∀ α. {inputs = α; path = String;};
129+ cdr_mongodb = ∀ α. {inputs = [α]; path = String;};
130− cdr_pg_csv = ∀ α. {inputs = α; path = String;};
130+ cdr_pg_csv = ∀ α. {inputs = [α]; path = String;};
131− cdr_sqlite = ∀ α. {inputs = α; path = String;};
131+ cdr_sqlite = ∀ α. {inputs = [α]; path = String;};
132− erlang_event = ∀ α. {inputs = α; path = String;};
132+ erlang_event = ∀ α. {inputs = [α]; path = String;};
133− event_multicast = ∀ α. {inputs = α; path = String;};
133+ event_multicast = ∀ α. {inputs = [α]; path = String;};
134− event_socket = ∀ α. {inputs = α; path = String;};
134+ event_socket = ∀ α. {inputs = [α]; path = String;};
135− event_zmq = ∀ α. {inputs = α; path = String;};
135+ event_zmq = ∀ α. {inputs = [α]; path = String;};
136− fail2ban = ∀ α. {inputs = α; path = String;};
136+ fail2ban = ∀ α. {inputs = [α]; path = String;};
137− format_cdr = ∀ α. {inputs = α; path = String;};
137+ format_cdr = ∀ α. {inputs = [α]; path = String;};
138− json_cdr = ∀ α. {inputs = α; path = String;};
138+ json_cdr = ∀ α. {inputs = [α]; path = String;};
139− kazoo = ∀ α. {inputs = α; path = String;};
139+ kazoo = ∀ α. {inputs = [α]; path = String;};
140− odbc_cdr = ∀ α. {inputs = α; path = String;};
140+ odbc_cdr = ∀ α. {inputs = [α]; path = String;};
141− radius_cdr = ∀ α. {inputs = α; path = String;};
141+ radius_cdr = ∀ α. {inputs = [α]; path = String;};
142− rayo = ∀ α. {inputs = α; path = String;};
142+ rayo = ∀ α. {inputs = [α]; path = String;};
143− smpp = ∀ α. {inputs = α; path = String;};
143+ smpp = ∀ α. {inputs = [α]; path = String;};
144− snmp = ∀ α. {inputs = α; path = String;};
144+ snmp = ∀ α. {inputs = [α]; path = String;};
145 };
145 };
146 formats =
146 formats =
147− { imagick = ∀ α. {inputs = α; path = String;};
147+ { imagick = ∀ α. {inputs = [α]; path = String;};
148− local_stream = ∀ α. {inputs = α; path = String;};
148+ local_stream = ∀ α. {inputs = [α]; path = String;};
149− native_file = ∀ α. {inputs = α; path = String;};
149+ native_file = ∀ α. {inputs = [α]; path = String;};
150 opusfile = {inputs = [η]; path = String;};
150 opusfile = {inputs = [η]; path = String;};
151− png = ∀ α. {inputs = α; path = String;};
151+ png = ∀ α. {inputs = [α]; path = String;};
152− portaudio_stream = ∀ α. {inputs = α; path = String;};
152+ portaudio_stream = ∀ α. {inputs = [α]; path = String;};
153− shell_stream = ∀ α. {inputs = α; path = String;};
153+ shell_stream = ∀ α. {inputs = [α]; path = String;};
154− shout = ∀ α. {inputs = α; path = String;};
154+ shout = ∀ α. {inputs = [α]; path = String;};
155− sndfile = ∀ α. {inputs = α; path = String;};
155+ sndfile = ∀ α. {inputs = [α]; path = String;};
156− ssml = ∀ α. {inputs = α; path = String;};
156+ ssml = ∀ α. {inputs = [α]; path = String;};
157− tone_stream = ∀ α. {inputs = α; path = String;};
157+ tone_stream = ∀ α. {inputs = [α]; path = String;};
158− vlc = ∀ α. {inputs = α; path = String;};
158+ vlc = ∀ α. {inputs = [α]; path = String;};
159− webm = ∀ α. {inputs = α; path = String;};
159+ webm = ∀ α. {inputs = [α]; path = String;};
160 };
160 };
161− freetdm = ∀ β. {inputs = β; path = String;};
161+ freetdm = ∀ β. {inputs = [β]; path = String;};
162 languages =
162 languages =
163− { basic = ∀ α. {inputs = α; path = String;};
163+ { basic = ∀ α. {inputs = [α]; path = String;};
164− java = ∀ α. {inputs = α; path = String;};
164+ java = ∀ α. {inputs = [α]; path = String;};
165 lua = {inputs = [θ]; path = String;};
165 lua = {inputs = [θ]; path = String;};
166− managed = ∀ α. {inputs = α; path = String;};
166+ managed = ∀ α. {inputs = [α]; path = String;};
167− perl = ∀ α. {inputs = α; path = String;};
167+ perl = ∀ α. {inputs = [α]; path = String;};
168− python = ∀ α. {inputs = α; path = String;};
168+ python = ∀ α. {inputs = [α]; path = String;};
169− v8 = ∀ α. {inputs = α; path = String;};
169+ v8 = ∀ α. {inputs = [α]; path = String;};
170− yaml = ∀ α. {inputs = α; path = String;};
170+ yaml = ∀ α. {inputs = [α]; path = String;};
171 };
171 };
172 loggers =
172 loggers =
173− { console = ∀ α. {inputs = α; path = String;};
173+ { console = ∀ α. {inputs = [α]; path = String;};
174− graylog2 = ∀ α. {inputs = α; path = String;};
174+ graylog2 = ∀ α. {inputs = [α]; path = String;};
175− logfile = ∀ α. {inputs = α; path = String;};
175+ logfile = ∀ α. {inputs = [α]; path = String;};
176− raven = ∀ α. {inputs = α; path = String;};
176+ raven = ∀ α. {inputs = [α]; path = String;};
177− syslog = ∀ α. {inputs = α; path = String;};
177+ syslog = ∀ α. {inputs = [α]; path = String;};
178 };
178 };
179 say =
179 say =
180− { de = ∀ α. {inputs = α; path = String;};
180+ { de = ∀ α. {inputs = [α]; path = String;};
181− en = ∀ α. {inputs = α; path = String;};
181+ en = ∀ α. {inputs = [α]; path = String;};
182− es = ∀ α. {inputs = α; path = String;};
182+ es = ∀ α. {inputs = [α]; path = String;};
183− es_ar = ∀ α. {inputs = α; path = String;};
183+ es_ar = ∀ α. {inputs = [α]; path = String;};
184− fa = ∀ α. {inputs = α; path = String;};
184+ fa = ∀ α. {inputs = [α]; path = String;};
185− fr = ∀ α. {inputs = α; path = String;};
185+ fr = ∀ α. {inputs = [α]; path = String;};
186− he = ∀ α. {inputs = α; path = String;};
186+ he = ∀ α. {inputs = [α]; path = String;};
187− hr = ∀ α. {inputs = α; path = String;};
187+ hr = ∀ α. {inputs = [α]; path = String;};
188− hu = ∀ α. {inputs = α; path = String;};
188+ hu = ∀ α. {inputs = [α]; path = String;};
189− it = ∀ α. {inputs = α; path = String;};
189+ it = ∀ α. {inputs = [α]; path = String;};
190− ja = ∀ α. {inputs = α; path = String;};
190+ ja = ∀ α. {inputs = [α]; path = String;};
191− nl = ∀ α. {inputs = α; path = String;};
191+ nl = ∀ α. {inputs = [α]; path = String;};
192− pl = ∀ α. {inputs = α; path = String;};
192+ pl = ∀ α. {inputs = [α]; path = String;};
193− pt = ∀ α. {inputs = α; path = String;};
193+ pt = ∀ α. {inputs = [α]; path = String;};
194− ru = ∀ α. {inputs = α; path = String;};
194+ ru = ∀ α. {inputs = [α]; path = String;};
195− sv = ∀ α. {inputs = α; path = String;};
195+ sv = ∀ α. {inputs = [α]; path = String;};
196− th = ∀ α. {inputs = α; path = String;};
196+ th = ∀ α. {inputs = [α]; path = String;};
197− zh = ∀ α. {inputs = α; path = String;};
197+ zh = ∀ α. {inputs = [α]; path = String;};
198 };
198 };
199 timers =
199 timers =
200− { posix_timer = ∀ α. {inputs = α; path = String;};
200+ { posix_timer = ∀ α. {inputs = [α]; path = String;};
201− timerfd = ∀ α. {inputs = α; path = String;};
201+ timerfd = ∀ α. {inputs = [α]; path = String;};
202 };
202 };
203 xml_int =
203 xml_int =
204− { cdr = ∀ α. {inputs = α; path = String;};
204+ { cdr = ∀ α. {inputs = [α]; path = String;};
205 curl = {inputs = [γ]; path = String;};
205 curl = {inputs = [γ]; path = String;};
206− ldap = ∀ α. {inputs = α; path = String;};
206+ ldap = ∀ α. {inputs = [α]; path = String;};
207− odbc = ∀ α. {inputs = α; path = String;};
207+ odbc = ∀ α. {inputs = [α]; path = String;};
208− radius = ∀ α. {inputs = α; path = String;};
208+ radius = ∀ α. {inputs = [α]; path = String;};
209− rpc = ∀ α. {inputs = α; path = String;};
209+ rpc = ∀ α. {inputs = [α]; path = String;};
210− scgi = ∀ α. {inputs = α; path = String;};
210+ scgi = ∀ α. {inputs = [α]; path = String;};
211 };
211 };
212}
212}
test/golden/importless/moodle-utils.txt+9−12
@@ -1,16 +1,13 @@
1∀ ε ζ η θ ι κ λ μ ν ξ ο.
1∀ ε ζ η θ ι κ λ μ ν ξ ο.
2−( ( ε
2+( ε //
3− ) //
4− ( { buildInputs = [ζ];
3+ { buildInputs = [ζ];
5− buildPhase = η;
4+ buildPhase = η;
6− configurePhase = θ;
5+ configurePhase = θ;
7− installPhase = String;
6+ installPhase = String;
8− name = ι;
7+ name = ι;
9− pluginType = κ;
8+ pluginType = κ;
10− }
9+ } ~
11− ) ~
12− ( λ
10+ λ,
13− ),
14 μ.?buildInputs = [ζ],
11 μ.?buildInputs = [ζ],
15 ν.stdenv = ξ,
12 ν.stdenv = ξ,
16 ν.unzip = ζ,
13 ν.unzip = ζ,
test/golden/importless/mt19937.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/named-readtables.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/net_dot_didierverna_dot_asdf-flv.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/networkmanager-qt.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { meta = {broken = Bool; maintainers = [ε];};
6+ name = String;
7+ nativeBuildInputs = [ζ];
8+ outputs = [String];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ η;
12+ networkmanager = γ;
13+ qtbase = γ;
14+} ->
15+η
test/golden/importless/new-api.txt+1−1
@@ -9,7 +9,7 @@
9 meta =
9 meta =
10 { description = String;
10 { description = String;
11 license = ε;
11 license = ε;
12− maintainers = ∀ α. α;
12+ maintainers = ∀ α. [α];
13 platforms = ζ;
13 platforms = ζ;
14 };
14 };
15 name = String;
15 name = String;
test/golden/importless/node.txt+2−1
@@ -1,7 +1,8 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2( β.services = γ,
2( β.services = γ,
3 δ.mkOption =
3 δ.mkOption =
4− {default = ∀ α. α; description = String; example = String; type = ε;} -> ζ,
4+ {default = ∀ α. [α]; description = String; example = String; type = ε;} ->
5+ ζ,
5 δ.types = η,
6 δ.types = η,
6 γ.prometheus = θ,
7 γ.prometheus = θ,
7 θ.exporters = ι,
8 θ.exporters = ι,
test/golden/importless/nscd.txtdeleted−62
@@ -1,62 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1 ι1 κ1
2−λ1 μ1 ν1.
3−( α.config = β,
4− α.lib = γ,
5− α.pkgs = δ,
6− β.environment = ε,
7− β.services = ζ,
8− β.system = η,
9− γ.builtins = θ,
10− γ.mkIf =
11− ι ->
12− { environment = {etc = {nscd.conf = {text = κ;};};};
13− systemd =
14− { services =
15− { nscd =
16− { description = String;
17− environment = {LD_LIBRARY_PATH = λ;};
18− restartTriggers = [μ];
19− serviceConfig =
20− { DynamicUser = Bool;
21− ExecReload = [String];
22− ExecStart = String;
23− PIDFile = String;
24− Restart = String;
25− RuntimeDirectory = String;
26− Type = String;
27− };
28− wantedBy = [String];
29− };
30− };
31− };
32− } ->
33− ν,
34− γ.mkOption = {default = ξ; description = String; type = ο;} -> π,
35− γ.types = ρ,
36− δ.glibc = σ,
37− δ.stdenv = τ,
38− η.nssModules = υ,
39− υ.path = λ,
40− τ.hostPlatform = φ,
41− φ.libc = String,
42− χ.cc = ψ,
43− ψ.libc = ω,
44− ω.bin = α1,
45− σ.bin = α1,
46− ζ.nscd = β1,
47− β1.config = κ,
48− β1.enable = ι,
49− ε.etc = γ1,
50− γ1.hosts = δ1,
51− δ1.source = μ,
52− ε1.etc = ζ1,
53− ζ1.nsswitch.conf = η1,
54− η1.source = μ,
55− θ1.etc = ι1,
56− ι1.nscd.conf = κ1,
57− κ1.source = μ,
58− θ.readFile = String -> ξ,
59− ρ.lines = ο,
60− λ1.bool = μ1
61−) =>
62−α -> {config = ν; options = {services = {nscd = {config = π; enable = ν1;};};};}
test/golden/importless/oauth2_proxy_nginx.txt+1−1
@@ -12,7 +12,7 @@
12 δ.oauth2_proxy = ο,
12 δ.oauth2_proxy = ο,
13 ο.nginx = π,
13 ο.nginx = π,
14 π.proxy = ε,
14 π.proxy = ε,
15− π.virtualHosts = ρ,
15+ π.virtualHosts = [ρ],
16 σ.oauth2_proxy = τ,
16 σ.oauth2_proxy = τ,
17 τ.httpAddress = λ,
17 τ.httpAddress = λ,
18 ξ.str = μ,
18 ξ.str = μ,
test/golden/importless/ofono.txt+2−2
@@ -17,13 +17,13 @@
17 } ->
17 } ->
18 ρ,
18 ρ,
19 δ.mkOption =
19 δ.mkOption =
20− {default = ∀ α. α; description = String; example = λ; type = σ;} -> τ,
20+ {default = ∀ α. [α]; description = String; example = λ; type = σ;} -> τ,
21 δ.types = υ,
21 δ.types = υ,
22 ε.ofono = ξ,
22 ε.ofono = ξ,
23 η.plugins = ι,
23 η.plugins = ι,
24 ζ.ofono = φ,
24 ζ.ofono = φ,
25 φ.enable = ν,
25 φ.enable = ν,
26− φ.plugins = χ,
26+ φ.plugins = [χ],
27 υ.listOf = ψ -> σ,
27 υ.listOf = ψ -> σ,
28 ω.package = ψ
28 ω.package = ψ
29) =>
29) =>
test/golden/importless/org-generated.txt+1−1
@@ -3,7 +3,7 @@
3 ( { elpaBuild =
3 ( { elpaBuild =
4 { ename = String;
4 { ename = String;
5 meta = {homepage = String; license = ε;};
5 meta = {homepage = String; license = ε;};
6− packageRequires = ∀ α. α;
6+ packageRequires = ∀ α. [α];
7 pname = String;
7 pname = String;
8 src = ζ;
8 src = ζ;
9 version = String;
9 version = String;
test/golden/importless/pack.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optionals = Bool -> [ε] -> ζ,
3 δ.optionals = Bool -> [ε] -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/parse-declarations-1_dot_0.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/parse-number.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/parted.txt+1−1
@@ -10,7 +10,7 @@
10 homepage = String;
10 homepage = String;
11 license = ζ;
11 license = ζ;
12 longDescription = String;
12 longDescription = String;
13− maintainers = ∀ α. α;
13+ maintainers = ∀ α. [α];
14 platforms = η;
14 platforms = η;
15 };
15 };
16 name = String;
16 name = String;
test/golden/importless/pk.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ.
1∀ β γ δ ε ζ η θ ι κ λ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.minimumOCamlVersion = ε,
4 δ.minimumOCamlVersion = ε,
5 δ.src = ζ,
5 δ.src = ζ,
test/golden/importless/platform-flags.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2−( ({}) // (α) ~ (β),
2+( {} // α ~ β,
3 γ.?platform = δ,
3 γ.?platform = δ,
4 ε.?arch = ζ,
4 ε.?arch = ζ,
5 η.?cpu = θ,
5 η.?cpu = θ,
test/golden/importless/plump-lexer.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/pressureaudio.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι.
1∀ β γ δ ε ζ η θ ι.
2−( (β) // ({description = String; longDescription = String;}) ~ (γ),
2+( β // {description = String; longDescription = String;} ~ γ,
3 δ.mkDerivation =
3 δ.mkDerivation =
4 { buildPhase = String;
4 { buildPhase = String;
5 dontConfigure = Bool;
5 dontConfigure = Bool;
test/golden/importless/prison.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ libdmtx = η;
5+ mkDerivation =
6+ { buildInputs = [η];
7+ meta = {broken = Bool; maintainers = [ε];};
8+ name = String;
9+ nativeBuildInputs = [ζ];
10+ outputs = [String];
11+ propagatedBuildInputs = [γ];
12+ } ->
13+ θ;
14+ qrencode = η;
15+ qtbase = γ;
16+} ->
17+θ
test/golden/importless/prove-asdf.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/ptester.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/qt4.txt+1−1
@@ -2,7 +2,7 @@
2( β.lib = γ,
2( β.lib = γ,
3 β.mkDerivation =
3 β.mkDerivation =
4 { buildInputs = [δ];
4 { buildInputs = [δ];
5− configureFlags = ∀ α. α;
5+ configureFlags = ∀ α. [α];
6 dontAddPrefix = Bool;
6 dontAddPrefix = Bool;
7 installFlags = ε;
7 installFlags = ε;
8 meta = {broken = Bool;};
8 meta = {broken = Bool;};
test/golden/importless/qtModule.txt+15−18
@@ -1,25 +1,22 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2−( ( β
2+( β //
3− ) //
4− ( { meta = ∀ α. α;
3+ { meta = ∀ α. α;
5− name = String;
4+ name = String;
6− nativeBuildInputs = [γ];
5+ nativeBuildInputs = [γ];
7− outputs = [String];
6+ outputs = [String];
8− patches = δ;
7+ patches = [δ];
9− postFixup = String;
8+ postFixup = String;
10− preConfigure = String;
9+ preConfigure = String;
11− preHook = String;
10+ preHook = String;
12− propagatedBuildInputs = [ε];
11+ propagatedBuildInputs = [ε];
13− setOutputFlags = Bool;
12+ setOutputFlags = Bool;
14− src = ζ;
13+ src = ζ;
15− }
14+ } ~
16− ) ~
17− ( η
15+ η,
18− ),
19 β.?meta = {},
16 β.?meta = {},
20 β.?nativeBuildInputs = [γ],
17 β.?nativeBuildInputs = [γ],
21 β.?outputs = [String],
18 β.?outputs = [String],
22− β.?patches = δ,
19+ β.?patches = [δ],
23 β.?propagatedBuildInputs = [ε],
20 β.?propagatedBuildInputs = [ε],
24 β.?setOutputFlags = Bool,
21 β.?setOutputFlags = Bool,
25 β.?src = ζ,
22 β.?src = ζ,
test/golden/importless/qtgamepad.txt+1−1
@@ -1,7 +1,7 @@
1∀ β γ δ.
1∀ β γ δ.
2{ pkgconfig = β;
2{ pkgconfig = β;
3 qtModule =
3 qtModule =
4− { buildInputs = ∀ α. α;
4+ { buildInputs = ∀ α. [α];
5 name = String;
5 name = String;
6 nativeBuildInputs = [β];
6 nativeBuildInputs = [β];
7 outputs = [String];
7 outputs = [String];
test/golden/importless/qtspeech.txt+2−1
@@ -1,2 +1,3 @@
1∀ β.
1∀ β.
2−{qtModule = {name = String; outputs = [String]; qtInputs = ∀ α. α;} -> β;} -> β
2+{qtModule = {name = String; outputs = [String]; qtInputs = ∀ α. [α];} -> β;} ->
3+β
test/golden/importless/rebar3-release.txt+16−19
@@ -1,23 +1,20 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2−( (β) // (γ) ~ ({buildInputs = [δ]; name = String;}),
2+( β // γ ~ {buildInputs = [δ]; name = String;},
3− ( { buildInputs = [ε];
3+ { buildInputs = [ε];
4− buildPhase = String;
4+ buildPhase = String;
5− configurePhase = String;
5+ configurePhase = String;
6− dontStrip = Bool;
6+ dontStrip = Bool;
7− installPhase = String;
7+ installPhase = String;
8− meta = ∀ α. α;
8+ meta = ∀ α. α;
9− name = String;
9+ name = String;
10− passthru = {env = ζ; packageName = η;};
10+ passthru = {env = ζ; packageName = η;};
11− propagatedBuildInputs = [Null];
11+ propagatedBuildInputs = [Null];
12− setupHook = θ;
12+ setupHook = θ;
13− src = ι;
13+ src = ι;
14− version = κ;
14+ version = κ;
15− }
16− ) //
15+ } //
17− ( λ
16+ λ ~
18− ) ~
19− ( γ
17+ γ,
20− ),
21 β.?buildInputs = [ε],
18 β.?buildInputs = [ε],
22 β.?buildPhase = Null,
19 β.?buildPhase = Null,
23 β.?checkouts = Null,
20 β.?checkouts = Null,
test/golden/importless/require_exceptions.txt+8−8
@@ -18,18 +18,18 @@
18 cocoapods-check = String;
18 cocoapods-check = String;
19 cocoapods-clean = [String];
19 cocoapods-clean = [String];
20 cocoapods-coverage = [String];
20 cocoapods-coverage = [String];
21− cocoapods-deintegrate = ∀ α. α;
21+ cocoapods-deintegrate = ∀ α. [α];
22 cocoapods-dependencies = [String];
22 cocoapods-dependencies = [String];
23 cocoapods-deploy = String;
23 cocoapods-deploy = String;
24 cocoapods-disable-podfile-validations = String;
24 cocoapods-disable-podfile-validations = String;
25 cocoapods-generate = String;
25 cocoapods-generate = String;
26 cocoapods-git_url_rewriter = String;
26 cocoapods-git_url_rewriter = String;
27− cocoapods-keys = ∀ α. α;
27+ cocoapods-keys = ∀ α. [α];
28 cocoapods-open = [String];
28 cocoapods-open = [String];
29 cocoapods-packager = [String];
29 cocoapods-packager = [String];
30− cocoapods-packager-pro = ∀ α. α;
30+ cocoapods-packager-pro = ∀ α. [α];
31 cocoapods-plugins = [String];
31 cocoapods-plugins = [String];
32− cocoapods-sorted-search = ∀ α. α;
32+ cocoapods-sorted-search = ∀ α. [α];
33 cocoapods-stats = [String];
33 cocoapods-stats = [String];
34 cocoapods-testing = [String];
34 cocoapods-testing = [String];
35 cocoapods-trunk = [String];
35 cocoapods-trunk = [String];
@@ -44,16 +44,16 @@
44 gdk_pixbuf2 = [String];
44 gdk_pixbuf2 = [String];
45 gitlab-markup = [String];
45 gitlab-markup = [String];
46 gobject-introspection = [String];
46 gobject-introspection = [String];
47− gtk2 = ∀ α. α;
47+ gtk2 = ∀ α. [α];
48 idn-ruby = [String];
48 idn-ruby = [String];
49− jekyll-sass-converter = ∀ α. α;
49+ jekyll-sass-converter = ∀ α. [α];
50 libxml-ruby = [String];
50 libxml-ruby = [String];
51 multipart-post = [String];
51 multipart-post = [String];
52 nap = [String];
52 nap = [String];
53 net-scp = [String];
53 net-scp = [String];
54 net-ssh = [String];
54 net-ssh = [String];
55 nio4r = [String];
55 nio4r = [String];
56− osx_keychain = ∀ α. α;
56+ osx_keychain = ∀ α. [α];
57 ovirt-engine-sdk = [String];
57 ovirt-engine-sdk = [String];
58 pango = [String];
58 pango = [String];
59 rack-test = [String];
59 rack-test = [String];
@@ -68,7 +68,7 @@
68 ruby-terminfo = [String];
68 ruby-terminfo = [String];
69 rubyzip = [String];
69 rubyzip = [String];
70 sequel_pg = [String];
70 sequel_pg = [String];
71− simplecov-html = ∀ α. α;
71+ simplecov-html = ∀ α. [α];
72 sinatra = [String];
72 sinatra = [String];
73 sprockets-rails = [String];
73 sprockets-rails = [String];
74 taglib-ruby = [String];
74 taglib-ruby = [String];
test/golden/importless/rfc2388.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/rng-mirage.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.minimumOCamlVersion = ε,
4 δ.minimumOCamlVersion = ε,
5 δ.src = ζ,
5 δ.src = ζ,
test/golden/importless/rng.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ.
1∀ β γ δ ε ζ η θ ι κ λ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.minimumOCamlVersion = ε,
4 δ.minimumOCamlVersion = ε,
5 δ.src = ζ,
5 δ.src = ζ,
test/golden/importless/robustirc-bridge.txt+1−1
@@ -28,7 +28,7 @@
28 } ->
28 } ->
29 ι,
29 ι,
30 δ.mkOption =
30 δ.mkOption =
31− {default = ∀ α. α; description = String; example = [String]; type = κ;} ->
31+ {default = ∀ α. [α]; description = String; example = [String]; type = κ;} ->
32 λ,
32 λ,
33 δ.types = μ,
33 δ.types = μ,
34 ζ.robustirc-bridge = ν,
34 ζ.robustirc-bridge = ν,
test/golden/importless/rt.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/ruby-packages.txt+253−253
@@ -1,708 +1,708 @@
1{ CFPropertyList =
1{ CFPropertyList =
2 { groups = [String];
2 { groups = [String];
3− platforms = ∀ α. α;
3+ platforms = ∀ α. [α];
4 source = {remotes = [String]; sha256 = String; type = String;};
4 source = {remotes = [String]; sha256 = String; type = String;};
5 version = String;
5 version = String;
6 };
6 };
7 RubyInline =
7 RubyInline =
8 { dependencies = [String];
8 { dependencies = [String];
9 groups = [String];
9 groups = [String];
10− platforms = ∀ α. α;
10+ platforms = ∀ α. [α];
11 source = {remotes = [String]; sha256 = String; type = String;};
11 source = {remotes = [String]; sha256 = String; type = String;};
12 version = String;
12 version = String;
13 };
13 };
14 ZenTest =
14 ZenTest =
15 { groups = [String];
15 { groups = [String];
16− platforms = ∀ α. α;
16+ platforms = ∀ α. [α];
17 source = {remotes = [String]; sha256 = String; type = String;};
17 source = {remotes = [String]; sha256 = String; type = String;};
18 version = String;
18 version = String;
19 };
19 };
20 actionmailer =
20 actionmailer =
21 { dependencies = [String];
21 { dependencies = [String];
22 groups = [String];
22 groups = [String];
23− platforms = ∀ α. α;
23+ platforms = ∀ α. [α];
24 source = {remotes = [String]; sha256 = String; type = String;};
24 source = {remotes = [String]; sha256 = String; type = String;};
25 version = String;
25 version = String;
26 };
26 };
27 actionpack =
27 actionpack =
28 { dependencies = [String];
28 { dependencies = [String];
29 groups = [String];
29 groups = [String];
30− platforms = ∀ α. α;
30+ platforms = ∀ α. [α];
31 source = {remotes = [String]; sha256 = String; type = String;};
31 source = {remotes = [String]; sha256 = String; type = String;};
32 version = String;
32 version = String;
33 };
33 };
34 actionview =
34 actionview =
35 { dependencies = [String];
35 { dependencies = [String];
36 groups = [String];
36 groups = [String];
37− platforms = ∀ α. α;
37+ platforms = ∀ α. [α];
38 source = {remotes = [String]; sha256 = String; type = String;};
38 source = {remotes = [String]; sha256 = String; type = String;};
39 version = String;
39 version = String;
40 };
40 };
41 activejob =
41 activejob =
42 { dependencies = [String];
42 { dependencies = [String];
43 groups = [String];
43 groups = [String];
44− platforms = ∀ α. α;
44+ platforms = ∀ α. [α];
45 source = {remotes = [String]; sha256 = String; type = String;};
45 source = {remotes = [String]; sha256 = String; type = String;};
46 version = String;
46 version = String;
47 };
47 };
48 activemodel =
48 activemodel =
49 { dependencies = [String];
49 { dependencies = [String];
50 groups = [String];
50 groups = [String];
51− platforms = ∀ α. α;
51+ platforms = ∀ α. [α];
52 source = {remotes = [String]; sha256 = String; type = String;};
52 source = {remotes = [String]; sha256 = String; type = String;};
53 version = String;
53 version = String;
54 };
54 };
55 activerecord =
55 activerecord =
56 { dependencies = [String];
56 { dependencies = [String];
57 groups = [String];
57 groups = [String];
58− platforms = ∀ α. α;
58+ platforms = ∀ α. [α];
59 source = {remotes = [String]; sha256 = String; type = String;};
59 source = {remotes = [String]; sha256 = String; type = String;};
60 version = String;
60 version = String;
61 };
61 };
62 activesupport =
62 activesupport =
63 { dependencies = [String];
63 { dependencies = [String];
64 groups = [String];
64 groups = [String];
65− platforms = ∀ α. α;
65+ platforms = ∀ α. [α];
66 source = {remotes = [String]; sha256 = String; type = String;};
66 source = {remotes = [String]; sha256 = String; type = String;};
67 version = String;
67 version = String;
68 };
68 };
69 addressable =
69 addressable =
70 { dependencies = [String];
70 { dependencies = [String];
71 groups = [String];
71 groups = [String];
72− platforms = ∀ α. α;
72+ platforms = ∀ α. [α];
73 source = {remotes = [String]; sha256 = String; type = String;};
73 source = {remotes = [String]; sha256 = String; type = String;};
74 version = String;
74 version = String;
75 };
75 };
76 algoliasearch =
76 algoliasearch =
77 { dependencies = [String];
77 { dependencies = [String];
78 groups = [String];
78 groups = [String];
79− platforms = ∀ α. α;
79+ platforms = ∀ α. [α];
80 source = {remotes = [String]; sha256 = String; type = String;};
80 source = {remotes = [String]; sha256 = String; type = String;};
81 version = String;
81 version = String;
82 };
82 };
83 arel =
83 arel =
84 { groups = [String];
84 { groups = [String];
85− platforms = ∀ α. α;
85+ platforms = ∀ α. [α];
86 source = {remotes = [String]; sha256 = String; type = String;};
86 source = {remotes = [String]; sha256 = String; type = String;};
87 version = String;
87 version = String;
88 };
88 };
89 ast =
89 ast =
90 { groups = [String];
90 { groups = [String];
91− platforms = ∀ α. α;
91+ platforms = ∀ α. [α];
92 source = {remotes = [String]; sha256 = String; type = String;};
92 source = {remotes = [String]; sha256 = String; type = String;};
93 version = String;
93 version = String;
94 };
94 };
95 atk =
95 atk =
96 { dependencies = [String];
96 { dependencies = [String];
97 groups = [String];
97 groups = [String];
98− platforms = ∀ α. α;
98+ platforms = ∀ α. [α];
99 source = {remotes = [String]; sha256 = String; type = String;};
99 source = {remotes = [String]; sha256 = String; type = String;};
100 version = String;
100 version = String;
101 };
101 };
102 atomos =
102 atomos =
103 { groups = [String];
103 { groups = [String];
104− platforms = ∀ α. α;
104+ platforms = ∀ α. [α];
105 source = {remotes = [String]; sha256 = String; type = String;};
105 source = {remotes = [String]; sha256 = String; type = String;};
106 version = String;
106 version = String;
107 };
107 };
108 awesome_print =
108 awesome_print =
109 { groups = [String];
109 { groups = [String];
110− platforms = ∀ α. α;
110+ platforms = ∀ α. [α];
111 source = {remotes = [String]; sha256 = String; type = String;};
111 source = {remotes = [String]; sha256 = String; type = String;};
112 version = String;
112 version = String;
113 };
113 };
114 bacon =
114 bacon =
115 { groups = [String];
115 { groups = [String];
116− platforms = ∀ α. α;
116+ platforms = ∀ α. [α];
117 source = {remotes = [String]; sha256 = String; type = String;};
117 source = {remotes = [String]; sha256 = String; type = String;};
118 version = String;
118 version = String;
119 };
119 };
120 builder =
120 builder =
121 { groups = [String];
121 { groups = [String];
122− platforms = ∀ α. α;
122+ platforms = ∀ α. [α];
123 source = {remotes = [String]; sha256 = String; type = String;};
123 source = {remotes = [String]; sha256 = String; type = String;};
124 version = String;
124 version = String;
125 };
125 };
126 byebug =
126 byebug =
127 { groups = [String];
127 { groups = [String];
128− platforms = ∀ α. α;
128+ platforms = ∀ α. [α];
129 source = {remotes = [String]; sha256 = String; type = String;};
129 source = {remotes = [String]; sha256 = String; type = String;};
130 version = String;
130 version = String;
131 };
131 };
132 cairo =
132 cairo =
133 { dependencies = [String];
133 { dependencies = [String];
134 groups = [String];
134 groups = [String];
135− platforms = ∀ α. α;
135+ platforms = ∀ α. [α];
136 source = {remotes = [String]; sha256 = String; type = String;};
136 source = {remotes = [String]; sha256 = String; type = String;};
137 version = String;
137 version = String;
138 };
138 };
139 cairo-gobject =
139 cairo-gobject =
140 { dependencies = [String];
140 { dependencies = [String];
141 groups = [String];
141 groups = [String];
142− platforms = ∀ α. α;
142+ platforms = ∀ α. [α];
143 source = {remotes = [String]; sha256 = String; type = String;};
143 source = {remotes = [String]; sha256 = String; type = String;};
144 version = String;
144 version = String;
145 };
145 };
146 camping =
146 camping =
147 { dependencies = [String];
147 { dependencies = [String];
148 groups = [String];
148 groups = [String];
149− platforms = ∀ α. α;
149+ platforms = ∀ α. [α];
150 source = {remotes = [String]; sha256 = String; type = String;};
150 source = {remotes = [String]; sha256 = String; type = String;};
151 version = String;
151 version = String;
152 };
152 };
153 charlock_holmes =
153 charlock_holmes =
154 { groups = [String];
154 { groups = [String];
155− platforms = ∀ α. α;
155+ platforms = ∀ α. [α];
156 source = {remotes = [String]; sha256 = String; type = String;};
156 source = {remotes = [String]; sha256 = String; type = String;};
157 version = String;
157 version = String;
158 };
158 };
159 claide =
159 claide =
160 { groups = [String];
160 { groups = [String];
161− platforms = ∀ α. α;
161+ platforms = ∀ α. [α];
162 source = {remotes = [String]; sha256 = String; type = String;};
162 source = {remotes = [String]; sha256 = String; type = String;};
163 version = String;
163 version = String;
164 };
164 };
165 clamp =
165 clamp =
166 { groups = [String];
166 { groups = [String];
167− platforms = ∀ α. α;
167+ platforms = ∀ α. [α];
168 source = {remotes = [String]; sha256 = String; type = String;};
168 source = {remotes = [String]; sha256 = String; type = String;};
169 version = String;
169 version = String;
170 };
170 };
171 cld3 =
171 cld3 =
172 { dependencies = [String];
172 { dependencies = [String];
173 groups = [String];
173 groups = [String];
174− platforms = ∀ α. α;
174+ platforms = ∀ α. [α];
175 source = {remotes = [String]; sha256 = String; type = String;};
175 source = {remotes = [String]; sha256 = String; type = String;};
176 version = String;
176 version = String;
177 };
177 };
178 cocoapods =
178 cocoapods =
179 { dependencies = [String];
179 { dependencies = [String];
180 groups = [String];
180 groups = [String];
181− platforms = ∀ α. α;
181+ platforms = ∀ α. [α];
182 source = {remotes = [String]; sha256 = String; type = String;};
182 source = {remotes = [String]; sha256 = String; type = String;};
183 version = String;
183 version = String;
184 };
184 };
185 cocoapods-acknowledgements =
185 cocoapods-acknowledgements =
186 { dependencies = [String];
186 { dependencies = [String];
187 groups = [String];
187 groups = [String];
188− platforms = ∀ α. α;
188+ platforms = ∀ α. [α];
189 source = {remotes = [String]; sha256 = String; type = String;};
189 source = {remotes = [String]; sha256 = String; type = String;};
190 version = String;
190 version = String;
191 };
191 };
192 cocoapods-art =
192 cocoapods-art =
193 { groups = [String];
193 { groups = [String];
194− platforms = ∀ α. α;
194+ platforms = ∀ α. [α];
195 source = {remotes = [String]; sha256 = String; type = String;};
195 source = {remotes = [String]; sha256 = String; type = String;};
196 version = String;
196 version = String;
197 };
197 };
198 cocoapods-bin =
198 cocoapods-bin =
199 { dependencies = [String];
199 { dependencies = [String];
200 groups = [String];
200 groups = [String];
201− platforms = ∀ α. α;
201+ platforms = ∀ α. [α];
202 source = {remotes = [String]; sha256 = String; type = String;};
202 source = {remotes = [String]; sha256 = String; type = String;};
203 version = String;
203 version = String;
204 };
204 };
205 cocoapods-browser =
205 cocoapods-browser =
206 { dependencies = [String];
206 { dependencies = [String];
207 groups = [String];
207 groups = [String];
208− platforms = ∀ α. α;
208+ platforms = ∀ α. [α];
209 source = {remotes = [String]; sha256 = String; type = String;};
209 source = {remotes = [String]; sha256 = String; type = String;};
210 version = String;
210 version = String;
211 };
211 };
212 cocoapods-bugsnag =
212 cocoapods-bugsnag =
213 { dependencies = [String];
213 { dependencies = [String];
214 groups = [String];
214 groups = [String];
215− platforms = ∀ α. α;
215+ platforms = ∀ α. [α];
216 source = {remotes = [String]; sha256 = String; type = String;};
216 source = {remotes = [String]; sha256 = String; type = String;};
217 version = String;
217 version = String;
218 };
218 };
219 cocoapods-check =
219 cocoapods-check =
220 { dependencies = [String];
220 { dependencies = [String];
221 groups = [String];
221 groups = [String];
222− platforms = ∀ α. α;
222+ platforms = ∀ α. [α];
223 source = {remotes = [String]; sha256 = String; type = String;};
223 source = {remotes = [String]; sha256 = String; type = String;};
224 version = String;
224 version = String;
225 };
225 };
226 cocoapods-clean =
226 cocoapods-clean =
227 { groups = [String];
227 { groups = [String];
228− platforms = ∀ α. α;
228+ platforms = ∀ α. [α];
229 source = {remotes = [String]; sha256 = String; type = String;};
229 source = {remotes = [String]; sha256 = String; type = String;};
230 version = String;
230 version = String;
231 };
231 };
232 cocoapods-clean_build_phases_scripts =
232 cocoapods-clean_build_phases_scripts =
233 { groups = [String];
233 { groups = [String];
234− platforms = ∀ α. α;
234+ platforms = ∀ α. [α];
235 source = {remotes = [String]; sha256 = String; type = String;};
235 source = {remotes = [String]; sha256 = String; type = String;};
236 version = String;
236 version = String;
237 };
237 };
238 cocoapods-core =
238 cocoapods-core =
239 { dependencies = [String];
239 { dependencies = [String];
240 groups = [String];
240 groups = [String];
241− platforms = ∀ α. α;
241+ platforms = ∀ α. [α];
242 source = {remotes = [String]; sha256 = String; type = String;};
242 source = {remotes = [String]; sha256 = String; type = String;};
243 version = String;
243 version = String;
244 };
244 };
245 cocoapods-coverage =
245 cocoapods-coverage =
246 { dependencies = [String];
246 { dependencies = [String];
247 groups = [String];
247 groups = [String];
248− platforms = ∀ α. α;
248+ platforms = ∀ α. [α];
249 source = {remotes = [String]; sha256 = String; type = String;};
249 source = {remotes = [String]; sha256 = String; type = String;};
250 version = String;
250 version = String;
251 };
251 };
252 cocoapods-deintegrate =
252 cocoapods-deintegrate =
253 { groups = [String];
253 { groups = [String];
254− platforms = ∀ α. α;
254+ platforms = ∀ α. [α];
255 source = {remotes = [String]; sha256 = String; type = String;};
255 source = {remotes = [String]; sha256 = String; type = String;};
256 version = String;
256 version = String;
257 };
257 };
258 cocoapods-dependencies =
258 cocoapods-dependencies =
259 { dependencies = [String];
259 { dependencies = [String];
260 groups = [String];
260 groups = [String];
261− platforms = ∀ α. α;
261+ platforms = ∀ α. [α];
262 source = {remotes = [String]; sha256 = String; type = String;};
262 source = {remotes = [String]; sha256 = String; type = String;};
263 version = String;
263 version = String;
264 };
264 };
265 cocoapods-deploy =
265 cocoapods-deploy =
266 { groups = [String];
266 { groups = [String];
267− platforms = ∀ α. α;
267+ platforms = ∀ α. [α];
268 source = {remotes = [String]; sha256 = String; type = String;};
268 source = {remotes = [String]; sha256 = String; type = String;};
269 version = String;
269 version = String;
270 };
270 };
271 cocoapods-disable-podfile-validations =
271 cocoapods-disable-podfile-validations =
272 { groups = [String];
272 { groups = [String];
273− platforms = ∀ α. α;
273+ platforms = ∀ α. [α];
274 source = {remotes = [String]; sha256 = String; type = String;};
274 source = {remotes = [String]; sha256 = String; type = String;};
275 version = String;
275 version = String;
276 };
276 };
277 cocoapods-downloader =
277 cocoapods-downloader =
278 { groups = [String];
278 { groups = [String];
279− platforms = ∀ α. α;
279+ platforms = ∀ α. [α];
280 source = {remotes = [String]; sha256 = String; type = String;};
280 source = {remotes = [String]; sha256 = String; type = String;};
281 version = String;
281 version = String;
282 };
282 };
283 cocoapods-expert-difficulty =
283 cocoapods-expert-difficulty =
284 { groups = [String];
284 { groups = [String];
285− platforms = ∀ α. α;
285+ platforms = ∀ α. [α];
286 source = {remotes = [String]; sha256 = String; type = String;};
286 source = {remotes = [String]; sha256 = String; type = String;};
287 version = String;
287 version = String;
288 };
288 };
289 cocoapods-fix-react-native =
289 cocoapods-fix-react-native =
290 { groups = [String];
290 { groups = [String];
291− platforms = ∀ α. α;
291+ platforms = ∀ α. [α];
292 source = {remotes = [String]; sha256 = String; type = String;};
292 source = {remotes = [String]; sha256 = String; type = String;};
293 version = String;
293 version = String;
294 };
294 };
295 cocoapods-generate =
295 cocoapods-generate =
296 { dependencies = [String];
296 { dependencies = [String];
297 groups = [String];
297 groups = [String];
298− platforms = ∀ α. α;
298+ platforms = ∀ α. [α];
299 source = {remotes = [String]; sha256 = String; type = String;};
299 source = {remotes = [String]; sha256 = String; type = String;};
300 version = String;
300 version = String;
301 };
301 };
302 cocoapods-git_url_rewriter =
302 cocoapods-git_url_rewriter =
303 { groups = [String];
303 { groups = [String];
304− platforms = ∀ α. α;
304+ platforms = ∀ α. [α];
305 source = {remotes = [String]; sha256 = String; type = String;};
305 source = {remotes = [String]; sha256 = String; type = String;};
306 version = String;
306 version = String;
307 };
307 };
308 cocoapods-keys =
308 cocoapods-keys =
309 { dependencies = [String];
309 { dependencies = [String];
310 groups = [String];
310 groups = [String];
311− platforms = ∀ α. α;
311+ platforms = ∀ α. [α];
312 source = {remotes = [String]; sha256 = String; type = String;};
312 source = {remotes = [String]; sha256 = String; type = String;};
313 version = String;
313 version = String;
314 };
314 };
315 cocoapods-no-dev-schemes =
315 cocoapods-no-dev-schemes =
316 { groups = [String];
316 { groups = [String];
317− platforms = ∀ α. α;
317+ platforms = ∀ α. [α];
318 source = {remotes = [String]; sha256 = String; type = String;};
318 source = {remotes = [String]; sha256 = String; type = String;};
319 version = String;
319 version = String;
320 };
320 };
321 cocoapods-open =
321 cocoapods-open =
322 { groups = [String];
322 { groups = [String];
323− platforms = ∀ α. α;
323+ platforms = ∀ α. [α];
324 source = {remotes = [String]; sha256 = String; type = String;};
324 source = {remotes = [String]; sha256 = String; type = String;};
325 version = String;
325 version = String;
326 };
326 };
327 cocoapods-packager =
327 cocoapods-packager =
328 { dependencies = [String];
328 { dependencies = [String];
329 groups = [String];
329 groups = [String];
330− platforms = ∀ α. α;
330+ platforms = ∀ α. [α];
331 source = {remotes = [String]; sha256 = String; type = String;};
331 source = {remotes = [String]; sha256 = String; type = String;};
332 version = String;
332 version = String;
333 };
333 };
334 cocoapods-packager-pro =
334 cocoapods-packager-pro =
335 { dependencies = [String];
335 { dependencies = [String];
336 groups = [String];
336 groups = [String];
337− platforms = ∀ α. α;
337+ platforms = ∀ α. [α];
338 source = {remotes = [String]; sha256 = String; type = String;};
338 source = {remotes = [String]; sha256 = String; type = String;};
339 version = String;
339 version = String;
340 };
340 };
341 cocoapods-playgrounds =
341 cocoapods-playgrounds =
342 { dependencies = [String];
342 { dependencies = [String];
343 groups = [String];
343 groups = [String];
344− platforms = ∀ α. α;
344+ platforms = ∀ α. [α];
345 source = {remotes = [String]; sha256 = String; type = String;};
345 source = {remotes = [String]; sha256 = String; type = String;};
346 version = String;
346 version = String;
347 };
347 };
348 cocoapods-plugins =
348 cocoapods-plugins =
349 { dependencies = [String];
349 { dependencies = [String];
350 groups = [String];
350 groups = [String];
351− platforms = ∀ α. α;
351+ platforms = ∀ α. [α];
352 source = {remotes = [String]; sha256 = String; type = String;};
352 source = {remotes = [String]; sha256 = String; type = String;};
353 version = String;
353 version = String;
354 };
354 };
355 cocoapods-prune-localizations =
355 cocoapods-prune-localizations =
356 { groups = [String];
356 { groups = [String];
357− platforms = ∀ α. α;
357+ platforms = ∀ α. [α];
358 source = {remotes = [String]; sha256 = String; type = String;};
358 source = {remotes = [String]; sha256 = String; type = String;};
359 version = String;
359 version = String;
360 };
360 };
361 cocoapods-rome =
361 cocoapods-rome =
362 { dependencies = [String];
362 { dependencies = [String];
363 groups = [String];
363 groups = [String];
364− platforms = ∀ α. α;
364+ platforms = ∀ α. [α];
365 source = {remotes = [String]; sha256 = String; type = String;};
365 source = {remotes = [String]; sha256 = String; type = String;};
366 version = String;
366 version = String;
367 };
367 };
368 cocoapods-search =
368 cocoapods-search =
369 { groups = [String];
369 { groups = [String];
370− platforms = ∀ α. α;
370+ platforms = ∀ α. [α];
371 source = {remotes = [String]; sha256 = String; type = String;};
371 source = {remotes = [String]; sha256 = String; type = String;};
372 version = String;
372 version = String;
373 };
373 };
374 cocoapods-sorted-search =
374 cocoapods-sorted-search =
375 { dependencies = [String];
375 { dependencies = [String];
376 groups = [String];
376 groups = [String];
377− platforms = ∀ α. α;
377+ platforms = ∀ α. [α];
378 source = {remotes = [String]; sha256 = String; type = String;};
378 source = {remotes = [String]; sha256 = String; type = String;};
379 version = String;
379 version = String;
380 };
380 };
381 cocoapods-static-swift-framework =
381 cocoapods-static-swift-framework =
382 { dependencies = [String];
382 { dependencies = [String];
383 groups = [String];
383 groups = [String];
384− platforms = ∀ α. α;
384+ platforms = ∀ α. [α];
385 source = {remotes = [String]; sha256 = String; type = String;};
385 source = {remotes = [String]; sha256 = String; type = String;};
386 version = String;
386 version = String;
387 };
387 };
388 cocoapods-stats =
388 cocoapods-stats =
389 { groups = [String];
389 { groups = [String];
390− platforms = ∀ α. α;
390+ platforms = ∀ α. [α];
391 source = {remotes = [String]; sha256 = String; type = String;};
391 source = {remotes = [String]; sha256 = String; type = String;};
392 version = String;
392 version = String;
393 };
393 };
394 cocoapods-tdfire-binary =
394 cocoapods-tdfire-binary =
395 { dependencies = [String];
395 { dependencies = [String];
396 groups = [String];
396 groups = [String];
397− platforms = ∀ α. α;
397+ platforms = ∀ α. [α];
398 source = {remotes = [String]; sha256 = String; type = String;};
398 source = {remotes = [String]; sha256 = String; type = String;};
399 version = String;
399 version = String;
400 };
400 };
401 cocoapods-testing =
401 cocoapods-testing =
402 { dependencies = [String];
402 { dependencies = [String];
403 groups = [String];
403 groups = [String];
404− platforms = ∀ α. α;
404+ platforms = ∀ α. [α];
405 source = {remotes = [String]; sha256 = String; type = String;};
405 source = {remotes = [String]; sha256 = String; type = String;};
406 version = String;
406 version = String;
407 };
407 };
408 cocoapods-trunk =
408 cocoapods-trunk =
409 { dependencies = [String];
409 { dependencies = [String];
410 groups = [String];
410 groups = [String];
411− platforms = ∀ α. α;
411+ platforms = ∀ α. [α];
412 source = {remotes = [String]; sha256 = String; type = String;};
412 source = {remotes = [String]; sha256 = String; type = String;};
413 version = String;
413 version = String;
414 };
414 };
415 cocoapods-try =
415 cocoapods-try =
416 { groups = [String];
416 { groups = [String];
417− platforms = ∀ α. α;
417+ platforms = ∀ α. [α];
418 source = {remotes = [String]; sha256 = String; type = String;};
418 source = {remotes = [String]; sha256 = String; type = String;};
419 version = String;
419 version = String;
420 };
420 };
421 cocoapods-try-release-fix =
421 cocoapods-try-release-fix =
422 { groups = [String];
422 { groups = [String];
423− platforms = ∀ α. α;
423+ platforms = ∀ α. [α];
424 source = {remotes = [String]; sha256 = String; type = String;};
424 source = {remotes = [String]; sha256 = String; type = String;};
425 version = String;
425 version = String;
426 };
426 };
427 cocoapods-update-if-you-dare =
427 cocoapods-update-if-you-dare =
428 { dependencies = [String];
428 { dependencies = [String];
429 groups = [String];
429 groups = [String];
430− platforms = ∀ α. α;
430+ platforms = ∀ α. [α];
431 source = {remotes = [String]; sha256 = String; type = String;};
431 source = {remotes = [String]; sha256 = String; type = String;};
432 version = String;
432 version = String;
433 };
433 };
434 cocoapods-whitelist =
434 cocoapods-whitelist =
435 { groups = [String];
435 { groups = [String];
436− platforms = ∀ α. α;
436+ platforms = ∀ α. [α];
437 source = {remotes = [String]; sha256 = String; type = String;};
437 source = {remotes = [String]; sha256 = String; type = String;};
438 version = String;
438 version = String;
439 };
439 };
440 cocoapods-wholemodule =
440 cocoapods-wholemodule =
441 { groups = [String];
441 { groups = [String];
442− platforms = ∀ α. α;
442+ platforms = ∀ α. [α];
443 source = {remotes = [String]; sha256 = String; type = String;};
443 source = {remotes = [String]; sha256 = String; type = String;};
444 version = String;
444 version = String;
445 };
445 };
446 coderay =
446 coderay =
447 { groups = [String];
447 { groups = [String];
448− platforms = ∀ α. α;
448+ platforms = ∀ α. [α];
449 source = {remotes = [String]; sha256 = String; type = String;};
449 source = {remotes = [String]; sha256 = String; type = String;};
450 version = String;
450 version = String;
451 };
451 };
452 colorator =
452 colorator =
453 { groups = [String];
453 { groups = [String];
454− platforms = ∀ α. α;
454+ platforms = ∀ α. [α];
455 source = {remotes = [String]; sha256 = String; type = String;};
455 source = {remotes = [String]; sha256 = String; type = String;};
456 version = String;
456 version = String;
457 };
457 };
458 colored2 =
458 colored2 =
459 { groups = [String];
459 { groups = [String];
460− platforms = ∀ α. α;
460+ platforms = ∀ α. [α];
461 source = {remotes = [String]; sha256 = String; type = String;};
461 source = {remotes = [String]; sha256 = String; type = String;};
462 version = String;
462 version = String;
463 };
463 };
464 concurrent-ruby =
464 concurrent-ruby =
465 { groups = [String];
465 { groups = [String];
466− platforms = ∀ α. α;
466+ platforms = ∀ α. [α];
467 source = {remotes = [String]; sha256 = String; type = String;};
467 source = {remotes = [String]; sha256 = String; type = String;};
468 version = String;
468 version = String;
469 };
469 };
470 crass =
470 crass =
471 { groups = [String];
471 { groups = [String];
472− platforms = ∀ α. α;
472+ platforms = ∀ α. [α];
473 source = {remotes = [String]; sha256 = String; type = String;};
473 source = {remotes = [String]; sha256 = String; type = String;};
474 version = String;
474 version = String;
475 };
475 };
476 curb =
476 curb =
477 { groups = [String];
477 { groups = [String];
478− platforms = ∀ α. α;
478+ platforms = ∀ α. [α];
479 source = {remotes = [String]; sha256 = String; type = String;};
479 source = {remotes = [String]; sha256 = String; type = String;};
480 version = String;
480 version = String;
481 };
481 };
482 curses =
482 curses =
483 { groups = [String];
483 { groups = [String];
484− platforms = ∀ α. α;
484+ platforms = ∀ α. [α];
485 source = {remotes = [String]; sha256 = String; type = String;};
485 source = {remotes = [String]; sha256 = String; type = String;};
486 version = String;
486 version = String;
487 };
487 };
488 daemons =
488 daemons =
489 { groups = [String];
489 { groups = [String];
490− platforms = ∀ α. α;
490+ platforms = ∀ α. [α];
491 source = {remotes = [String]; sha256 = String; type = String;};
491 source = {remotes = [String]; sha256 = String; type = String;};
492 version = String;
492 version = String;
493 };
493 };
494 data_objects =
494 data_objects =
495 { dependencies = [String];
495 { dependencies = [String];
496 groups = [String];
496 groups = [String];
497− platforms = ∀ α. α;
497+ platforms = ∀ α. [α];
498 source = {remotes = [String]; sha256 = String; type = String;};
498 source = {remotes = [String]; sha256 = String; type = String;};
499 version = String;
499 version = String;
500 };
500 };
501 dep-selector-libgecode =
501 dep-selector-libgecode =
502 { groups = [String];
502 { groups = [String];
503− platforms = ∀ α. α;
503+ platforms = ∀ α. [α];
504 source = {remotes = [String]; sha256 = String; type = String;};
504 source = {remotes = [String]; sha256 = String; type = String;};
505 version = String;
505 version = String;
506 };
506 };
507 diff-lcs =
507 diff-lcs =
508 { groups = [String];
508 { groups = [String];
509− platforms = ∀ α. α;
509+ platforms = ∀ α. [α];
510 source = {remotes = [String]; sha256 = String; type = String;};
510 source = {remotes = [String]; sha256 = String; type = String;};
511 version = String;
511 version = String;
512 };
512 };
513 digest-sha3 =
513 digest-sha3 =
514 { groups = [String];
514 { groups = [String];
515− platforms = ∀ α. α;
515+ platforms = ∀ α. [α];
516 source = {remotes = [String]; sha256 = String; type = String;};
516 source = {remotes = [String]; sha256 = String; type = String;};
517 version = String;
517 version = String;
518 };
518 };
519 do_sqlite3 =
519 do_sqlite3 =
520 { dependencies = [String];
520 { dependencies = [String];
521 groups = [String];
521 groups = [String];
522− platforms = ∀ α. α;
522+ platforms = ∀ α. [α];
523 source = {remotes = [String]; sha256 = String; type = String;};
523 source = {remotes = [String]; sha256 = String; type = String;};
524 version = String;
524 version = String;
525 };
525 };
526 docile =
526 docile =
527 { groups = [String];
527 { groups = [String];
528− platforms = ∀ α. α;
528+ platforms = ∀ α. [α];
529 source = {remotes = [String]; sha256 = String; type = String;};
529 source = {remotes = [String]; sha256 = String; type = String;};
530 version = String;
530 version = String;
531 };
531 };
532 domain_name =
532 domain_name =
533 { dependencies = [String];
533 { dependencies = [String];
534 groups = [String];
534 groups = [String];
535− platforms = ∀ α. α;
535+ platforms = ∀ α. [α];
536 source = {remotes = [String]; sha256 = String; type = String;};
536 source = {remotes = [String]; sha256 = String; type = String;};
537 version = String;
537 version = String;
538 };
538 };
539 dotenv =
539 dotenv =
540 { groups = [String];
540 { groups = [String];
541− platforms = ∀ α. α;
541+ platforms = ∀ α. [α];
542 source = {remotes = [String]; sha256 = String; type = String;};
542 source = {remotes = [String]; sha256 = String; type = String;};
543 version = String;
543 version = String;
544 };
544 };
545 em-websocket =
545 em-websocket =
546 { dependencies = [String];
546 { dependencies = [String];
547 groups = [String];
547 groups = [String];
548− platforms = ∀ α. α;
548+ platforms = ∀ α. [α];
549 source = {remotes = [String]; sha256 = String; type = String;};
549 source = {remotes = [String]; sha256 = String; type = String;};
550 version = String;
550 version = String;
551 };
551 };
552 erubis =
552 erubis =
553 { groups = [String];
553 { groups = [String];
554− platforms = ∀ α. α;
554+ platforms = ∀ α. [α];
555 source = {remotes = [String]; sha256 = String; type = String;};
555 source = {remotes = [String]; sha256 = String; type = String;};
556 version = String;
556 version = String;
557 };
557 };
558 escape =
558 escape =
559 { groups = [String];
559 { groups = [String];
560− platforms = ∀ α. α;
560+ platforms = ∀ α. [α];
561 source = {remotes = [String]; sha256 = String; type = String;};
561 source = {remotes = [String]; sha256 = String; type = String;};
562 version = String;
562 version = String;
563 };
563 };
564 ethon =
564 ethon =
565 { dependencies = [String];
565 { dependencies = [String];
566 groups = [String];
566 groups = [String];
567− platforms = ∀ α. α;
567+ platforms = ∀ α. [α];
568 source = {remotes = [String]; sha256 = String; type = String;};
568 source = {remotes = [String]; sha256 = String; type = String;};
569 version = String;
569 version = String;
570 };
570 };
571 eventmachine =
571 eventmachine =
572 { groups = [String];
572 { groups = [String];
573− platforms = ∀ α. α;
573+ platforms = ∀ α. [α];
574 source = {remotes = [String]; sha256 = String; type = String;};
574 source = {remotes = [String]; sha256 = String; type = String;};
575 version = String;
575 version = String;
576 };
576 };
577 excon =
577 excon =
578 { groups = [String];
578 { groups = [String];
579− platforms = ∀ α. α;
579+ platforms = ∀ α. [α];
580 source = {remotes = [String]; sha256 = String; type = String;};
580 source = {remotes = [String]; sha256 = String; type = String;};
581 version = String;
581 version = String;
582 };
582 };
583 faraday =
583 faraday =
584 { dependencies = [String];
584 { dependencies = [String];
585 groups = [String];
585 groups = [String];
586− platforms = ∀ α. α;
586+ platforms = ∀ α. [α];
587 source = {remotes = [String]; sha256 = String; type = String;};
587 source = {remotes = [String]; sha256 = String; type = String;};
588 version = String;
588 version = String;
589 };
589 };
590 ffi =
590 ffi =
591 { groups = [String];
591 { groups = [String];
592− platforms = ∀ α. α;
592+ platforms = ∀ α. [α];
593 source = {remotes = [String]; sha256 = String; type = String;};
593 source = {remotes = [String]; sha256 = String; type = String;};
594 version = String;
594 version = String;
595 };
595 };
596 ffi-compiler =
596 ffi-compiler =
597 { dependencies = [String];
597 { dependencies = [String];
598 groups = [String];
598 groups = [String];
599− platforms = ∀ α. α;
599+ platforms = ∀ α. [α];
600 source = {remotes = [String]; sha256 = String; type = String;};
600 source = {remotes = [String]; sha256 = String; type = String;};
601 version = String;
601 version = String;
602 };
602 };
603 ffi-rzmq-core =
603 ffi-rzmq-core =
604 { dependencies = [String];
604 { dependencies = [String];
605 groups = [String];
605 groups = [String];
606− platforms = ∀ α. α;
606+ platforms = ∀ α. [α];
607 source = {remotes = [String]; sha256 = String; type = String;};
607 source = {remotes = [String]; sha256 = String; type = String;};
608 version = String;
608 version = String;
609 };
609 };
610 fog-core =
610 fog-core =
611 { dependencies = [String];
611 { dependencies = [String];
612 groups = [String];
612 groups = [String];
613− platforms = ∀ α. α;
613+ platforms = ∀ α. [α];
614 source = {remotes = [String]; sha256 = String; type = String;};
614 source = {remotes = [String]; sha256 = String; type = String;};
615 version = String;
615 version = String;
616 };
616 };
617 fog-dnsimple =
617 fog-dnsimple =
618 { dependencies = [String];
618 { dependencies = [String];
619 groups = [String];
619 groups = [String];
620− platforms = ∀ α. α;
620+ platforms = ∀ α. [α];
621 source = {remotes = [String]; sha256 = String; type = String;};
621 source = {remotes = [String]; sha256 = String; type = String;};
622 version = String;
622 version = String;
623 };
623 };
624 fog-json =
624 fog-json =
625 { dependencies = [String];
625 { dependencies = [String];
626 groups = [String];
626 groups = [String];
627− platforms = ∀ α. α;
627+ platforms = ∀ α. [α];
628 source = {remotes = [String]; sha256 = String; type = String;};
628 source = {remotes = [String]; sha256 = String; type = String;};
629 version = String;
629 version = String;
630 };
630 };
631 formatador =
631 formatador =
632 { groups = [String];
632 { groups = [String];
633− platforms = ∀ α. α;
633+ platforms = ∀ α. [α];
634 source = {remotes = [String]; sha256 = String; type = String;};
634 source = {remotes = [String]; sha256 = String; type = String;};
635 version = String;
635 version = String;
636 };
636 };
637 forwardable-extended =
637 forwardable-extended =
638 { groups = [String];
638 { groups = [String];
639− platforms = ∀ α. α;
639+ platforms = ∀ α. [α];
640 source = {remotes = [String]; sha256 = String; type = String;};
640 source = {remotes = [String]; sha256 = String; type = String;};
641 version = String;
641 version = String;
642 };
642 };
643 fourflusher =
643 fourflusher =
644 { groups = [String];
644 { groups = [String];
645− platforms = ∀ α. α;
645+ platforms = ∀ α. [α];
646 source = {remotes = [String]; sha256 = String; type = String;};
646 source = {remotes = [String]; sha256 = String; type = String;};
647 version = String;
647 version = String;
648 };
648 };
649 fuzzy_match =
649 fuzzy_match =
650 { groups = [String];
650 { groups = [String];
651− platforms = ∀ α. α;
651+ platforms = ∀ α. [α];
652 source = {remotes = [String]; sha256 = String; type = String;};
652 source = {remotes = [String]; sha256 = String; type = String;};
653 version = String;
653 version = String;
654 };
654 };
655 gdk_pixbuf2 =
655 gdk_pixbuf2 =
656 { dependencies = [String];
656 { dependencies = [String];
657 groups = [String];
657 groups = [String];
658− platforms = ∀ α. α;
658+ platforms = ∀ α. [α];
659 source = {remotes = [String]; sha256 = String; type = String;};
659 source = {remotes = [String]; sha256 = String; type = String;};
660 version = String;
660 version = String;
661 };
661 };
662 gh_inspector =
662 gh_inspector =
663 { groups = [String];
663 { groups = [String];
664− platforms = ∀ α. α;
664+ platforms = ∀ α. [α];
665 source = {remotes = [String]; sha256 = String; type = String;};
665 source = {remotes = [String]; sha256 = String; type = String;};
666 version = String;
666 version = String;
667 };
667 };
668 gio2 =
668 gio2 =
669 { dependencies = [String];
669 { dependencies = [String];
670 groups = [String];
670 groups = [String];
671− platforms = ∀ α. α;
671+ platforms = ∀ α. [α];
672 source = {remotes = [String]; sha256 = String; type = String;};
672 source = {remotes = [String]; sha256 = String; type = String;};
673 version = String;
673 version = String;
674 };
674 };
675 gitlab-markup =
675 gitlab-markup =
676 { groups = [String];
676 { groups = [String];
677− platforms = ∀ α. α;
677+ platforms = ∀ α. [α];
678 source = {remotes = [String]; sha256 = String; type = String;};
678 source = {remotes = [String]; sha256 = String; type = String;};
679 version = String;
679 version = String;
680 };
680 };
681 glib2 =
681 glib2 =
682 { dependencies = [String];
682 { dependencies = [String];
683 groups = [String];
683 groups = [String];
684− platforms = ∀ α. α;
684+ platforms = ∀ α. [α];
685 source = {remotes = [String]; sha256 = String; type = String;};
685 source = {remotes = [String]; sha256 = String; type = String;};
686 version = String;
686 version = String;
687 };
687 };
688 globalid =
688 globalid =
689 { dependencies = [String];
689 { dependencies = [String];
690 groups = [String];
690 groups = [String];
691− platforms = ∀ α. α;
691+ platforms = ∀ α. [α];
692 source = {remotes = [String]; sha256 = String; type = String;};
692 source = {remotes = [String]; sha256 = String; type = String;};
693 version = String;
693 version = String;
694 };
694 };
695 gobject-introspection =
695 gobject-introspection =
696 { dependencies = [String];
696 { dependencies = [String];
697 groups = [String];
697 groups = [String];
698− platforms = ∀ α. α;
698+ platforms = ∀ α. [α];
699 source = {remotes = [String]; sha256 = String; type = String;};
699 source = {remotes = [String]; sha256 = String; type = String;};
700 version = String;
700 version = String;
701 };
701 };
702 gpgme =
702 gpgme =
703 { dependencies = [String];
703 { dependencies = [String];
704 groups = [String];
704 groups = [String];
705− platforms = ∀ α. α;
705+ platforms = ∀ α. [α];
706 source = {remotes = [String]; sha256 = String; type = String;};
706 source = {remotes = [String]; sha256 = String; type = String;};
707 version = String;
707 version = String;
708 };
708 };
@@ -710,361 +710,361 @@
710 { dependencies = [String];
710 { dependencies = [String];
711 groups = [String];
711 groups = [String];
712 meta = {broken = Bool;};
712 meta = {broken = Bool;};
713− platforms = ∀ α. α;
713+ platforms = ∀ α. [α];
714 source = {remotes = [String]; sha256 = String; type = String;};
714 source = {remotes = [String]; sha256 = String; type = String;};
715 version = String;
715 version = String;
716 };
716 };
717 hashie =
717 hashie =
718 { groups = [String];
718 { groups = [String];
719− platforms = ∀ α. α;
719+ platforms = ∀ α. [α];
720 source = {remotes = [String]; sha256 = String; type = String;};
720 source = {remotes = [String]; sha256 = String; type = String;};
721 version = String;
721 version = String;
722 };
722 };
723 highline =
723 highline =
724 { groups = [String];
724 { groups = [String];
725− platforms = ∀ α. α;
725+ platforms = ∀ α. [α];
726 source = {remotes = [String]; sha256 = String; type = String;};
726 source = {remotes = [String]; sha256 = String; type = String;};
727 version = String;
727 version = String;
728 };
728 };
729 hike =
729 hike =
730 { groups = [String];
730 { groups = [String];
731− platforms = ∀ α. α;
731+ platforms = ∀ α. [α];
732 source = {remotes = [String]; sha256 = String; type = String;};
732 source = {remotes = [String]; sha256 = String; type = String;};
733 version = String;
733 version = String;
734 };
734 };
735 hitimes =
735 hitimes =
736 { groups = [String];
736 { groups = [String];
737− platforms = ∀ α. α;
737+ platforms = ∀ α. [α];
738 source = {remotes = [String]; sha256 = String; type = String;};
738 source = {remotes = [String]; sha256 = String; type = String;};
739 version = String;
739 version = String;
740 };
740 };
741 hpricot =
741 hpricot =
742 { groups = [String];
742 { groups = [String];
743− platforms = ∀ α. α;
743+ platforms = ∀ α. [α];
744 source = {remotes = [String]; sha256 = String; type = String;};
744 source = {remotes = [String]; sha256 = String; type = String;};
745 version = String;
745 version = String;
746 };
746 };
747 http-accept =
747 http-accept =
748 { groups = [String];
748 { groups = [String];
749− platforms = ∀ α. α;
749+ platforms = ∀ α. [α];
750 source = {remotes = [String]; sha256 = String; type = String;};
750 source = {remotes = [String]; sha256 = String; type = String;};
751 version = String;
751 version = String;
752 };
752 };
753 http-cookie =
753 http-cookie =
754 { dependencies = [String];
754 { dependencies = [String];
755 groups = [String];
755 groups = [String];
756− platforms = ∀ α. α;
756+ platforms = ∀ α. [α];
757 source = {remotes = [String]; sha256 = String; type = String;};
757 source = {remotes = [String]; sha256 = String; type = String;};
758 version = String;
758 version = String;
759 };
759 };
760 http_parser.rb =
760 http_parser.rb =
761 { groups = [String];
761 { groups = [String];
762− platforms = ∀ α. α;
762+ platforms = ∀ α. [α];
763 source = {remotes = [String]; sha256 = String; type = String;};
763 source = {remotes = [String]; sha256 = String; type = String;};
764 version = String;
764 version = String;
765 };
765 };
766 httpclient =
766 httpclient =
767 { groups = [String];
767 { groups = [String];
768− platforms = ∀ α. α;
768+ platforms = ∀ α. [α];
769 source = {remotes = [String]; sha256 = String; type = String;};
769 source = {remotes = [String]; sha256 = String; type = String;};
770 version = String;
770 version = String;
771 };
771 };
772 i18n =
772 i18n =
773 { dependencies = [String];
773 { dependencies = [String];
774 groups = [String];
774 groups = [String];
775− platforms = ∀ α. α;
775+ platforms = ∀ α. [α];
776 source = {remotes = [String]; sha256 = String; type = String;};
776 source = {remotes = [String]; sha256 = String; type = String;};
777 version = String;
777 version = String;
778 };
778 };
779 iconv =
779 iconv =
780 { groups = [String];
780 { groups = [String];
781− platforms = ∀ α. α;
781+ platforms = ∀ α. [α];
782 source = {remotes = [String]; sha256 = String; type = String;};
782 source = {remotes = [String]; sha256 = String; type = String;};
783 version = String;
783 version = String;
784 };
784 };
785 idn-ruby =
785 idn-ruby =
786 { groups = [String];
786 { groups = [String];
787− platforms = ∀ α. α;
787+ platforms = ∀ α. [α];
788 source = {remotes = [String]; sha256 = String; type = String;};
788 source = {remotes = [String]; sha256 = String; type = String;};
789 version = String;
789 version = String;
790 };
790 };
791 jaro_winkler =
791 jaro_winkler =
792 { groups = [String];
792 { groups = [String];
793− platforms = ∀ α. α;
793+ platforms = ∀ α. [α];
794 source = {remotes = [String]; sha256 = String; type = String;};
794 source = {remotes = [String]; sha256 = String; type = String;};
795 version = String;
795 version = String;
796 };
796 };
797 jbuilder =
797 jbuilder =
798 { dependencies = [String];
798 { dependencies = [String];
799 groups = [String];
799 groups = [String];
800− platforms = ∀ α. α;
800+ platforms = ∀ α. [α];
801 source = {remotes = [String]; sha256 = String; type = String;};
801 source = {remotes = [String]; sha256 = String; type = String;};
802 version = String;
802 version = String;
803 };
803 };
804 jekyll =
804 jekyll =
805 { dependencies = [String];
805 { dependencies = [String];
806 groups = [String];
806 groups = [String];
807− platforms = ∀ α. α;
807+ platforms = ∀ α. [α];
808 source = {remotes = [String]; sha256 = String; type = String;};
808 source = {remotes = [String]; sha256 = String; type = String;};
809 version = String;
809 version = String;
810 };
810 };
811 jekyll-sass-converter =
811 jekyll-sass-converter =
812 { dependencies = [String];
812 { dependencies = [String];
813 groups = [String];
813 groups = [String];
814− platforms = ∀ α. α;
814+ platforms = ∀ α. [α];
815 source = {remotes = [String]; sha256 = String; type = String;};
815 source = {remotes = [String]; sha256 = String; type = String;};
816 version = String;
816 version = String;
817 };
817 };
818 jekyll-watch =
818 jekyll-watch =
819 { dependencies = [String];
819 { dependencies = [String];
820 groups = [String];
820 groups = [String];
821− platforms = ∀ α. α;
821+ platforms = ∀ α. [α];
822 source = {remotes = [String]; sha256 = String; type = String;};
822 source = {remotes = [String]; sha256 = String; type = String;};
823 version = String;
823 version = String;
824 };
824 };
825 jmespath =
825 jmespath =
826 { groups = [String];
826 { groups = [String];
827− platforms = ∀ α. α;
827+ platforms = ∀ α. [α];
828 source = {remotes = [String]; sha256 = String; type = String;};
828 source = {remotes = [String]; sha256 = String; type = String;};
829 version = String;
829 version = String;
830 };
830 };
831 json =
831 json =
832 { groups = [String];
832 { groups = [String];
833− platforms = ∀ α. α;
833+ platforms = ∀ α. [α];
834 source = {remotes = [String]; sha256 = String; type = String;};
834 source = {remotes = [String]; sha256 = String; type = String;};
835 version = String;
835 version = String;
836 };
836 };
837 jwt =
837 jwt =
838 { groups = [String];
838 { groups = [String];
839− platforms = ∀ α. α;
839+ platforms = ∀ α. [α];
840 source = {remotes = [String]; sha256 = String; type = String;};
840 source = {remotes = [String]; sha256 = String; type = String;};
841 version = String;
841 version = String;
842 };
842 };
843 kramdown =
843 kramdown =
844 { groups = [String];
844 { groups = [String];
845− platforms = ∀ α. α;
845+ platforms = ∀ α. [α];
846 source = {remotes = [String]; sha256 = String; type = String;};
846 source = {remotes = [String]; sha256 = String; type = String;};
847 version = String;
847 version = String;
848 };
848 };
849 kramdown-parser-gfm =
849 kramdown-parser-gfm =
850 { dependencies = [String];
850 { dependencies = [String];
851 groups = [String];
851 groups = [String];
852− platforms = ∀ α. α;
852+ platforms = ∀ α. [α];
853 source = {remotes = [String]; sha256 = String; type = String;};
853 source = {remotes = [String]; sha256 = String; type = String;};
854 version = String;
854 version = String;
855 };
855 };
856 libv8 =
856 libv8 =
857 { groups = [String];
857 { groups = [String];
858− platforms = ∀ α. α;
858+ platforms = ∀ α. [α];
859 source = {remotes = [String]; sha256 = String; type = String;};
859 source = {remotes = [String]; sha256 = String; type = String;};
860 version = String;
860 version = String;
861 };
861 };
862 libxml-ruby =
862 libxml-ruby =
863 { groups = [String];
863 { groups = [String];
864− platforms = ∀ α. α;
864+ platforms = ∀ α. [α];
865 source = {remotes = [String]; sha256 = String; type = String;};
865 source = {remotes = [String]; sha256 = String; type = String;};
866 version = String;
866 version = String;
867 };
867 };
868 liquid =
868 liquid =
869 { groups = [String];
869 { groups = [String];
870− platforms = ∀ α. α;
870+ platforms = ∀ α. [α];
871 source = {remotes = [String]; sha256 = String; type = String;};
871 source = {remotes = [String]; sha256 = String; type = String;};
872 version = String;
872 version = String;
873 };
873 };
874 listen =
874 listen =
875 { dependencies = [String];
875 { dependencies = [String];
876 groups = [String];
876 groups = [String];
877− platforms = ∀ α. α;
877+ platforms = ∀ α. [α];
878 source = {remotes = [String]; sha256 = String; type = String;};
878 source = {remotes = [String]; sha256 = String; type = String;};
879 version = String;
879 version = String;
880 };
880 };
881 loofah =
881 loofah =
882 { dependencies = [String];
882 { dependencies = [String];
883 groups = [String];
883 groups = [String];
884− platforms = ∀ α. α;
884+ platforms = ∀ α. [α];
885 source = {remotes = [String]; sha256 = String; type = String;};
885 source = {remotes = [String]; sha256 = String; type = String;};
886 version = String;
886 version = String;
887 };
887 };
888 mab =
888 mab =
889 { groups = [String];
889 { groups = [String];
890− platforms = ∀ α. α;
890+ platforms = ∀ α. [α];
891 source = {remotes = [String]; sha256 = String; type = String;};
891 source = {remotes = [String]; sha256 = String; type = String;};
892 version = String;
892 version = String;
893 };
893 };
894 magic =
894 magic =
895 { dependencies = [String];
895 { dependencies = [String];
896 groups = [String];
896 groups = [String];
897− platforms = ∀ α. α;
897+ platforms = ∀ α. [α];
898 source = {remotes = [String]; sha256 = String; type = String;};
898 source = {remotes = [String]; sha256 = String; type = String;};
899 version = String;
899 version = String;
900 };
900 };
901 mail =
901 mail =
902 { dependencies = [String];
902 { dependencies = [String];
903 groups = [String];
903 groups = [String];
904− platforms = ∀ α. α;
904+ platforms = ∀ α. [α];
905 source = {remotes = [String]; sha256 = String; type = String;};
905 source = {remotes = [String]; sha256 = String; type = String;};
906 version = String;
906 version = String;
907 };
907 };
908 markaby =
908 markaby =
909 { dependencies = [String];
909 { dependencies = [String];
910 groups = [String];
910 groups = [String];
911− platforms = ∀ α. α;
911+ platforms = ∀ α. [α];
912 source = {remotes = [String]; sha256 = String; type = String;};
912 source = {remotes = [String]; sha256 = String; type = String;};
913 version = String;
913 version = String;
914 };
914 };
915 mercenary =
915 mercenary =
916 { groups = [String];
916 { groups = [String];
917− platforms = ∀ α. α;
917+ platforms = ∀ α. [α];
918 source = {remotes = [String]; sha256 = String; type = String;};
918 source = {remotes = [String]; sha256 = String; type = String;};
919 version = String;
919 version = String;
920 };
920 };
921 method_source =
921 method_source =
922 { groups = [String];
922 { groups = [String];
923− platforms = ∀ α. α;
923+ platforms = ∀ α. [α];
924 source = {remotes = [String]; sha256 = String; type = String;};
924 source = {remotes = [String]; sha256 = String; type = String;};
925 version = String;
925 version = String;
926 };
926 };
927 mime-types =
927 mime-types =
928 { dependencies = [String];
928 { dependencies = [String];
929 groups = [String];
929 groups = [String];
930− platforms = ∀ α. α;
930+ platforms = ∀ α. [α];
931 source = {remotes = [String]; sha256 = String; type = String;};
931 source = {remotes = [String]; sha256 = String; type = String;};
932 version = String;
932 version = String;
933 };
933 };
934 mime-types-data =
934 mime-types-data =
935 { groups = [String];
935 { groups = [String];
936− platforms = ∀ α. α;
936+ platforms = ∀ α. [α];
937 source = {remotes = [String]; sha256 = String; type = String;};
937 source = {remotes = [String]; sha256 = String; type = String;};
938 version = String;
938 version = String;
939 };
939 };
940 mini_magick =
940 mini_magick =
941 { groups = [String];
941 { groups = [String];
942− platforms = ∀ α. α;
942+ platforms = ∀ α. [α];
943 source = {remotes = [String]; sha256 = String; type = String;};
943 source = {remotes = [String]; sha256 = String; type = String;};
944 version = String;
944 version = String;
945 };
945 };
946 mini_mime =
946 mini_mime =
947 { groups = [String];
947 { groups = [String];
948− platforms = ∀ α. α;
948+ platforms = ∀ α. [α];
949 source = {remotes = [String]; sha256 = String; type = String;};
949 source = {remotes = [String]; sha256 = String; type = String;};
950 version = String;
950 version = String;
951 };
951 };
952 mini_portile2 =
952 mini_portile2 =
953 { groups = [String];
953 { groups = [String];
954− platforms = ∀ α. α;
954+ platforms = ∀ α. [α];
955 source = {remotes = [String]; sha256 = String; type = String;};
955 source = {remotes = [String]; sha256 = String; type = String;};
956 version = String;
956 version = String;
957 };
957 };
958 minitest =
958 minitest =
959 { groups = [String];
959 { groups = [String];
960− platforms = ∀ α. α;
960+ platforms = ∀ α. [α];
961 source = {remotes = [String]; sha256 = String; type = String;};
961 source = {remotes = [String]; sha256 = String; type = String;};
962 version = String;
962 version = String;
963 };
963 };
964 molinillo =
964 molinillo =
965 { groups = [String];
965 { groups = [String];
966− platforms = ∀ α. α;
966+ platforms = ∀ α. [α];
967 source = {remotes = [String]; sha256 = String; type = String;};
967 source = {remotes = [String]; sha256 = String; type = String;};
968 version = String;
968 version = String;
969 };
969 };
970 msgpack =
970 msgpack =
971 { groups = [String];
971 { groups = [String];
972− platforms = ∀ α. α;
972+ platforms = ∀ α. [α];
973 source = {remotes = [String]; sha256 = String; type = String;};
973 source = {remotes = [String]; sha256 = String; type = String;};
974 version = String;
974 version = String;
975 };
975 };
976 multi_json =
976 multi_json =
977 { groups = [String];
977 { groups = [String];
978− platforms = ∀ α. α;
978+ platforms = ∀ α. [α];
979 source = {remotes = [String]; sha256 = String; type = String;};
979 source = {remotes = [String]; sha256 = String; type = String;};
980 version = String;
980 version = String;
981 };
981 };
982 multipart-post =
982 multipart-post =
983 { groups = [String];
983 { groups = [String];
984− platforms = ∀ α. α;
984+ platforms = ∀ α. [α];
985 source = {remotes = [String]; sha256 = String; type = String;};
985 source = {remotes = [String]; sha256 = String; type = String;};
986 version = String;
986 version = String;
987 };
987 };
988 mysql2 =
988 mysql2 =
989 { groups = [String];
989 { groups = [String];
990− platforms = ∀ α. α;
990+ platforms = ∀ α. [α];
991 source = {remotes = [String]; sha256 = String; type = String;};
991 source = {remotes = [String]; sha256 = String; type = String;};
992 version = String;
992 version = String;
993 };
993 };
994 nanaimo =
994 nanaimo =
995 { groups = [String];
995 { groups = [String];
996− platforms = ∀ α. α;
996+ platforms = ∀ α. [α];
997 source = {remotes = [String]; sha256 = String; type = String;};
997 source = {remotes = [String]; sha256 = String; type = String;};
998 version = String;
998 version = String;
999 };
999 };
1000 nap =
1000 nap =
1001 { groups = [String];
1001 { groups = [String];
1002− platforms = ∀ α. α;
1002+ platforms = ∀ α. [α];
1003 source = {remotes = [String]; sha256 = String; type = String;};
1003 source = {remotes = [String]; sha256 = String; type = String;};
1004 version = String;
1004 version = String;
1005 };
1005 };
1006 native-package-installer =
1006 native-package-installer =
1007 { groups = [String];
1007 { groups = [String];
1008− platforms = ∀ α. α;
1008+ platforms = ∀ α. [α];
1009 source = {remotes = [String]; sha256 = String; type = String;};
1009 source = {remotes = [String]; sha256 = String; type = String;};
1010 version = String;
1010 version = String;
1011 };
1011 };
1012 ncursesw =
1012 ncursesw =
1013 { groups = [String];
1013 { groups = [String];
1014− platforms = ∀ α. α;
1014+ platforms = ∀ α. [α];
1015 source = {remotes = [String]; sha256 = String; type = String;};
1015 source = {remotes = [String]; sha256 = String; type = String;};
1016 version = String;
1016 version = String;
1017 };
1017 };
1018 net-scp =
1018 net-scp =
1019 { dependencies = [String];
1019 { dependencies = [String];
1020 groups = [String];
1020 groups = [String];
1021− platforms = ∀ α. α;
1021+ platforms = ∀ α. [α];
1022 source = {remotes = [String]; sha256 = String; type = String;};
1022 source = {remotes = [String]; sha256 = String; type = String;};
1023 version = String;
1023 version = String;
1024 };
1024 };
1025 net-ssh =
1025 net-ssh =
1026 { groups = [String];
1026 { groups = [String];
1027− platforms = ∀ α. α;
1027+ platforms = ∀ α. [α];
1028 source = {remotes = [String]; sha256 = String; type = String;};
1028 source = {remotes = [String]; sha256 = String; type = String;};
1029 version = String;
1029 version = String;
1030 };
1030 };
1031 netrc =
1031 netrc =
1032 { groups = [String];
1032 { groups = [String];
1033− platforms = ∀ α. α;
1033+ platforms = ∀ α. [α];
1034 source = {remotes = [String]; sha256 = String; type = String;};
1034 source = {remotes = [String]; sha256 = String; type = String;};
1035 version = String;
1035 version = String;
1036 };
1036 };
1037 nio4r =
1037 nio4r =
1038 { groups = [String];
1038 { groups = [String];
1039− platforms = ∀ α. α;
1039+ platforms = ∀ α. [α];
1040 source = {remotes = [String]; sha256 = String; type = String;};
1040 source = {remotes = [String]; sha256 = String; type = String;};
1041 version = String;
1041 version = String;
1042 };
1042 };
1043 nokogiri =
1043 nokogiri =
1044 { dependencies = [String];
1044 { dependencies = [String];
1045 groups = [String];
1045 groups = [String];
1046− platforms = ∀ α. α;
1046+ platforms = ∀ α. [α];
1047 source = {remotes = [String]; sha256 = String; type = String;};
1047 source = {remotes = [String]; sha256 = String; type = String;};
1048 version = String;
1048 version = String;
1049 };
1049 };
1050 opus-ruby =
1050 opus-ruby =
1051 { dependencies = [String];
1051 { dependencies = [String];
1052 groups = [String];
1052 groups = [String];
1053− platforms = ∀ α. α;
1053+ platforms = ∀ α. [α];
1054 source = {remotes = [String]; sha256 = String; type = String;};
1054 source = {remotes = [String]; sha256 = String; type = String;};
1055 version = String;
1055 version = String;
1056 };
1056 };
1057 osx_keychain =
1057 osx_keychain =
1058 { dependencies = [String];
1058 { dependencies = [String];
1059 groups = [String];
1059 groups = [String];
1060− platforms = ∀ α. α;
1060+ platforms = ∀ α. [α];
1061 source = {remotes = [String]; sha256 = String; type = String;};
1061 source = {remotes = [String]; sha256 = String; type = String;};
1062 version = String;
1062 version = String;
1063 };
1063 };
1064 ovirt-engine-sdk =
1064 ovirt-engine-sdk =
1065 { dependencies = [String];
1065 { dependencies = [String];
1066 groups = [String];
1066 groups = [String];
1067− platforms = ∀ α. α;
1067+ platforms = ∀ α. [α];
1068 source = {remotes = [String]; sha256 = String; type = String;};
1068 source = {remotes = [String]; sha256 = String; type = String;};
1069 version = String;
1069 version = String;
1070 };
1070 };
@@ -1072,563 +1072,563 @@
1072 { dependencies = [String];
1072 { dependencies = [String];
1073 groups = [String];
1073 groups = [String];
1074 meta = {broken = Bool;};
1074 meta = {broken = Bool;};
1075− platforms = ∀ α. α;
1075+ platforms = ∀ α. [α];
1076 source = {remotes = [String]; sha256 = String; type = String;};
1076 source = {remotes = [String]; sha256 = String; type = String;};
1077 version = String;
1077 version = String;
1078 };
1078 };
1079 parallel =
1079 parallel =
1080 { groups = [String];
1080 { groups = [String];
1081− platforms = ∀ α. α;
1081+ platforms = ∀ α. [α];
1082 source = {remotes = [String]; sha256 = String; type = String;};
1082 source = {remotes = [String]; sha256 = String; type = String;};
1083 version = String;
1083 version = String;
1084 };
1084 };
1085 parser =
1085 parser =
1086 { dependencies = [String];
1086 { dependencies = [String];
1087 groups = [String];
1087 groups = [String];
1088− platforms = ∀ α. α;
1088+ platforms = ∀ α. [α];
1089 source = {remotes = [String]; sha256 = String; type = String;};
1089 source = {remotes = [String]; sha256 = String; type = String;};
1090 version = String;
1090 version = String;
1091 };
1091 };
1092 pathutil =
1092 pathutil =
1093 { dependencies = [String];
1093 { dependencies = [String];
1094 groups = [String];
1094 groups = [String];
1095− platforms = ∀ α. α;
1095+ platforms = ∀ α. [α];
1096 source = {remotes = [String]; sha256 = String; type = String;};
1096 source = {remotes = [String]; sha256 = String; type = String;};
1097 version = String;
1097 version = String;
1098 };
1098 };
1099 patron =
1099 patron =
1100 { groups = [String];
1100 { groups = [String];
1101− platforms = ∀ α. α;
1101+ platforms = ∀ α. [α];
1102 source = {remotes = [String]; sha256 = String; type = String;};
1102 source = {remotes = [String]; sha256 = String; type = String;};
1103 version = String;
1103 version = String;
1104 };
1104 };
1105 pcaprub =
1105 pcaprub =
1106 { groups = [String];
1106 { groups = [String];
1107− platforms = ∀ α. α;
1107+ platforms = ∀ α. [α];
1108 source = {remotes = [String]; sha256 = String; type = String;};
1108 source = {remotes = [String]; sha256 = String; type = String;};
1109 version = String;
1109 version = String;
1110 };
1110 };
1111 pg =
1111 pg =
1112 { groups = [String];
1112 { groups = [String];
1113− platforms = ∀ α. α;
1113+ platforms = ∀ α. [α];
1114 source = {remotes = [String]; sha256 = String; type = String;};
1114 source = {remotes = [String]; sha256 = String; type = String;};
1115 version = String;
1115 version = String;
1116 };
1116 };
1117 pkg-config =
1117 pkg-config =
1118 { groups = [String];
1118 { groups = [String];
1119− platforms = ∀ α. α;
1119+ platforms = ∀ α. [α];
1120 source = {remotes = [String]; sha256 = String; type = String;};
1120 source = {remotes = [String]; sha256 = String; type = String;};
1121 version = String;
1121 version = String;
1122 };
1122 };
1123 polyglot =
1123 polyglot =
1124 { groups = [String];
1124 { groups = [String];
1125− platforms = ∀ α. α;
1125+ platforms = ∀ α. [α];
1126 source = {remotes = [String]; sha256 = String; type = String;};
1126 source = {remotes = [String]; sha256 = String; type = String;};
1127 version = String;
1127 version = String;
1128 };
1128 };
1129 pry =
1129 pry =
1130 { dependencies = [String];
1130 { dependencies = [String];
1131 groups = [String];
1131 groups = [String];
1132− platforms = ∀ α. α;
1132+ platforms = ∀ α. [α];
1133 source = {remotes = [String]; sha256 = String; type = String;};
1133 source = {remotes = [String]; sha256 = String; type = String;};
1134 version = String;
1134 version = String;
1135 };
1135 };
1136 pry-byebug =
1136 pry-byebug =
1137 { dependencies = [String];
1137 { dependencies = [String];
1138 groups = [String];
1138 groups = [String];
1139− platforms = ∀ α. α;
1139+ platforms = ∀ α. [α];
1140 source = {remotes = [String]; sha256 = String; type = String;};
1140 source = {remotes = [String]; sha256 = String; type = String;};
1141 version = String;
1141 version = String;
1142 };
1142 };
1143 pry-doc =
1143 pry-doc =
1144 { dependencies = [String];
1144 { dependencies = [String];
1145 groups = [String];
1145 groups = [String];
1146− platforms = ∀ α. α;
1146+ platforms = ∀ α. [α];
1147 source = {remotes = [String]; sha256 = String; type = String;};
1147 source = {remotes = [String]; sha256 = String; type = String;};
1148 version = String;
1148 version = String;
1149 };
1149 };
1150 public_suffix =
1150 public_suffix =
1151 { groups = [String];
1151 { groups = [String];
1152− platforms = ∀ α. α;
1152+ platforms = ∀ α. [α];
1153 source = {remotes = [String]; sha256 = String; type = String;};
1153 source = {remotes = [String]; sha256 = String; type = String;};
1154 version = String;
1154 version = String;
1155 };
1155 };
1156 puma =
1156 puma =
1157 { dependencies = [String];
1157 { dependencies = [String];
1158 groups = [String];
1158 groups = [String];
1159− platforms = ∀ α. α;
1159+ platforms = ∀ α. [α];
1160 source = {remotes = [String]; sha256 = String; type = String;};
1160 source = {remotes = [String]; sha256 = String; type = String;};
1161 version = String;
1161 version = String;
1162 };
1162 };
1163 rack =
1163 rack =
1164 { groups = [String];
1164 { groups = [String];
1165− platforms = ∀ α. α;
1165+ platforms = ∀ α. [α];
1166 source = {remotes = [String]; sha256 = String; type = String;};
1166 source = {remotes = [String]; sha256 = String; type = String;};
1167 version = String;
1167 version = String;
1168 };
1168 };
1169 rack-protection =
1169 rack-protection =
1170 { dependencies = [String];
1170 { dependencies = [String];
1171 groups = [String];
1171 groups = [String];
1172− platforms = ∀ α. α;
1172+ platforms = ∀ α. [α];
1173 source = {remotes = [String]; sha256 = String; type = String;};
1173 source = {remotes = [String]; sha256 = String; type = String;};
1174 version = String;
1174 version = String;
1175 };
1175 };
1176 rack-test =
1176 rack-test =
1177 { dependencies = [String];
1177 { dependencies = [String];
1178 groups = [String];
1178 groups = [String];
1179− platforms = ∀ α. α;
1179+ platforms = ∀ α. [α];
1180 source = {remotes = [String]; sha256 = String; type = String;};
1180 source = {remotes = [String]; sha256 = String; type = String;};
1181 version = String;
1181 version = String;
1182 };
1182 };
1183 rails =
1183 rails =
1184 { dependencies = [String];
1184 { dependencies = [String];
1185 groups = [String];
1185 groups = [String];
1186− platforms = ∀ α. α;
1186+ platforms = ∀ α. [α];
1187 source = {remotes = [String]; sha256 = String; type = String;};
1187 source = {remotes = [String]; sha256 = String; type = String;};
1188 version = String;
1188 version = String;
1189 };
1189 };
1190 rails-deprecated_sanitizer =
1190 rails-deprecated_sanitizer =
1191 { dependencies = [String];
1191 { dependencies = [String];
1192 groups = [String];
1192 groups = [String];
1193− platforms = ∀ α. α;
1193+ platforms = ∀ α. [α];
1194 source = {remotes = [String]; sha256 = String; type = String;};
1194 source = {remotes = [String]; sha256 = String; type = String;};
1195 version = String;
1195 version = String;
1196 };
1196 };
1197 rails-dom-testing =
1197 rails-dom-testing =
1198 { dependencies = [String];
1198 { dependencies = [String];
1199 groups = [String];
1199 groups = [String];
1200− platforms = ∀ α. α;
1200+ platforms = ∀ α. [α];
1201 source = {remotes = [String]; sha256 = String; type = String;};
1201 source = {remotes = [String]; sha256 = String; type = String;};
1202 version = String;
1202 version = String;
1203 };
1203 };
1204 rails-html-sanitizer =
1204 rails-html-sanitizer =
1205 { dependencies = [String];
1205 { dependencies = [String];
1206 groups = [String];
1206 groups = [String];
1207− platforms = ∀ α. α;
1207+ platforms = ∀ α. [α];
1208 source = {remotes = [String]; sha256 = String; type = String;};
1208 source = {remotes = [String]; sha256 = String; type = String;};
1209 version = String;
1209 version = String;
1210 };
1210 };
1211 railties =
1211 railties =
1212 { dependencies = [String];
1212 { dependencies = [String];
1213 groups = [String];
1213 groups = [String];
1214− platforms = ∀ α. α;
1214+ platforms = ∀ α. [α];
1215 source = {remotes = [String]; sha256 = String; type = String;};
1215 source = {remotes = [String]; sha256 = String; type = String;};
1216 version = String;
1216 version = String;
1217 };
1217 };
1218 rainbow =
1218 rainbow =
1219 { groups = [String];
1219 { groups = [String];
1220− platforms = ∀ α. α;
1220+ platforms = ∀ α. [α];
1221 source = {remotes = [String]; sha256 = String; type = String;};
1221 source = {remotes = [String]; sha256 = String; type = String;};
1222 version = String;
1222 version = String;
1223 };
1223 };
1224 rake =
1224 rake =
1225 { groups = [String];
1225 { groups = [String];
1226− platforms = ∀ α. α;
1226+ platforms = ∀ α. [α];
1227 source = {remotes = [String]; sha256 = String; type = String;};
1227 source = {remotes = [String]; sha256 = String; type = String;};
1228 version = String;
1228 version = String;
1229 };
1229 };
1230 rb-fsevent =
1230 rb-fsevent =
1231 { groups = [String];
1231 { groups = [String];
1232− platforms = ∀ α. α;
1232+ platforms = ∀ α. [α];
1233 source = {remotes = [String]; sha256 = String; type = String;};
1233 source = {remotes = [String]; sha256 = String; type = String;};
1234 version = String;
1234 version = String;
1235 };
1235 };
1236 rb-inotify =
1236 rb-inotify =
1237 { dependencies = [String];
1237 { dependencies = [String];
1238 groups = [String];
1238 groups = [String];
1239− platforms = ∀ α. α;
1239+ platforms = ∀ α. [α];
1240 source = {remotes = [String]; sha256 = String; type = String;};
1240 source = {remotes = [String]; sha256 = String; type = String;};
1241 version = String;
1241 version = String;
1242 };
1242 };
1243 rb-readline =
1243 rb-readline =
1244 { groups = [String];
1244 { groups = [String];
1245− platforms = ∀ α. α;
1245+ platforms = ∀ α. [α];
1246 source = {remotes = [String]; sha256 = String; type = String;};
1246 source = {remotes = [String]; sha256 = String; type = String;};
1247 version = String;
1247 version = String;
1248 };
1248 };
1249 rbnacl =
1249 rbnacl =
1250 { dependencies = [String];
1250 { dependencies = [String];
1251 groups = [String];
1251 groups = [String];
1252− platforms = ∀ α. α;
1252+ platforms = ∀ α. [α];
1253 source = {remotes = [String]; sha256 = String; type = String;};
1253 source = {remotes = [String]; sha256 = String; type = String;};
1254 version = String;
1254 version = String;
1255 };
1255 };
1256 re2 =
1256 re2 =
1257 { groups = [String];
1257 { groups = [String];
1258− platforms = ∀ α. α;
1258+ platforms = ∀ α. [α];
1259 source = {remotes = [String]; sha256 = String; type = String;};
1259 source = {remotes = [String]; sha256 = String; type = String;};
1260 version = String;
1260 version = String;
1261 };
1261 };
1262 redcarpet =
1262 redcarpet =
1263 { groups = [String];
1263 { groups = [String];
1264− platforms = ∀ α. α;
1264+ platforms = ∀ α. [α];
1265 source = {remotes = [String]; sha256 = String; type = String;};
1265 source = {remotes = [String]; sha256 = String; type = String;};
1266 version = String;
1266 version = String;
1267 };
1267 };
1268 redis =
1268 redis =
1269 { groups = [String];
1269 { groups = [String];
1270− platforms = ∀ α. α;
1270+ platforms = ∀ α. [α];
1271 source = {remotes = [String]; sha256 = String; type = String;};
1271 source = {remotes = [String]; sha256 = String; type = String;};
1272 version = String;
1272 version = String;
1273 };
1273 };
1274 redis-rack =
1274 redis-rack =
1275 { dependencies = [String];
1275 { dependencies = [String];
1276 groups = [String];
1276 groups = [String];
1277− platforms = ∀ α. α;
1277+ platforms = ∀ α. [α];
1278 source = {remotes = [String]; sha256 = String; type = String;};
1278 source = {remotes = [String]; sha256 = String; type = String;};
1279 version = String;
1279 version = String;
1280 };
1280 };
1281 redis-store =
1281 redis-store =
1282 { dependencies = [String];
1282 { dependencies = [String];
1283 groups = [String];
1283 groups = [String];
1284− platforms = ∀ α. α;
1284+ platforms = ∀ α. [α];
1285 source = {remotes = [String]; sha256 = String; type = String;};
1285 source = {remotes = [String]; sha256 = String; type = String;};
1286 version = String;
1286 version = String;
1287 };
1287 };
1288 rest-client =
1288 rest-client =
1289 { dependencies = [String];
1289 { dependencies = [String];
1290 groups = [String];
1290 groups = [String];
1291− platforms = ∀ α. α;
1291+ platforms = ∀ α. [α];
1292 source = {remotes = [String]; sha256 = String; type = String;};
1292 source = {remotes = [String]; sha256 = String; type = String;};
1293 version = String;
1293 version = String;
1294 };
1294 };
1295 rmagick =
1295 rmagick =
1296 { groups = [String];
1296 { groups = [String];
1297− platforms = ∀ α. α;
1297+ platforms = ∀ α. [α];
1298 source = {remotes = [String]; sha256 = String; type = String;};
1298 source = {remotes = [String]; sha256 = String; type = String;};
1299 version = String;
1299 version = String;
1300 };
1300 };
1301 rouge =
1301 rouge =
1302 { groups = [String];
1302 { groups = [String];
1303− platforms = ∀ α. α;
1303+ platforms = ∀ α. [α];
1304 source = {remotes = [String]; sha256 = String; type = String;};
1304 source = {remotes = [String]; sha256 = String; type = String;};
1305 version = String;
1305 version = String;
1306 };
1306 };
1307 rpam2 =
1307 rpam2 =
1308 { groups = [String];
1308 { groups = [String];
1309− platforms = ∀ α. α;
1309+ platforms = ∀ α. [α];
1310 source = {remotes = [String]; sha256 = String; type = String;};
1310 source = {remotes = [String]; sha256 = String; type = String;};
1311 version = String;
1311 version = String;
1312 };
1312 };
1313 rspec =
1313 rspec =
1314 { dependencies = [String];
1314 { dependencies = [String];
1315 groups = [String];
1315 groups = [String];
1316− platforms = ∀ α. α;
1316+ platforms = ∀ α. [α];
1317 source = {remotes = [String]; sha256 = String; type = String;};
1317 source = {remotes = [String]; sha256 = String; type = String;};
1318 version = String;
1318 version = String;
1319 };
1319 };
1320 rspec-core =
1320 rspec-core =
1321 { dependencies = [String];
1321 { dependencies = [String];
1322 groups = [String];
1322 groups = [String];
1323− platforms = ∀ α. α;
1323+ platforms = ∀ α. [α];
1324 source = {remotes = [String]; sha256 = String; type = String;};
1324 source = {remotes = [String]; sha256 = String; type = String;};
1325 version = String;
1325 version = String;
1326 };
1326 };
1327 rspec-expectations =
1327 rspec-expectations =
1328 { dependencies = [String];
1328 { dependencies = [String];
1329 groups = [String];
1329 groups = [String];
1330− platforms = ∀ α. α;
1330+ platforms = ∀ α. [α];
1331 source = {remotes = [String]; sha256 = String; type = String;};
1331 source = {remotes = [String]; sha256 = String; type = String;};
1332 version = String;
1332 version = String;
1333 };
1333 };
1334 rspec-mocks =
1334 rspec-mocks =
1335 { dependencies = [String];
1335 { dependencies = [String];
1336 groups = [String];
1336 groups = [String];
1337− platforms = ∀ α. α;
1337+ platforms = ∀ α. [α];
1338 source = {remotes = [String]; sha256 = String; type = String;};
1338 source = {remotes = [String]; sha256 = String; type = String;};
1339 version = String;
1339 version = String;
1340 };
1340 };
1341 rspec-support =
1341 rspec-support =
1342 { groups = [String];
1342 { groups = [String];
1343− platforms = ∀ α. α;
1343+ platforms = ∀ α. [α];
1344 source = {remotes = [String]; sha256 = String; type = String;};
1344 source = {remotes = [String]; sha256 = String; type = String;};
1345 version = String;
1345 version = String;
1346 };
1346 };
1347 rubocop =
1347 rubocop =
1348 { dependencies = [String];
1348 { dependencies = [String];
1349 groups = [String];
1349 groups = [String];
1350− platforms = ∀ α. α;
1350+ platforms = ∀ α. [α];
1351 source = {remotes = [String]; sha256 = String; type = String;};
1351 source = {remotes = [String]; sha256 = String; type = String;};
1352 version = String;
1352 version = String;
1353 };
1353 };
1354 rubocop-performance =
1354 rubocop-performance =
1355 { dependencies = [String];
1355 { dependencies = [String];
1356 groups = [String];
1356 groups = [String];
1357− platforms = ∀ α. α;
1357+ platforms = ∀ α. [α];
1358 source = {remotes = [String]; sha256 = String; type = String;};
1358 source = {remotes = [String]; sha256 = String; type = String;};
1359 version = String;
1359 version = String;
1360 };
1360 };
1361 ruby-graphviz =
1361 ruby-graphviz =
1362 { groups = [String];
1362 { groups = [String];
1363− platforms = ∀ α. α;
1363+ platforms = ∀ α. [α];
1364 source = {remotes = [String]; sha256 = String; type = String;};
1364 source = {remotes = [String]; sha256 = String; type = String;};
1365 version = String;
1365 version = String;
1366 };
1366 };
1367 ruby-libvirt =
1367 ruby-libvirt =
1368 { groups = [String];
1368 { groups = [String];
1369− platforms = ∀ α. α;
1369+ platforms = ∀ α. [α];
1370 source = {remotes = [String]; sha256 = String; type = String;};
1370 source = {remotes = [String]; sha256 = String; type = String;};
1371 version = String;
1371 version = String;
1372 };
1372 };
1373 ruby-lxc =
1373 ruby-lxc =
1374 { groups = [String];
1374 { groups = [String];
1375− platforms = ∀ α. α;
1375+ platforms = ∀ α. [α];
1376 source = {remotes = [String]; sha256 = String; type = String;};
1376 source = {remotes = [String]; sha256 = String; type = String;};
1377 version = String;
1377 version = String;
1378 };
1378 };
1379 ruby-macho =
1379 ruby-macho =
1380 { groups = [String];
1380 { groups = [String];
1381− platforms = ∀ α. α;
1381+ platforms = ∀ α. [α];
1382 source = {remotes = [String]; sha256 = String; type = String;};
1382 source = {remotes = [String]; sha256 = String; type = String;};
1383 version = String;
1383 version = String;
1384 };
1384 };
1385 ruby-progressbar =
1385 ruby-progressbar =
1386 { groups = [String];
1386 { groups = [String];
1387− platforms = ∀ α. α;
1387+ platforms = ∀ α. [α];
1388 source = {remotes = [String]; sha256 = String; type = String;};
1388 source = {remotes = [String]; sha256 = String; type = String;};
1389 version = String;
1389 version = String;
1390 };
1390 };
1391 ruby-terminfo =
1391 ruby-terminfo =
1392 { groups = [String];
1392 { groups = [String];
1393− platforms = ∀ α. α;
1393+ platforms = ∀ α. [α];
1394 source = {remotes = [String]; sha256 = String; type = String;};
1394 source = {remotes = [String]; sha256 = String; type = String;};
1395 version = String;
1395 version = String;
1396 };
1396 };
1397 ruby-vips =
1397 ruby-vips =
1398 { dependencies = [String];
1398 { dependencies = [String];
1399 groups = [String];
1399 groups = [String];
1400− platforms = ∀ α. α;
1400+ platforms = ∀ α. [α];
1401 source = {remotes = [String]; sha256 = String; type = String;};
1401 source = {remotes = [String]; sha256 = String; type = String;};
1402 version = String;
1402 version = String;
1403 };
1403 };
1404 rubyzip =
1404 rubyzip =
1405 { groups = [String];
1405 { groups = [String];
1406− platforms = ∀ α. α;
1406+ platforms = ∀ α. [α];
1407 source = {remotes = [String]; sha256 = String; type = String;};
1407 source = {remotes = [String]; sha256 = String; type = String;};
1408 version = String;
1408 version = String;
1409 };
1409 };
1410 rugged =
1410 rugged =
1411 { groups = [String];
1411 { groups = [String];
1412− platforms = ∀ α. α;
1412+ platforms = ∀ α. [α];
1413 source = {remotes = [String]; sha256 = String; type = String;};
1413 source = {remotes = [String]; sha256 = String; type = String;};
1414 version = String;
1414 version = String;
1415 };
1415 };
1416 safe_yaml =
1416 safe_yaml =
1417 { groups = [String];
1417 { groups = [String];
1418− platforms = ∀ α. α;
1418+ platforms = ∀ α. [α];
1419 source = {remotes = [String]; sha256 = String; type = String;};
1419 source = {remotes = [String]; sha256 = String; type = String;};
1420 version = String;
1420 version = String;
1421 };
1421 };
1422 sassc =
1422 sassc =
1423 { dependencies = [String];
1423 { dependencies = [String];
1424 groups = [String];
1424 groups = [String];
1425− platforms = ∀ α. α;
1425+ platforms = ∀ α. [α];
1426 source = {remotes = [String]; sha256 = String; type = String;};
1426 source = {remotes = [String]; sha256 = String; type = String;};
1427 version = String;
1427 version = String;
1428 };
1428 };
1429 scrypt =
1429 scrypt =
1430 { dependencies = [String];
1430 { dependencies = [String];
1431 groups = [String];
1431 groups = [String];
1432− platforms = ∀ α. α;
1432+ platforms = ∀ α. [α];
1433 source = {remotes = [String]; sha256 = String; type = String;};
1433 source = {remotes = [String]; sha256 = String; type = String;};
1434 version = String;
1434 version = String;
1435 };
1435 };
1436 semian =
1436 semian =
1437 { groups = [String];
1437 { groups = [String];
1438− platforms = ∀ α. α;
1438+ platforms = ∀ α. [α];
1439 source = {remotes = [String]; sha256 = String; type = String;};
1439 source = {remotes = [String]; sha256 = String; type = String;};
1440 version = String;
1440 version = String;
1441 };
1441 };
1442 sequel =
1442 sequel =
1443 { groups = [String];
1443 { groups = [String];
1444− platforms = ∀ α. α;
1444+ platforms = ∀ α. [α];
1445 source = {remotes = [String]; sha256 = String; type = String;};
1445 source = {remotes = [String]; sha256 = String; type = String;};
1446 version = String;
1446 version = String;
1447 };
1447 };
1448 sequel_pg =
1448 sequel_pg =
1449 { dependencies = [String];
1449 { dependencies = [String];
1450 groups = [String];
1450 groups = [String];
1451− platforms = ∀ α. α;
1451+ platforms = ∀ α. [α];
1452 source = {remotes = [String]; sha256 = String; type = String;};
1452 source = {remotes = [String]; sha256 = String; type = String;};
1453 version = String;
1453 version = String;
1454 };
1454 };
1455 simplecov =
1455 simplecov =
1456 { dependencies = [String];
1456 { dependencies = [String];
1457 groups = [String];
1457 groups = [String];
1458− platforms = ∀ α. α;
1458+ platforms = ∀ α. [α];
1459 source = {remotes = [String]; sha256 = String; type = String;};
1459 source = {remotes = [String]; sha256 = String; type = String;};
1460 version = String;
1460 version = String;
1461 };
1461 };
1462 simplecov-html =
1462 simplecov-html =
1463 { groups = [String];
1463 { groups = [String];
1464− platforms = ∀ α. α;
1464+ platforms = ∀ α. [α];
1465 source = {remotes = [String]; sha256 = String; type = String;};
1465 source = {remotes = [String]; sha256 = String; type = String;};
1466 version = String;
1466 version = String;
1467 };
1467 };
1468 sinatra =
1468 sinatra =
1469 { dependencies = [String];
1469 { dependencies = [String];
1470 groups = [String];
1470 groups = [String];
1471− platforms = ∀ α. α;
1471+ platforms = ∀ α. [α];
1472 source = {remotes = [String]; sha256 = String; type = String;};
1472 source = {remotes = [String]; sha256 = String; type = String;};
1473 version = String;
1473 version = String;
1474 };
1474 };
1475 slather =
1475 slather =
1476 { dependencies = [String];
1476 { dependencies = [String];
1477 groups = [String];
1477 groups = [String];
1478− platforms = ∀ α. α;
1478+ platforms = ∀ α. [α];
1479 source = {remotes = [String]; sha256 = String; type = String;};
1479 source = {remotes = [String]; sha256 = String; type = String;};
1480 version = String;
1480 version = String;
1481 };
1481 };
1482 slop =
1482 slop =
1483 { groups = [String];
1483 { groups = [String];
1484− platforms = ∀ α. α;
1484+ platforms = ∀ α. [α];
1485 source = {remotes = [String]; sha256 = String; type = String;};
1485 source = {remotes = [String]; sha256 = String; type = String;};
1486 version = String;
1486 version = String;
1487 };
1487 };
1488 snappy =
1488 snappy =
1489 { groups = [String];
1489 { groups = [String];
1490− platforms = ∀ α. α;
1490+ platforms = ∀ α. [α];
1491 source = {remotes = [String]; sha256 = String; type = String;};
1491 source = {remotes = [String]; sha256 = String; type = String;};
1492 version = String;
1492 version = String;
1493 };
1493 };
1494 sprockets =
1494 sprockets =
1495 { dependencies = [String];
1495 { dependencies = [String];
1496 groups = [String];
1496 groups = [String];
1497− platforms = ∀ α. α;
1497+ platforms = ∀ α. [α];
1498 source = {remotes = [String]; sha256 = String; type = String;};
1498 source = {remotes = [String]; sha256 = String; type = String;};
1499 version = String;
1499 version = String;
1500 };
1500 };
1501 sprockets-rails =
1501 sprockets-rails =
1502 { dependencies = [String];
1502 { dependencies = [String];
1503 groups = [String];
1503 groups = [String];
1504− platforms = ∀ α. α;
1504+ platforms = ∀ α. [α];
1505 source = {remotes = [String]; sha256 = String; type = String;};
1505 source = {remotes = [String]; sha256 = String; type = String;};
1506 version = String;
1506 version = String;
1507 };
1507 };
1508 sqlite3 =
1508 sqlite3 =
1509 { groups = [String];
1509 { groups = [String];
1510− platforms = ∀ α. α;
1510+ platforms = ∀ α. [α];
1511 source = {remotes = [String]; sha256 = String; type = String;};
1511 source = {remotes = [String]; sha256 = String; type = String;};
1512 version = String;
1512 version = String;
1513 };
1513 };
1514 taglib-ruby =
1514 taglib-ruby =
1515 { groups = [String];
1515 { groups = [String];
1516− platforms = ∀ α. α;
1516+ platforms = ∀ α. [α];
1517 source = {remotes = [String]; sha256 = String; type = String;};
1517 source = {remotes = [String]; sha256 = String; type = String;};
1518 version = String;
1518 version = String;
1519 };
1519 };
1520 terminal-table =
1520 terminal-table =
1521 { dependencies = [String];
1521 { dependencies = [String];
1522 groups = [String];
1522 groups = [String];
1523− platforms = ∀ α. α;
1523+ platforms = ∀ α. [α];
1524 source = {remotes = [String]; sha256 = String; type = String;};
1524 source = {remotes = [String]; sha256 = String; type = String;};
1525 version = String;
1525 version = String;
1526 };
1526 };
1527 thor =
1527 thor =
1528 { groups = [String];
1528 { groups = [String];
1529− platforms = ∀ α. α;
1529+ platforms = ∀ α. [α];
1530 source = {remotes = [String]; sha256 = String; type = String;};
1530 source = {remotes = [String]; sha256 = String; type = String;};
1531 version = String;
1531 version = String;
1532 };
1532 };
1533 thread_safe =
1533 thread_safe =
1534 { groups = [String];
1534 { groups = [String];
1535− platforms = ∀ α. α;
1535+ platforms = ∀ α. [α];
1536 source = {remotes = [String]; sha256 = String; type = String;};
1536 source = {remotes = [String]; sha256 = String; type = String;};
1537 version = String;
1537 version = String;
1538 };
1538 };
1539 thrift =
1539 thrift =
1540 { groups = [String];
1540 { groups = [String];
1541− platforms = ∀ α. α;
1541+ platforms = ∀ α. [α];
1542 source = {remotes = [String]; sha256 = String; type = String;};
1542 source = {remotes = [String]; sha256 = String; type = String;};
1543 version = String;
1543 version = String;
1544 };
1544 };
1545 tilt =
1545 tilt =
1546 { groups = [String];
1546 { groups = [String];
1547− platforms = ∀ α. α;
1547+ platforms = ∀ α. [α];
1548 source = {remotes = [String]; sha256 = String; type = String;};
1548 source = {remotes = [String]; sha256 = String; type = String;};
1549 version = String;
1549 version = String;
1550 };
1550 };
1551 tiny_tds =
1551 tiny_tds =
1552 { groups = [String];
1552 { groups = [String];
1553− platforms = ∀ α. α;
1553+ platforms = ∀ α. [α];
1554 source = {remotes = [String]; sha256 = String; type = String;};
1554 source = {remotes = [String]; sha256 = String; type = String;};
1555 version = String;
1555 version = String;
1556 };
1556 };
1557 treetop =
1557 treetop =
1558 { dependencies = [String];
1558 { dependencies = [String];
1559 groups = [String];
1559 groups = [String];
1560− platforms = ∀ α. α;
1560+ platforms = ∀ α. [α];
1561 source = {remotes = [String]; sha256 = String; type = String;};
1561 source = {remotes = [String]; sha256 = String; type = String;};
1562 version = String;
1562 version = String;
1563 };
1563 };
1564 typhoeus =
1564 typhoeus =
1565 { dependencies = [String];
1565 { dependencies = [String];
1566 groups = [String];
1566 groups = [String];
1567− platforms = ∀ α. α;
1567+ platforms = ∀ α. [α];
1568 source = {remotes = [String]; sha256 = String; type = String;};
1568 source = {remotes = [String]; sha256 = String; type = String;};
1569 version = String;
1569 version = String;
1570 };
1570 };
1571 tzinfo =
1571 tzinfo =
1572 { dependencies = [String];
1572 { dependencies = [String];
1573 groups = [String];
1573 groups = [String];
1574− platforms = ∀ α. α;
1574+ platforms = ∀ α. [α];
1575 source = {remotes = [String]; sha256 = String; type = String;};
1575 source = {remotes = [String]; sha256 = String; type = String;};
1576 version = String;
1576 version = String;
1577 };
1577 };
1578 unf =
1578 unf =
1579 { dependencies = [String];
1579 { dependencies = [String];
1580 groups = [String];
1580 groups = [String];
1581− platforms = ∀ α. α;
1581+ platforms = ∀ α. [α];
1582 source = {remotes = [String]; sha256 = String; type = String;};
1582 source = {remotes = [String]; sha256 = String; type = String;};
1583 version = String;
1583 version = String;
1584 };
1584 };
1585 unf_ext =
1585 unf_ext =
1586 { groups = [String];
1586 { groups = [String];
1587− platforms = ∀ α. α;
1587+ platforms = ∀ α. [α];
1588 source = {remotes = [String]; sha256 = String; type = String;};
1588 source = {remotes = [String]; sha256 = String; type = String;};
1589 version = String;
1589 version = String;
1590 };
1590 };
1591 unicode-display_width =
1591 unicode-display_width =
1592 { groups = [String];
1592 { groups = [String];
1593− platforms = ∀ α. α;
1593+ platforms = ∀ α. [α];
1594 source = {remotes = [String]; sha256 = String; type = String;};
1594 source = {remotes = [String]; sha256 = String; type = String;};
1595 version = String;
1595 version = String;
1596 };
1596 };
1597 uuid4r =
1597 uuid4r =
1598 { groups = [String];
1598 { groups = [String];
1599− platforms = ∀ α. α;
1599+ platforms = ∀ α. [α];
1600 source = {remotes = [String]; sha256 = String; type = String;};
1600 source = {remotes = [String]; sha256 = String; type = String;};
1601 version = String;
1601 version = String;
1602 };
1602 };
1603 whois =
1603 whois =
1604 { groups = [String];
1604 { groups = [String];
1605− platforms = ∀ α. α;
1605+ platforms = ∀ α. [α];
1606 source = {remotes = [String]; sha256 = String; type = String;};
1606 source = {remotes = [String]; sha256 = String; type = String;};
1607 version = String;
1607 version = String;
1608 };
1608 };
1609 xcodeproj =
1609 xcodeproj =
1610 { dependencies = [String];
1610 { dependencies = [String];
1611 groups = [String];
1611 groups = [String];
1612− platforms = ∀ α. α;
1612+ platforms = ∀ α. [α];
1613 source = {remotes = [String]; sha256 = String; type = String;};
1613 source = {remotes = [String]; sha256 = String; type = String;};
1614 version = String;
1614 version = String;
1615 };
1615 };
1616 xctasks =
1616 xctasks =
1617 { dependencies = [String];
1617 { dependencies = [String];
1618 groups = [String];
1618 groups = [String];
1619− platforms = ∀ α. α;
1619+ platforms = ∀ α. [α];
1620 source = {remotes = [String]; sha256 = String; type = String;};
1620 source = {remotes = [String]; sha256 = String; type = String;};
1621 version = String;
1621 version = String;
1622 };
1622 };
1623 yard =
1623 yard =
1624 { groups = [String];
1624 { groups = [String];
1625− platforms = ∀ α. α;
1625+ platforms = ∀ α. [α];
1626 source = {remotes = [String]; sha256 = String; type = String;};
1626 source = {remotes = [String]; sha256 = String; type = String;};
1627 version = String;
1627 version = String;
1628 };
1628 };
1629 zookeeper =
1629 zookeeper =
1630 { groups = [String];
1630 { groups = [String];
1631− platforms = ∀ α. α;
1631+ platforms = ∀ α. [α];
1632 source = {remotes = [String]; sha256 = String; type = String;};
1632 source = {remotes = [String]; sha256 = String; type = String;};
1633 version = String;
1633 version = String;
1634 };
1634 };
test/golden/importless/rxe.txt+1−1
@@ -26,7 +26,7 @@
26 } ->
26 } ->
27 ν,
27 ν,
28 δ.mkOption =
28 δ.mkOption =
29− {default = ∀ α. α; description = String; example = [String]; type = ξ;} ->
29+ {default = ∀ α. [α]; description = String; example = [String]; type = ξ;} ->
30 ο,
30 ο,
31 δ.types = π,
31 δ.types = π,
32 ζ.rxe = ρ,
32 ζ.rxe = ρ,
test/golden/importless/s-sysdeps.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/s-xml.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/sage-env.txt+1−1
@@ -1,5 +1,5 @@
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1.
1∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1.
2−( (α) // ({lib = β;}) ~ (γ),
2+( α // {lib = β;} ~ γ,
3 δ.cc = String,
3 δ.cc = String,
4 ε.makeBinPath = [String] -> ζ,
4 ε.makeBinPath = [String] -> ζ,
5 η.bintools = String,
5 η.bintools = String,
test/golden/importless/salza2.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/schema.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ.
1∀ β γ.
2−((β) // ({meta = {hydraPlatforms = ∀ α. α;};}) ~ (γ)) => { fetchFromGitHub =
2+(β // {meta = {hydraPlatforms = ∀ α. [α];};} ~ γ) => { fetchFromGitHub =
3 { name = String;
3 { name = String;
4 owner = String;
4 owner = String;
5 repo = String;
5 repo = String;
test/golden/importless/scripts.txt+1−1
@@ -5,7 +5,7 @@
5 { description = String;
5 { description = String;
6 homepage = String;
6 homepage = String;
7 license = δ;
7 license = δ;
8− maintainers = ∀ α. α;
8+ maintainers = ∀ α. [α];
9 platforms = ε;
9 platforms = ε;
10 };
10 };
11 nativeBuildInputs = [ζ];
11 nativeBuildInputs = [ζ];
test/golden/importless/sdk-pkgs.txt+10−13
@@ -1,17 +1,14 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2−( ( β
2+( β //
3− ) //
4− ( { sdk =
3+ { sdk =
5− { name = String;
4+ { name = String;
6− outPath = String;
5+ outPath = String;
7− platform = γ;
6+ platform = γ;
8− type = String;
7+ type = String;
9− version = δ;
8+ version = δ;
10− };
9+ };
11− }
12− ) ~
10+ } ~
13− ( ε
11+ ε,
14− ),
15 ζ.sdkVer = δ,
12 ζ.sdkVer = δ,
16 ζ.xcodePlatform = γ,
13 ζ.xcodePlatform = γ,
17 η.lib = θ,
14 η.lib = θ,
test/golden/importless/shadow.txt+8−11
@@ -1,15 +1,12 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1.
2−( ( { newgidmap = {source = String;};
2+( { newgidmap = {source = String;};
3− newgrp = {source = String;};
3+ newgrp = {source = String;};
4− newuidmap = {source = String;};
4+ newuidmap = {source = String;};
5− sg = {source = String;};
5+ sg = {source = String;};
6− su = {source = String;};
6+ su = {source = String;};
7− }
8− ) //
7+ } //
9− ( β
8+ β ~
10− ) ~
11− ( γ
9+ γ,
12− ),
13 δ.config = ε,
10 δ.config = ε,
14 δ.lib = ζ,
11 δ.lib = ζ,
15 δ.pkgs = η,
12 δ.pkgs = η,
test/golden/importless/share.txt+1−1
@@ -8,7 +8,7 @@
8 { description = String;
8 { description = String;
9 homepage = String;
9 homepage = String;
10 license = ε;
10 license = ε;
11− maintainers = ∀ α. α;
11+ maintainers = ∀ α. [α];
12 };
12 };
13 pname = String;
13 pname = String;
14 sources10Zip = ζ;
14 sources10Zip = ζ;
test/golden/importless/shiboken.txt+1−1
@@ -14,7 +14,7 @@
14 description = String;
14 description = String;
15 homepage = String;
15 homepage = String;
16 license = ε;
16 license = ε;
17− maintainers = ∀ α. α;
17+ maintainers = ∀ α. [α];
18 platforms = ζ;
18 platforms = ζ;
19 };
19 };
20 nativeBuildInputs = [θ];
20 nativeBuildInputs = [θ];
test/golden/importless/skeinrepo.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ λ μ.
1∀ β γ δ ε ζ η θ ι κ λ μ.
2−( (β) // (γ) ~ (δ),
2+( β // γ ~ δ,
3 ε.optional = ζ -> η -> [θ],
3 ε.optional = ζ -> η -> [θ],
4 ε.optionalAttrs = ι -> {dontAutoPatchelf = Bool;} -> γ,
4 ε.optionalAttrs = ι -> {dontAutoPatchelf = Bool;} -> γ,
5 κ.isLinux = Bool,
5 κ.isLinux = Bool,
test/golden/importless/socket.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι.
1∀ β γ δ ε ζ η θ ι.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.src = ε,
4 δ.src = ε,
5 δ.useDune2 = ζ,
5 δ.useDune2 = ζ,
test/golden/importless/sockets.txt+1−1
@@ -3,7 +3,7 @@
3 β.mkDerivation =
3 β.mkDerivation =
4 { buildInputs = [δ];
4 { buildInputs = [δ];
5 luaver = ε;
5 luaver = ε;
6− meta = {homepage = String; hydraPlatforms = ζ; maintainers = ∀ α. α;};
6+ meta = {homepage = String; hydraPlatforms = ζ; maintainers = ∀ α. [α];};
7 patchPhase = String;
7 patchPhase = String;
8 pname = String;
8 pname = String;
9 src = η;
9 src = η;
test/golden/importless/softmaker_office.txt+9−12
@@ -1,16 +1,13 @@
1∀ α β γ δ.
1∀ α β γ δ.
2−( ( α
2+( α //
3− ) //
4− ( { archive = String;
3+ { archive = String;
5− edition = String;
4+ edition = String;
6− pname = String;
5+ pname = String;
7− src = β;
6+ src = β;
8− suiteName = String;
7+ suiteName = String;
9− version = String;
8+ version = String;
10− }
9+ } ~
11− ) ~
12− ( γ
10+ γ,
13− ),
14 α.?officeVersion = {edition = String; sha256 = String; version = String;},
11 α.?officeVersion = {edition = String; sha256 = String; version = String;},
15 α.callPackage = String -> γ -> δ,
12 α.callPackage = String -> γ -> δ,
16 α.fetchurl = {sha256 = String; url = String;} -> β
13 α.fetchurl = {sha256 = String; url = String;} -> β
test/golden/importless/solid.txtnew file+20
@@ -0,0 +1,20 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { bison = ζ;
3+ extra-cmake-modules = ζ;
4+ flex = ζ;
5+ lib = α;
6+ media-player-info = ζ;
7+ mkDerivation =
8+ { buildInputs = [η];
9+ meta = {broken = Bool; maintainers = [ε];};
10+ name = String;
11+ nativeBuildInputs = [ζ];
12+ propagatedBuildInputs = [γ];
13+ propagatedUserEnvPkgs = [ζ];
14+ } ->
15+ θ;
16+ qtbase = γ;
17+ qtdeclarative = η;
18+ qttools = η;
19+} ->
20+θ
test/golden/importless/sonnet.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ hunspell = η;
4+ lib = α;
5+ mkDerivation =
6+ { buildInputs = [η];
7+ meta = {broken = Bool; maintainers = [ε];};
8+ name = String;
9+ nativeBuildInputs = [ζ];
10+ propagatedBuildInputs = [γ];
11+ } ->
12+ θ;
13+ qtbase = γ;
14+ qttools = η;
15+} ->
16+θ
test/golden/importless/spotify.txt+2−2
@@ -5,9 +5,9 @@
5 meta =
5 meta =
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8− hydraPlatforms = ∀ α. α;
8+ hydraPlatforms = ∀ α. [α];
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 };
11 };
12 pname = String;
12 pname = String;
13 propagatedBuildInputs = [ζ];
13 propagatedBuildInputs = [ζ];
test/golden/importless/squeezelite.txt+12−14
@@ -1,12 +1,11 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2( α.config = β,
2( α.config = β,
3 α.lib = γ,
3 α.lib = γ,
4 α.pkgs = δ,
4 α.pkgs = δ,
5 β.services = ε,
5 β.services = ε,
6− γ.builtins = ζ,
7− γ.mkEnableOption = String -> η,
6+ γ.mkEnableOption = String -> ζ,
8 γ.mkIf =
7 γ.mkIf =
9− θ ->
8+ η ->
10 { systemd =
9 { systemd =
11 { services =
10 { services =
12 { squeezelite =
11 { squeezelite =
@@ -15,7 +14,7 @@
15 serviceConfig =
14 serviceConfig =
16 { DynamicUser = Bool;
15 { DynamicUser = Bool;
17 ExecStart = String;
16 ExecStart = String;
18− StateDirectory = ι;
17+ StateDirectory = String;
19 SupplementaryGroups = String;
18 SupplementaryGroups = String;
20 };
19 };
21 wantedBy = [String];
20 wantedBy = [String];
@@ -23,15 +22,14 @@
23 };
22 };
24 };
23 };
25 } ->
24 } ->
26− κ,
25+ θ,
27− γ.mkOption = {default = String; description = String; type = λ;} -> μ,
26+ γ.mkOption = {default = String; description = String; type = ι;} -> κ,
28− γ.types = ν,
27+ γ.types = λ,
29− ε.squeezelite = ξ,
28+ ε.squeezelite = μ,
30− ξ.enable = θ,
29+ μ.enable = η,
31− ζ.baseNameOf = String -> ι,
32− ν.str = λ
30+ λ.str = ι
33) =>
31) =>
34α ->
32α ->
35−{ config = κ;
33+{ config = θ;
36− options = {services = {squeezelite = {enable = η; extraArguments = μ;};};};
34+ options = {services = {squeezelite = {enable = ζ; extraArguments = κ;};};};
37}
35}
test/golden/importless/staging.txt+2−2
@@ -1,6 +1,6 @@
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
1∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2−( (β) // ({meta = ∀ α. α;}) ~ (γ),
2+( β // {meta = ∀ α. α;} ~ γ,
3− (δ) // ({description = String;}) ~ (ε),
3+ δ // {description = String;} ~ ε,
4 ζ.?postPatch = String,
4 ζ.?postPatch = String,
5 η.lib = θ,
5 η.lib = θ,
6 ι.meta = δ,
6 ι.meta = δ,
test/golden/importless/status.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 name = String;
13 name = String;
test/golden/importless/string-case.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/swank.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/syntax-highlighting.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { buildInputs = [η];
6+ meta = {broken = Bool; maintainers = [ε];};
7+ name = String;
8+ nativeBuildInputs = [ζ];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ θ;
12+ perl = ζ;
13+ qtbase = γ;
14+ qttools = η;
15+} ->
16+θ
test/golden/importless/terminal-server.txt+1−1
@@ -20,7 +20,7 @@
20 { xserver =
20 { xserver =
21 { displayManager = {gdm = {enable = Bool;};};
21 { displayManager = {gdm = {enable = Bool;};};
22 enable = Bool;
22 enable = Bool;
23− videoDrivers = ∀ α. α;
23+ videoDrivers = ∀ α. [α];
24 };
24 };
25 };
25 };
26 systemd =
26 systemd =
test/golden/importless/test.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η.
1∀ β γ δ ε ζ η.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.meta = β,
3 δ.meta = β,
4 δ.src = ε,
4 δ.src = ε,
5 δ.version = ζ
5 δ.version = ζ
test/golden/importless/threadweaver.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ α β γ δ ε ζ η.
2+(α.maintainers = β, γ.version = δ, β.ttuegel = ε) => { extra-cmake-modules = ζ;
3+ lib = α;
4+ mkDerivation =
5+ { meta = {broken = Bool; maintainers = [ε];};
6+ name = String;
7+ nativeBuildInputs = [ζ];
8+ outputs = [String];
9+ propagatedBuildInputs = [γ];
10+ } ->
11+ η;
12+ qtbase = γ;
13+} ->
14+η
test/golden/importless/tool.txt+1−1
@@ -6,7 +6,7 @@
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9− maintainers = ∀ α. α;
9+ maintainers = ∀ α. [α];
10 platforms = ζ;
10 platforms = ζ;
11 };
11 };
12 nativeBuildInputs = [η];
12 nativeBuildInputs = [η];
test/golden/importless/trivial-backtrace.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-cltl2.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-features.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-gray-streams.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-indent.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-macroexpand-all.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-mimes.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-types.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/trivial-utf-8.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/uffi.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/uiop.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/unit-test.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/unix-odbc-drivers.txt+2−2
@@ -6,9 +6,9 @@
6 δ.literalExample = String -> ι,
6 δ.literalExample = String -> ι,
7 δ.mkIf = Bool -> {environment = {etc = {odbcinst.ini = {text = θ;};};};} -> κ,
7 δ.mkIf = Bool -> {environment = {etc = {odbcinst.ini = {text = θ;};};};} -> κ,
8 δ.mkOption =
8 δ.mkOption =
9− {default = ∀ α. α; description = String; example = ι; type = λ;} -> μ,
9+ {default = ∀ α. [α]; description = String; example = ι; type = λ;} -> μ,
10 δ.types = ν,
10 δ.types = ν,
11− ε.unixODBCDrivers = ξ,
11+ ε.unixODBCDrivers = [ξ],
12 ο.unixODBCDrivers = η,
12 ο.unixODBCDrivers = η,
13 ν.listOf = π -> λ,
13 ν.listOf = π -> λ,
14 ρ.package = π
14 ρ.package = π
test/golden/importless/unix-opts.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/unix.txt+1−1
@@ -1,5 +1,5 @@
1∀ β γ δ ε ζ η θ ι κ.
1∀ β γ δ ε ζ η θ ι κ.
2−( (β) // ({description = String;}) ~ (γ),
2+( β // {description = String;} ~ γ,
3 δ.optional = Bool -> ε -> ζ,
3 δ.optional = Bool -> ε -> ζ,
4 η.meta = β,
4 η.meta = β,
5 η.src = θ,
5 η.src = θ,
test/golden/importless/updateSettings.txtnew file+12
@@ -0,0 +1,12 @@
1+∀ α β γ δ ε.
2+(α.optionalString = Bool -> String -> β) => { jq = γ;
3+ lib = α;
4+ writeShellScriptBin = String -> δ -> ε;
5+} ->
6+{ createIfDoesNotExists = Bool;
7+ settings = {};
8+ symlinkFromUserSetting = Bool;
9+ userSettingsFolder = String;
10+ vscodeSettingsFile = String;
11+} ->
12+ε
test/golden/importless/utils.txt+4−4
@@ -7,15 +7,15 @@
7 δ.attrNames = λ -> μ,
7 δ.attrNames = λ -> μ,
8 δ.concatStringsSep = String -> ν -> String,
8 δ.concatStringsSep = String -> ν -> String,
9 δ.elem = ζ -> [String] -> Bool,
9 δ.elem = ζ -> [String] -> Bool,
10− δ.flatten = ξ -> ο,
10+ δ.flatten = [ξ] -> ο,
11 δ.hasPrefix = String -> κ -> Bool,
11 δ.hasPrefix = String -> κ -> Bool,
12− δ.imap0 = (π -> λ -> ξ) -> λ -> ξ,
12+ δ.imap0 = (π -> λ -> [ξ]) -> λ -> [ξ],
13 δ.imap1 = (ρ -> σ -> String) -> τ -> ν,
13 δ.imap1 = (ρ -> σ -> String) -> τ -> ν,
14 δ.isAttrs = λ -> Bool,
14 δ.isAttrs = λ -> Bool,
15 δ.isList = λ -> Bool,
15 δ.isList = λ -> Bool,
16 δ.listToAttrs = ο -> υ,
16 δ.listToAttrs = ο -> υ,
17− δ.map = (String -> ξ) -> μ -> ξ,
17+ δ.map = (String -> [ξ]) -> μ -> [ξ],
18− δ.nameValuePair = String -> φ -> ξ,
18+ δ.nameValuePair = String -> φ -> [ξ],
19 δ.removePrefix = String -> χ -> ψ,
19 δ.removePrefix = String -> χ -> ψ,
20 δ.replaceChars = [String] -> [String] -> ψ -> ω,
20 δ.replaceChars = [String] -> [String] -> ψ -> ω,
21 δ.throw = String -> String,
21 δ.throw = String -> String,
test/golden/importless/vom.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/wakeonlan.txt+1−1
@@ -7,7 +7,7 @@
7 δ.map =
7 δ.map =
8 ({interface = κ; method = String; password = String;} -> String) -> λ -> θ,
8 ({interface = κ; method = String; password = String;} -> String) -> λ -> θ,
9 δ.mkOption =
9 δ.mkOption =
10− { default = ∀ α. α;
10+ { default = ∀ α. [α];
11 description = String;
11 description = String;
12 example = [{interface = String; method = String; password = String;}];
12 example = [{interface = String; method = String; password = String;}];
13 } ->
13 } ->
test/golden/importless/with-extensions.txt+2−2
@@ -5,7 +5,7 @@
5 β.meta = η,
5 β.meta = η,
6 β.name = δ
6 β.name = δ
7) =>
7) =>
8−{ buildEnv = {name = String; paths = θ;} -> ι;
8+{ buildEnv = {name = String; paths = [θ];} -> ι;
9 lib = α;
9 lib = α;
10 makeWrapper = β;
10 makeWrapper = β;
11 runCommand =
11 runCommand =
@@ -13,6 +13,6 @@
13 {buildInputs = [β]; dontPatchELF = Bool; dontStrip = Bool; meta = η;} ->
13 {buildInputs = [β]; dontPatchELF = Bool; dontStrip = Bool; meta = η;} ->
14 String -> κ;
14 String -> κ;
15 vscode = β;
15 vscode = β;
16− vscodeExtensions = θ;
16+ vscodeExtensions = [θ];
17} ->
17} ->
18κ
18κ
test/golden/importless/x32edit.txt+8−11
@@ -1,15 +1,12 @@
1∀ α β γ.
1∀ α β γ.
2−( ( α
2+( α //
3− ) //
4− ( { brand = String;
3+ { brand = String;
5− homepage = String;
4+ homepage = String;
6− sha256 = String;
5+ sha256 = String;
7− type = String;
6+ type = String;
8− version = String;
7+ version = String;
9− }
8+ } ~
10− ) ~
11− ( β
9+ β,
12− ),
13 α.callPackage = String -> β -> γ
10 α.callPackage = String -> β -> γ
14) =>
11) =>
15α -> γ
12α -> γ
test/golden/importless/xfce4-mailwatch-plugin.txt+1−1
@@ -6,7 +6,7 @@
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9− maintainers = ∀ α. α;
9+ maintainers = ∀ α. [α];
10 platforms = ζ;
10 platforms = ζ;
11 };
11 };
12 nativeBuildInputs = [η];
12 nativeBuildInputs = [η];
test/golden/importless/xfce4-mpc-plugin.txt+1−1
@@ -6,7 +6,7 @@
6 { description = String;
6 { description = String;
7 homepage = String;
7 homepage = String;
8 license = ε;
8 license = ε;
9− maintainers = ∀ α. α;
9+ maintainers = ∀ α. [α];
10 platforms = ζ;
10 platforms = ζ;
11 };
11 };
12 nativeBuildInputs = [η];
12 nativeBuildInputs = [η];
test/golden/importless/xfce4-timer-plugin.txt+1−1
@@ -7,7 +7,7 @@
7 { description = String;
7 { description = String;
8 homepage = String;
8 homepage = String;
9 license = ε;
9 license = ε;
10− maintainers = ∀ α. α;
10+ maintainers = ∀ α. [α];
11 platforms = ζ;
11 platforms = ζ;
12 };
12 };
13 nativeBuildInputs = [η];
13 nativeBuildInputs = [η];
test/golden/importless/xmpp-alerts.txtdeleted−54
@@ -1,54 +0,0 @@
1−∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2−( α.config = β,
3− α.lib = γ,
4− α.pkgs = δ,
5− β.services = ε,
6− γ.builtins = ζ,
7− γ.cfg = η,
8− γ.mkEnableOption = String -> θ,
9− γ.mkIf =
10− ι ->
11− { systemd =
12− { services =
13− { prometheus-xmpp-alerts =
14− { after = [String];
15− serviceConfig =
16− { DynamicUser = Bool;
17− ExecStart = String;
18− NoNewPrivileges = Bool;
19− PrivateDevices = Bool;
20− PrivateTmp = Bool;
21− ProtectControlGroups = Bool;
22− ProtectHome = Bool;
23− ProtectKernelModules = Bool;
24− ProtectKernelTunables = Bool;
25− ProtectSystem = String;
26− Restart = String;
27− RestrictAddressFamilies = [String];
28− SystemCallArchitectures = String;
29− SystemCallFilter = [String];
30− };
31− wantedBy = [String];
32− wants = [String];
33− };
34− };
35− };
36− } ->
37− κ,
38− γ.mkOption = {description = String; type = λ;} -> μ,
39− γ.types = ν,
40− δ.writeText = String -> ξ -> ο,
41− ζ.toJSON = π -> ξ,
42− η.configuration = π,
43− ε.prometheus = ρ,
44− ρ.xmpp-alerts = σ,
45− σ.enable = ι,
46− ν.attrs = λ
47−) =>
48−α ->
49−{ config = κ;
50− options =
51− { services =
52− {prometheus = {xmpp-alerts = {configuration = μ; enable = θ;};};};
53− };
54−}
test/golden/importless/xsubseq.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/yacc.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/importless/zpb-ttf.txt+1−1
@@ -2,7 +2,7 @@
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
2(β.fetchurl = {sha256 = String; url = String;} -> γ) => β ->
3{ asdFilesToKeep = [String];
3{ asdFilesToKeep = [String];
4 baseName = String;
4 baseName = String;
5− deps = ∀ α. α;
5+ deps = ∀ α. [α];
6 description = String;
6 description = String;
7 overrides = ∀ α. α -> α;
7 overrides = ∀ α. α -> α;
8 packageName = String;
8 packageName = String;
test/golden/mine/inftype.txt+1−1
@@ -1 +1 @@
1−∀ α β γ. ((α) // ({a = Number;}) ~ (β), α.f = β -> γ) => α -> γ
1+∀ α β γ. (α // {a = Number;} ~ β, α.f = β -> γ) => α -> γ
test/golden/mine/row.nixdeleted−5
@@ -1,5 +0,0 @@
1−let
2− f = x: x.y + 1;
3− g = x: x.y;
4−in
5−(g { y = { n = "1"; }; }).n + 1
test/golden/mine/unionfs.nixdeleted−21
@@ -1,21 +0,0 @@
1−{ config, pkgs, lib, ... }:
2−
3−{
4− config = lib.mkMerge [
5−
6− (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
7− boot.initrd.kernelModules = [ "fuse" ];
8−
9− boot.initrd.extraUtilsCommands = "a";
10−
11− boot.initrd.postDeviceCommands = "b";
12− }
13− )
14−
15− (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
16− system.fsPackages = [ pkgs.unionfs-fuse ];
17− }
18− )
19−
20− ];
21−}