Search code examples
haskellcabal

Cabal package difference between readPackageDescription and parsePackageDescription


Haskell package Cabal-1.24.2 has module Distribution.PackageDescription.Parse. Module has 2 functions: readPackageDescription and parsePackageDescription.

When I run in ghci:

let d = readPackageDescription normal "C:\\somefile.cabal"

I got parsed GenericPackageDescription

But when I run in ghci:

content <- readFile "C:\\somefile.cabal"
let d = parsePackageDescription content

I got Parse error:

ParseFailed (FromString "Plain fields are not allowed in between stanzas: F 2 \"version\" \"0.1.0.0\"" (Just 2))

File example is a file that generated using cabal init


Solution

  • parsePackageDescription expects the file contents themselves to be passed it, not the file path they are stored at. You'll want to readFile first... though beware of file encoding issues. http://www.snoyman.com/blog/2016/12/beware-of-readfile