Home > Enterprise >  Syntax error in .cabal file created by cabal init, at the name of the package
Syntax error in .cabal file created by cabal init, at the name of the package

Time:12-03

I have a directory called day-2 (unrelated to the issue, just working through the Advent of Code), in which I ran cabal init.

This init command generated a day-2.cabal file:

cabal-version:      3.4
-- The cabal-version field refers to the version of the .cabal specification,
-- and can be different from the cabal-install (the tool) version and the
-- Cabal (the library) version you are using. As such, the Cabal (the library)
-- version used must be equal or greater than the version stated in this field.
-- Starting from the specification version 2.2, the cabal-version field must be
-- the first thing in the cabal file.

-- Initial package description 'day-2' generated by
-- 'cabal init'. For further documentation, see:
--   http://haskell.org/cabal/users-guide/
--
-- The name of the package.
name:               day-2

-- The package version.
-- See the Haskell package versioning policy (PVP) for standards
-- guiding when and how versions should be incremented.
-- https://pvp.haskell.org
-- PVP summary:      - ------- breaking API changes
--                  | |  ----- non-breaking API additions
--                  | | |  --- code changes with no API change
version:            0.1.0.0

-- A short (one-line) description of the package.
-- synopsis:

-- A longer description of the package.
-- description:

-- The license under which the package is released.
license:            AGPL-3.0-or-later

-- The file containing the license text.
license-file:       LICENSE

-- The package author(s).
author:             <redacted>

-- An email address to which users can send suggestions, bug reports, and patches.
maintainer:         <redacted>

-- A copyright notice.
-- copyright:
build-type:         Simple

-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.
extra-doc-files:    CHANGELOG.md

-- Extra source files to be distributed with the package, such as examples, or a tutorial module.
-- extra-source-files:

common warnings
    ghc-options: -Wall

executable day-2
    -- Import common warning flags.
    import:           warnings

    -- .hs or .lhs file containing the Main module.
    main-is:          Main.hs

    -- Modules included in this executable, other than Main.
    -- other-modules:

    -- LANGUAGE extensions used by modules in this package.
    -- other-extensions:

    -- Other library packages from which modules are imported.
    build-depends:    base ^>=4.12.0.0

    -- Directories containing source files.
    hs-source-dirs:   app

    -- Base language which the package is written in.
    default-language: Haskell2010

Here are a list of files it created:

$ find . -type f
./app/Main.hs
./LICENSE
./CHANGELOG.md
./day-2.cabal
./dist-newstyle/cache/compiler
./README.md # I created this one myself, manually

I went to compile my app/Main.hs file, which looks like:

module Main where

main :: IO ()
main = putStrLn "hello"

When I run cabal build I get this error:

$ cabal build
Errors encountered when parsing cabal file ./day-2.cabal:

day-2.cabal:14:26: error:
unexpected end of input

    1 | cabal-version:      3.4
    2 | -- The cabal-version field refers to the version of the .cabal specification,
    3 | -- and can be different from the cabal-install (the tool) version and the
    4 | -- Cabal (the library) version you are using. As such, the Cabal (the library)
    5 | -- version used must be equal or greater than the version stated in this field.
    6 | -- Starting from the specification version 2.2, the cabal-version field must be
    7 | -- the first thing in the cabal file.
    8 | 
    9 | -- Initial package description 'day-2' generated by
   10 | -- 'cabal init'. For further documentation, see:
   11 | --   http://haskell.org/cabal/users-guide/
   12 | --
   13 | -- The name of the package.
   14 | name:               day-2
      |                          ^

I don't see anyone else talking about this particular issue.

Here is my cabal version:

$ cabal --version
cabal-install version 3.8.1.0
compiled using version 3.8.1.0 of the Cabal library 

Not sure if it's relevant, but here is my ghc version as well:

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.6.5

I should say, yesterday I ran cabal init in a different directory (for day-1) and it made my Main.hs and day-1.cabal file just fine, and it was able to build and run without issue.

Not sure what the problem is here, was hoping someone knew what is wrong.

CodePudding user response:

Cabal package names may contain letters, numbers and hyphens, but not spaces and may also not contain a hyphened section consisting of only numbers.

https://cabal.readthedocs.io/en/stable/developing-packages.html#package-names-and-versions

Otherwise the syntax $PACKAGE-$VERSION would be ambiguous.

  • Related