Skip to content

Instantly share code, notes, and snippets.

@TikhonJelvis
Created August 30, 2021 00:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TikhonJelvis/4aeb23d47f68c29da35d761ead429b05 to your computer and use it in GitHub Desktop.
Save TikhonJelvis/4aeb23d47f68c29da35d761ead429b05 to your computer and use it in GitHub Desktop.
A nowhere-near complete or correct JSON Schema for Cabal package descriptions
{
"title": "Cabal file",
"type": "object",
"properties": {
"license-files": {
"description": "One or more files containing the precise copyright license for the package.",
"items": {
"type": "string"
},
"type": "array"
},
"license-file": {
"description": "The file containing the precise copyright license for the package. Also see “license-files”.",
"type": "string"
},
"name": {
"description": "The name of the package.",
"$ref": "#/$defs/name"
},
"version": {
"type": "string",
"minLength": 1,
"default": "0.1.0.0",
"description": "The version of the package, ideally following the PVP."
},
"cabal-version": {
"type": "string",
"pattern": "^\\d+\\.\\d+(\\.\\d+)?$",
"description": "The version of Cabal needed to interpret this package description.",
"default": [
"3.4"
]
},
"build-type": {
"oneOf": [
{
"description": "Calls Distribution.Simple.defaultMain",
"const": "Simple"
},
{
"description": "Calls Distribution.Simple.defaultMainWithHooks, which invokes configure...",
"const": "Configure"
},
{
"description": "Calls Distribution.Make.defaultMain",
"const": "Make"
},
{
"description": "uses user-supplied Setup.hs or Setup.lhs",
"const": "Custom"
}
],
"default": "Simple",
"description": "The type of build used by this package. If the build-type is anything except Custom, Setup.hs must be a standard form."
},
"license": {
"type": "string",
"description": "SPDX license expression for the package.",
"enum": [
"Intel-ACPI",
"XSkat",
"CC-BY-NC-SA-2.0",
"bzip2-1.0.6",
"Giftware",
"Plexus",
"BitTorrent-1.0",
"APSL-1.1",
"UPL-1.0",
"Caldera",
"Zend-2.0",
"CUA-OPL-1.0",
"W3C",
"JPNIC",
"SAX-PD",
"CC-BY-ND-2.5",
"LGPLLR",
"eGenix",
"OLDAP-2.2.2",
"IPA",
"CC-BY-ND-3.0-DE",
"NCSA",
"PHP-3.01",
"CC-PDDC",
"Net-SNMP",
"YPL-1.0",
"Adobe-2006",
"MITNFA",
"BSD-Source-Code",
"CC-BY-SA-2.5",
"OPUBL-1.0",
"OSL-1.1",
"CC-BY-SA-4.0",
"Unicode-TOU",
"NGPL",
"BSD-3-Clause-No-Nuclear-License",
"Motosoto",
"CC-BY-NC-SA-2.0-UK",
"gnuplot",
"Eurosym",
"CC-BY-2.5-AU",
"EPICS",
"Info-ZIP",
"OLDAP-2.0",
"BSD-3-Clause-No-Nuclear-Warranty",
"CERN-OHL-P-2.0",
"AML",
"MulanPSL-1.0",
"VSL-1.0",
"NLOD-2.0",
"RSA-MD",
"O-UDA-1.0",
"LPPL-1.2",
"CC-BY-SA-2.1-JP",
"Spencer-94",
"OLDAP-1.2",
"OLDAP-2.7",
"Glulxe",
"iMatix",
"TAPR-OHL-1.0",
"NBPL-1.0",
"BSD-Protection",
"LiLiQ-R-1.1",
"Noweb",
"GFDL-1.3-invariants-or-later",
"CC0-1.0",
"CC-BY-NC-2.5",
"Zlib",
"GFDL-1.1-invariants-or-later",
"CC-BY-3.0-AT",
"LPPL-1.3c",
"EPL-1.0",
"ANTLR-PD-fallback",
"OLDAP-2.4",
"Multics",
"OLDAP-2.3",
"ZPL-2.1",
"CC-BY-SA-3.0-DE",
"SGI-B-2.0",
"Apache-2.0",
"Hippocratic-2.1",
"CC-BY-NC-SA-1.0",
"CC-BY-3.0-US",
"TCP-wrappers",
"GFDL-1.2-invariants-or-later",
"LGPL-2.1-or-later",
"LPPL-1.0",
"SGI-B-1.0",
"APL-1.0",
"Unicode-DFS-2015",
"AFL-2.1",
"CC-BY-NC-1.0",
"GD",
"AFL-1.1",
"CC-BY-NC-ND-3.0-IGO",
"MPL-1.1",
"GFDL-1.2-only",
"CNRI-Jython",
"ZPL-1.1",
"GPL-2.0-only",
"FreeImage",
"SHL-0.51",
"CC-BY-NC-4.0",
"Rdisc",
"MPL-2.0-no-copyleft-exception",
"OLDAP-2.1",
"libtiff",
"Imlib2",
"BSD-4-Clause-Shortened",
"AAL",
"CC-BY-2.5",
"APSL-1.2",
"OFL-1.0-no-RFN",
"Sendmail",
"CC-BY-3.0-NL",
"CC-BY-NC-ND-2.5",
"ECL-1.0",
"Afmparse",
"CC-BY-NC-SA-3.0-DE",
"CC-BY-SA-3.0",
"NTP",
"MPL-2.0",
"GFDL-1.3-or-later",
"LPL-1.02",
"AFL-2.0",
"Artistic-2.0",
"MS-RL",
"xpp",
"GFDL-1.2-no-invariants-only",
"ClArtistic",
"HaskellReport",
"CC-BY-3.0-DE",
"RSCPL",
"Intel",
"GFDL-1.1-no-invariants-or-later",
"APAFML",
"SISSL",
"HTMLTIDY",
"Naumen",
"OLDAP-2.8",
"blessing",
"LGPL-2.0-or-later",
"OGTSL",
"CC-BY-ND-2.0",
"Parity-7.0.0",
"CC-BY-NC-SA-4.0",
"CC-BY-ND-1.0",
"CNRI-Python",
"dvipdfm",
"OLDAP-2.5",
"NLOD-1.0",
"SMPPL",
"CC-BY-1.0",
"UCL-1.0",
"Mup",
"LGPL-2.1-only",
"GL2PS",
"PHP-3.0",
"NIST-PD-fallback",
"W3C-20150513",
"CPL-1.0",
"OGL-UK-1.0",
"CrystalStacker",
"TCL",
"ZPL-2.0",
"Frameworx-1.0",
"AGPL-3.0-only",
"DRL-1.0",
"EFL-2.0",
"CAL-1.0-Combined-Work-Exception",
"GFDL-1.1-invariants-only",
"psutils",
"SHL-0.5",
"OFL-1.0-RFN",
"CERN-OHL-W-2.0",
"NRL",
"CECILL-2.1",
"Glide",
"SCEA",
"SPL-1.0",
"Apache-1.1",
"CC-BY-ND-4.0",
"SWL",
"mpich2",
"CERN-OHL-1.1",
"Latex2e",
"SGI-B-1.1",
"FreeBSD-DOC",
"Artistic-1.0-cl8",
"Zed",
"RHeCos-1.1",
"SSPL-1.0",
"JasPer-2.0",
"OLDAP-1.4",
"libpng-2.0",
"CNRI-Python-GPL-Compatible",
"CC-BY-2.0",
"Aladdin",
"Sleepycat",
"Ruby",
"ImageMagick",
"CECILL-1.0",
"GFDL-1.1-only",
"NPL-1.1",
"TU-Berlin-2.0",
"Cube",
"CC-BY-SA-2.0",
"MIT-advertising",
"CECILL-2.0",
"CC-BY-NC-SA-2.5",
"Artistic-1.0",
"AFL-1.2",
"X11",
"Bahyph",
"OLDAP-2.0.1",
"OSL-3.0",
"EUDatagrid",
"MTLL",
"GFDL-1.2-invariants-only",
"curl",
"CC-BY-3.0",
"DSDP",
"LAL-1.3",
"CERN-OHL-1.2",
"TOSL",
"GFDL-1.3-no-invariants-only",
"Qhull",
"TORQUE-1.1",
"MS-PL",
"Apache-1.0",
"copyleft-next-0.3.1",
"GFDL-1.2-or-later",
"MulanPSL-2.0",
"FSFAP",
"CDLA-Sharing-1.0",
"AGPL-1.0-only",
"GFDL-1.3-invariants-only",
"BSD-4-Clause-UC",
"XFree86-1.1",
"SNIA",
"Spencer-99",
"CATOSL-1.1",
"GFDL-1.3-no-invariants-or-later",
"LPPL-1.1",
"CDDL-1.0",
"FTL",
"LAL-1.2",
"ICU",
"MirOS",
"CC-BY-NC-ND-3.0",
"Xerox",
"CC-BY-NC-ND-2.0",
"OSET-PL-2.1",
"SISSL-1.2",
"Adobe-Glyph",
"Linux-OpenIB",
"etalab-2.0",
"Wsuipa",
"AMPAS",
"GPL-1.0-or-later",
"BUSL-1.1",
"0BSD",
"W3C-19980720",
"CC-BY-NC-SA-3.0",
"FSFUL",
"PolyForm-Noncommercial-1.0.0",
"Zimbra-1.4",
"DOC",
"TMate",
"AMDPLPA",
"MIT-open-group",
"CC-BY-4.0",
"BSD-3-Clause-No-Military-License",
"Condor-1.1",
"OGL-Canada-2.0",
"CC-BY-NC-SA-3.0-IGO",
"EFL-1.0",
"Newsletr",
"copyleft-next-0.3.0",
"GPL-3.0-or-later",
"CDLA-Permissive-2.0",
"CC-BY-ND-3.0",
"C-UDA-1.0",
"Vim",
"Barr",
"ADSL",
"CDL-1.0",
"CC-BY-SA-1.0",
"OFL-1.1",
"GLWTPL",
"NPL-1.0",
"xinetd",
"LGPL-2.0-only",
"zlib-acknowledgement",
"OLDAP-2.2.1",
"APSL-1.0",
"BSD-3-Clause-LBNL",
"PostgreSQL",
"LGPL-3.0-only",
"OGC-1.0",
"Dotseqn",
"MakeIndex",
"GPL-3.0-only",
"BSD-3-Clause-No-Nuclear-License-2014",
"GPL-1.0-only",
"AGPL-1.0-or-later",
"BSL-1.0",
"IJG",
"OFL-1.1-no-RFN",
"Libpng",
"CC-BY-NC-3.0",
"CC-BY-NC-2.0",
"Unlicense",
"LPL-1.0",
"bzip2-1.0.5",
"Entessa",
"BSD-2-Clause-Patent",
"ECL-2.0",
"Crossword",
"CC-BY-NC-ND-1.0",
"OCLC-2.0",
"libselinux-1.0",
"CECILL-1.1",
"OGDL-Taiwan-1.0",
"BSD-1-Clause",
"BitTorrent-1.1",
"MIT-enna",
"ANTLR-PD",
"GPL-2.0-or-later",
"CC-BY-SA-3.0-AT",
"CPOL-1.02",
"OFL-1.1-RFN",
"IPL-1.0",
"NTP-0",
"SugarCRM-1.1.3",
"MIT",
"Watcom-1.0",
"FSFULLR",
"CC-BY-NC-SA-2.0-FR",
"BSD-2-Clause",
"SSH-OpenSSH",
"OLDAP-1.3",
"ODbL-1.0",
"GFDL-1.3-only",
"HPND",
"NASA-1.3",
"Borceux",
"OLDAP-1.1",
"OFL-1.0",
"CPAL-1.0",
"VOSTROM",
"Abstyles",
"ISC",
"Unicode-DFS-2016",
"BlueOak-1.0.0",
"LiLiQ-Rplus-1.1",
"MIT-0",
"SMLNJ",
"NOSL",
"PSF-2.0",
"RPL-1.5",
"MIT-Modern-Variant",
"Nokia",
"GFDL-1.1-no-invariants-only",
"PDDL-1.0",
"CDDL-1.1",
"Zimbra-1.3",
"EUPL-1.0",
"Fair",
"JSON",
"LGPL-3.0-or-later",
"OPL-1.0",
"OSL-2.1",
"LPPL-1.3a",
"NAIST-2003",
"CC-BY-NC-ND-4.0",
"CC-BY-NC-3.0-DE",
"OLDAP-2.6",
"HPND-sell-variant",
"NCGL-UK-2.0",
"QPL-1.0",
"GFDL-1.2-no-invariants-or-later",
"EUPL-1.2",
"Beerware",
"CAL-1.0",
"BSD-3-Clause-Open-MPI",
"CECILL-B",
"EPL-2.0",
"MIT-feh",
"RPL-1.1",
"Python-2.0",
"CDLA-Permissive-1.0",
"MPL-1.0",
"diffmark",
"GFDL-1.1-or-later",
"OSL-1.0",
"Parity-6.0.0",
"OpenSSL",
"YPL-1.1",
"SSH-short",
"IBM-pibs",
"Xnet",
"TU-Berlin-1.0",
"AFL-3.0",
"APSL-2.0",
"OGL-UK-3.0",
"CECILL-C",
"BSD-3-Clause-Clear",
"CC-BY-SA-2.0-UK",
"Saxpath",
"NLPL",
"SimPL-2.0",
"psfrag",
"BSD-3-Clause-Modification",
"Spencer-86",
"CERN-OHL-S-2.0",
"ErlPL-1.1",
"MIT-CMU",
"OCCT-PL",
"OSL-2.0",
"NIST-PD",
"Leptonica",
"PolyForm-Small-Business-1.0.0",
"LiLiQ-P-1.1",
"NetCDF",
"OML",
"AGPL-3.0-or-later",
"OLDAP-2.2",
"BSD-3-Clause",
"WTFPL",
"OGL-UK-2.0",
"BSD-3-Clause-Attribution",
"RPSL-1.0",
"CC-BY-NC-ND-3.0-DE",
"EUPL-1.1",
"Sendmail-8.23",
"ODC-By-1.0",
"D-FSL-1.0",
"BSD-4-Clause",
"BSD-2-Clause-Views",
"Artistic-1.0-Perl",
"NPOSL-3.0",
"gSOAP-1.3b",
"Interbase-1.0"
]
},
"copyright": {
"type": "string",
"description": "Freeform string for the package's copyright notice.",
"examples": [
"copyright: (c) 2006-2007 Joe Bloggs"
]
},
"author": {
"type": "string",
"description": "Original author or authors of the package."
},
"maintainer": {
"description": "The current maintainer or maintainers of the package. This is an e-mail address to which users should send bug reports, feature requests and patches.",
"type": "string"
},
"stability": {
"description": "The stability level of the package. Freeform string.",
"type": "string",
"examples": [
"alpha",
"experimental",
"provisional",
"stable"
]
},
"homepage": {
"type": "string",
"format": "uri",
"description": "The package homepage."
},
"bug-reports": {
"type": "string",
"format": "uri",
"description": "The URL where users should direct bug reports.",
"examples": [
"https://github.com/haskell/cabal/issues"
]
},
"package-url": {
"type": "string",
"format": "uri",
"description": "The location of a source bundle for the package. The distribution should be a Cabal package."
},
"synopsis": {
"type": "string",
"description": "A very short description of the package, for use in a table of packages. This is your headline, so keep it short (one line) but as informative as possible. Save space by not including the package name or saying it’s written in Haskell."
},
"description": {
"type": "string",
"description": "Description of the package. This may be several paragraphs, and should be aimed at a Haskell programmer who has never heard of your package before. For library packages, this field is used as prologue text by runhaskell Setup.hs haddock and thus may contain the same markup as Haddock documentation comments."
},
"category": {
"type": [
"string",
"array"
],
"items": {
"type": "string"
},
"description": "A classification category or categories for future use by the package catalogue Hackage. These categories have not yet been specified, but the upper levels of the module hierarchy make a good start."
},
"tested-with": {
"type": "array",
"items": {
"$ref": "#/$defs/compiler"
}
},
"data-files": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of files to be installed for run-time use by the package."
},
"data-dir": {
"type": "string",
"description": "The directory where Cabal looks for data files to install, relative to the source directory. By default, Cabal will look in the source directory itself."
},
"extra-source-files": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of additional files to be included in source distributions built with runhaskell Setup.hs sdist. As with data-files it can use a limited form of * wildcards in file names."
},
"extra-doc-files": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of additional files to be included in source distributions, and also copied to the html directory when Haddock documentation is generated. As with data-files it can use a limited form of * wildcards in file names."
},
"extra-tmp-files": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of additional files or directories to be removed by runhaskell Setup.hs clean. These would typically be additional files created by additional hooks, such as the scheme described in the section on system-dependent parameters."
},
"library": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the package. Defaults to the name of the package for the public library.",
"pattern": "^\\w[\\w-]*$"
},
"exposed-modules": {
"$ref": "#/$defs/identifiers",
"description": "A list of modules added by this package."
},
"virtual-modules": {
"$ref": "#/$defs/identifiers",
"description": "A list of virtual modules provided by this package. Virtual modules are modules without a source file. See for example the GHC.Prim module from the ghc-prim package. Modules listed here will not be built, but still end up in the list of exposed-modules in the installed package info when the package is registered in the package database."
},
"exposed": {
"type": "boolean",
"description": "Some Haskell compilers (notably GHC) support the notion of packages being “exposed” or “hidden” which means the modules they provide can be easily imported without always having to specify which package they come from. However this only works effectively if the modules provided by all exposed packages do not overlap (otherwise a module import would be ambiguous). Almost all new libraries use hierarchical module names that do not clash, so it is very uncommon to have to use this field. However it may be necessary to set exposed: False for some old libraries that use a flat module namespace or where it is known that the exposed modules would clash with other common modules."
},
"visibility": {
"enum": [
"public",
"private"
],
"default": "private"
},
"reexported-modules": {
"$ref": "#/$defs/identifiers",
"description": "Supported only in GHC 7.10 and later. A list of modules to reexport from this package. The syntax of this field is orig-pkg:Name as NewName to reexport module Name from orig-pkg with the new name NewName. We also support abbreviated versions of the syntax: if you omit as NewName, we’ll reexport without renaming; if you omit orig-pkg, then we will automatically figure out which package to reexport from, if it’s unambiguous. Reexported modules are useful for compatibility shims when a package has been split into multiple packages, and they have the useful property that if a package provides a module, and another package reexports it under the same name, these are not considered a conflict (as would be the case with a stub module.) They can also be used to resolve name conflicts."
},
"signatures": {
"type": "array",
"items": {
"type": "string"
},
"description": "Supported only in GHC 8.2 and later. A list of module signatures required by this package. Module signatures are part of the Backpack extension to the Haskell module system. Packages that do not export any modules and only export required signatures are called “signature-only packages”, and their signatures are subjected to signature thinning."
},
"build-depends": {
"type": "array",
"description": "Declares the library dependencies required to build the current package component; see build-tool-depends for declaring build-time tool dependencies. External library dependencies should be annotated with a version constraint.",
"items": {
"type": "string"
}
},
"other-modules": {
"$ref": "#/$defs/identifiers",
"description": "A list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the main-is field."
},
"hs-source-dir": {
"type": "string",
"description": "Root directory for the module hierarchy. Deprecated in favor of hs-source-dirs.",
"deprecated": true
},
"hs-source-dirs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Root directories for the module hierarchy."
},
"default-extensions": {
"description": "A list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the Extension type. For example, CPP specifies that Haskell source files are to be preprocessed with a C preprocessor.",
"$ref": "#/$defs/extensions"
},
"other-extensions": {
"description": "A list of Haskell extensions used by some (but not necessarily all) modules.",
"$ref": "#/$defs/extensions"
},
"default-language": {
"type": "string"
},
"other-languages": {
"type": "string"
},
"extensions": {
"type": "array",
"deprecated": true
},
"build-tool-depends": {
"type": "array",
"description": "A list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during test-suite as well.",
"items": {
"type": "string"
}
}
},
"required": [
"exposed-modules"
]
},
"executables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"$ref": "#/$defs/name",
"description": "Name of the executable. Required."
},
"main-is": {
"type": "string",
"description": "The name of the .hs or .lhs file containing the Main module. Note that it is the .hs filename that must be listed, even if that file is generated using a preprocessor."
},
"scope": {
"enum": [
"public",
"private"
],
"description": "Whether the executable is public (default) or private, i.e. meant to be run by other programs rather than the user."
},
"build-depends": {
"type": "array",
"description": "Declares the library dependencies required to build the current package component; see build-tool-depends for declaring build-time tool dependencies. External library dependencies should be annotated with a version constraint.",
"items": {
"type": "string"
}
},
"other-modules": {
"$ref": "#/$defs/identifiers",
"description": "A list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the main-is field."
},
"hs-source-dir": {
"type": "string",
"description": "Root directory for the module hierarchy. Deprecated in favor of hs-source-dirs.",
"deprecated": true
},
"hs-source-dirs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Root directories for the module hierarchy."
},
"default-extensions": {
"description": "A list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the Extension type. For example, CPP specifies that Haskell source files are to be preprocessed with a C preprocessor.",
"$ref": "#/$defs/extensions"
},
"other-extensions": {
"description": "A list of Haskell extensions used by some (but not necessarily all) modules.",
"$ref": "#/$defs/extensions"
},
"default-language": {
"type": "string"
},
"other-languages": {
"type": "string"
},
"extensions": {
"type": "array",
"deprecated": true
},
"build-tool-depends": {
"type": "array",
"description": "A list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during test-suite as well.",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"main-is"
]
}
},
"test-suites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"$ref": "#/$defs/name",
"description": "Name of the test suite."
},
"type": {
"oneOf": [
{
"const": "exitcode-stdio-1.0",
"description": "Test suites using the exitcode-stdio-1.0 interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels. The exitcode-stdio-1.0 type requires the main-is field."
},
{
"const": "detailed-0.9",
"description": "The detailed-0.9 interface allows Cabal and other test agents to inspect a test suite’s results case by case, producing detailed human- and machine-readable log files. The detailed-0.9 interface requires the test-module field"
}
]
},
"build-depends": {
"type": "array",
"description": "Declares the library dependencies required to build the current package component; see build-tool-depends for declaring build-time tool dependencies. External library dependencies should be annotated with a version constraint.",
"items": {
"type": "string"
}
},
"other-modules": {
"$ref": "#/$defs/identifiers",
"description": "A list of modules used by the component but not exposed to users. For a library component, these would be hidden modules of the library. For an executable, these would be auxiliary modules to be linked with the file named in the main-is field."
},
"hs-source-dir": {
"type": "string",
"description": "Root directory for the module hierarchy. Deprecated in favor of hs-source-dirs.",
"deprecated": true
},
"hs-source-dirs": {
"type": "array",
"items": {
"type": "string"
},
"description": "Root directories for the module hierarchy."
},
"default-extensions": {
"description": "A list of Haskell extensions used by every module. These determine corresponding compiler options enabled for all files. Extension names are the constructors of the Extension type. For example, CPP specifies that Haskell source files are to be preprocessed with a C preprocessor.",
"$ref": "#/$defs/extensions"
},
"other-extensions": {
"description": "A list of Haskell extensions used by some (but not necessarily all) modules.",
"$ref": "#/$defs/extensions"
},
"default-language": {
"type": "string"
},
"other-languages": {
"type": "string"
},
"extensions": {
"type": "array",
"deprecated": true
},
"build-tool-depends": {
"type": "array",
"description": "A list of Haskell executables needed to build this component. Executables are provided during the whole duration of the component, so this field can be used for executables needed during test-suite as well.",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"type"
]
}
}
},
"required": [
"name",
"version",
"cabal-version"
],
"$defs": {
"compiler": {
"type": "string",
"description": "A compiler flavor (GHC, UHC or LHC) followed by a version range.",
"examples": [
"GHC ==6.10.3",
"LHC >= 0.6 && < 0.8"
]
},
"name": {
"type": "string",
"pattern": "^\\w[\\w-]*$"
},
"identifier": {
"type": "string",
"pattern": "^(\\w[\\w-]*)(\\.\\w[\\w-]*)*$"
},
"identifiers": {
"type": "array",
"items": {
"$ref": "#/$defs/identifier"
}
},
"extensions": {
"type": "array",
"items": {
"enum": [
"Cpp",
"OverlappingInstances",
"UndecidableInstances",
"IncoherentInstances",
"UndecidableSuperClasses",
"MonomorphismRestriction",
"MonoPatBinds",
"MonoLocalBinds",
"RelaxedPolyRec",
"ExtendedDefaultRules",
"ForeignFunctionInterface",
"UnliftedFFITypes",
"InterruptibleFFI",
"CApiFFI",
"GHCForeignImportPrim",
"JavaScriptFFI",
"ParallelArrays",
"Arrows",
"TemplateHaskell",
"TemplateHaskellQuotes",
"QuasiQuotes",
"ImplicitParams",
"ImplicitPrelude",
"ScopedTypeVariables",
"AllowAmbiguousTypes",
"UnboxedTuples",
"UnboxedSums",
"UnliftedNewtypes",
"BangPatterns",
"TypeFamilies",
"TypeFamilyDependencies",
"TypeInType",
"OverloadedStrings",
"OverloadedLists",
"NumDecimals",
"DisambiguateRecordFields",
"RecordWildCards",
"RecordPuns",
"ViewPatterns",
"GADTs",
"GADTSyntax",
"NPlusKPatterns",
"DoAndIfThenElse",
"BlockArguments",
"RebindableSyntax",
"ConstraintKinds",
"PolyKinds",
"DataKinds",
"InstanceSigs",
"ApplicativeDo",
"StandaloneDeriving",
"DeriveDataTypeable",
"AutoDeriveTypeable",
"DeriveFunctor",
"DeriveTraversable",
"DeriveFoldable",
"DeriveGeneric",
"DefaultSignatures",
"DeriveAnyClass",
"DeriveLift",
"DerivingStrategies",
"DerivingVia",
"TypeSynonymInstances",
"FlexibleContexts",
"FlexibleInstances",
"ConstrainedClassMethods",
"MultiParamTypeClasses",
"NullaryTypeClasses",
"FunctionalDependencies",
"UnicodeSyntax",
"ExistentialQuantification",
"MagicHash",
"EmptyDataDecls",
"KindSignatures",
"RoleAnnotations",
"ParallelListComp",
"TransformListComp",
"MonadComprehensions",
"GeneralizedNewtypeDeriving",
"RecursiveDo",
"PostfixOperators",
"TupleSections",
"PatternGuards",
"LiberalTypeSynonyms",
"RankNTypes",
"ImpredicativeTypes",
"TypeOperators",
"ExplicitNamespaces",
"PackageImports",
"ExplicitForAll",
"AlternativeLayoutRule",
"AlternativeLayoutRuleTransitional",
"DatatypeContexts",
"NondecreasingIndentation",
"RelaxedLayout",
"TraditionalRecordSyntax",
"LambdaCase",
"MultiWayIf",
"BinaryLiterals",
"NegativeLiterals",
"HexFloatLiterals",
"DuplicateRecordFields",
"OverloadedLabels",
"EmptyCase",
"PatternSynonyms",
"PartialTypeSignatures",
"NamedWildCards",
"StaticPointers",
"TypeApplications",
"Strict",
"StrictData",
"MonadFailDesugaring",
"EmptyDataDeriving",
"NumericUnderscores",
"QuantifiedConstraints",
"StarIsType",
"ImportQualifiedPost",
"CUSKs",
"StandaloneKindSignatures"
]
},
"uniqueItems": true
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment