ghc-mod只在一个只有一个haskell源文件的目录下工作,但如果我在该目录中运行“cabal init”(/ tmp / test),我会收到以下错误:
(p1)dave@peach:/tmp/test$ !ghc
ghc-mod check Main.hs
ghc-mod: /tmp/test/dist/setup-config: hGetContents: invalid argument (invalid byte sequence)
这里出了什么问题?
我在64位ubuntu 14.04计算机上运行ghc-mod 5.2.11和cabal 1.21.1.0。 LANG环境变量设置为en_US.UTF-8(我看到对其他一些问题的回答,这些问题表明LANG设置在这里可能很重要)。我试过运行cabal版本1.16.0,但它没有任何区别。
这是一份显示更多细节的成绩单:
(p1)dave@peach:/tmp/test$ ls -la
total 80
drwxrwxr-x 2 dave dave 4096 Dec 4 07:07 .
drwxrwxrwt 35 root root 69632 Dec 4 07:06 ..
-rw-rw-r-- 1 dave dave 143 Dec 4 07:04 Main.hs
(p1)dave@peach:/tmp/test$ set | grep LANG
GDM_LANG=en_US
LANG=en_US.UTF-8
LANGUAGE=en_US
(p1)dave@peach:/tmp/test$ ghc-mod version
ghc-mod version 5.2.1.1 compiled by GHC 7.6.3
(p1)dave@peach:/tmp/test$ cabal -V
cabal-install version 1.21.1.0
using version 1.21.1.0 of the Cabal library
(p1)dave@peach:/tmp/test$ ghc-mod check Main.hs
Main.hs:7:1:Warning: Top-level binding with no type signature: haqify :: [Char] -> [Char]
(p1)dave@peach:/tmp/test$ cabal init
Package name? [default: test]
Package version? [default: 0.1.0.0]
Please choose a license:
* 1) (none)
2) GPL-2
3) GPL-3
4) LGPL-2.1
5) LGPL-3
6) AGPL-3
7) BSD2
8) BSD3
9) MIT
10) ISC
11) MPL-2.0
12) Apache-2.0
13) PublicDomain
14) AllRightsReserved
15) Other (specify)
Your choice? [default: (none)] 2
Author name? [default: XXXXXXXXXXXX]
Maintainer email? [default: XXXXXXXXXXXXXXXXXXXXXX]
Project homepage URL?
Project synopsis?
Project category:
* 1) (none)
2) Codec
3) Concurrency
4) Control
5) Data
6) Database
7) Development
8) Distribution
9) Game
10) Graphics
11) Language
12) Math
13) Network
14) Sound
15) System
16) Testing
17) Text
18) Web
19) Other (specify)
Your choice? [default: (none)]
What does the package build:
1) Library
2) Executable
Your choice? 2
What is the main module of the executable:
* 1) Main.hs
2) Other (specify)
Your choice? [default: Main.hs]
What base language is the package written in:
* 1) Haskell2010
2) Haskell98
3) Other (specify)
Your choice? [default: Haskell2010]
Include documentation on what each field means (y/n)? [default: n]
Source directory:
* 1) (none)
2) src
3) Other (specify)
Your choice? [default: (none)]
Guessing dependencies...
Generating LICENSE...
Generating Setup.hs...
Generating test.cabal...
Warning: no synopsis given. You should edit the .cabal file and add one.
You may want to edit the .cabal file and add a Description field.
(p1)dave@peach:/tmp/test$ !ghc
ghc-mod check Main.hs
ghc-mod: /tmp/test/dist/setup-config: hGetContents: invalid argument (invalid byte sequence)
(p1)dave@peach:/tmp/test$
答案 0 :(得分:3)
ghc-mod不适用于GHC< 7.10和Cabal-1.22。
如果您仍然使用GHC 7.8.3或7.8.4,则可能需要暂停 更新cabal或cabal-install。
答案 1 :(得分:1)
简而言之:
Cabal version <= 1.20.0.6
(版本1.20.0.6是最新的版本,不会中断ghc-mod
); ghc-mod
等)。转到项目的根文件夹并创建一个沙箱:
cd ~/tmp/test #go to you project's root directory
cabal sandbox init #create a sandbox
每次从当前目录运行cabal sandbox init
时,它都会在给定目录中创建一个.cabal-sandbox
文件夹。如果您将ghc-mod
安装到沙盒中(即隔离),它仍然会使用沙盒版cabal
和cabal-install
进行安装,因为它位于您的PATH
中。要解决此问题,请在~/.bash_profile
文件中添加以下行:
export PATH="./.cabal-sandbox/bin:$PATH"
路径开头的点表示您要在当前目录中搜索名为.cabal-sandbox
的文件夹,其中包含名为bin
的子文件夹,其中安装了沙盒包。如果在包含沙箱的文件夹中运行命令,系统将从适当的沙箱运行可执行文件。如果文件夹不包含沙箱,则它将使用*/.cabal/bin
目录的常用路径。
确保您的沙箱路径位于PATH变量中*/.cabal/bin
的常用路径之前。您可以使用终端$PATH
命令查看路径的顺序。
使用终端~/.bash_profile
命令重新加载source ~/.bash_profile
文件,或者只关闭&amp;重新打开你的终端。
下次安装Cabal version <= 1.20.0.6
,但不会中断ghc-mod
:
cabal install cabal-install-1.20.0.6 #install the latest cabal supported by ghc-mod
使用终端~/.bash_profile
命令再次重新加载source ~/.bash_profile
文件,或者只关闭&amp;重新打开你的终端。
从沙盒中运行cabal --version
&#39;夹。它应该表明您使用的是cabal-install version 1.20.0.6
和version 1.20.0.3 of the Cabal library
。从没有沙盒的文件夹中运行cabal --version
以查看全局,您仍然使用当前版本的cabal-install
和Cabal library
。
返回项目的根文件夹并安装到您需要的沙箱包中:
cd ~/tmp/test #go to you project's root directory
cabal install ghc-mod-5.2.1.2 #explicitly indicate version of ghc-mod you want to install, otherwise cabal will try to install an ancient version 0.3.0