【发布时间】:2014-03-14 06:40:51
【问题描述】:
我尝试安装 Haskell 图表库,但无法安装其中一个依赖项。由于对 haskell 没有那么丰富的经验,我不太明白如何解决这个错误。
我删除了我认为与失败的构建无关的警告 (------ warnings ommitted (-Winvalid-pp-token) -----)
【问题讨论】:
我尝试安装 Haskell 图表库,但无法安装其中一个依赖项。由于对 haskell 没有那么丰富的经验,我不太明白如何解决这个错误。
我删除了我认为与失败的构建无关的警告 (------ warnings ommitted (-Winvalid-pp-token) -----)
【问题讨论】:
我猜你是在安装了 Xcode 5 的 OS X 上?有instructions for that。
Xcode 5 提供 Clang 作为 C 编译器,在预处理方面,它与 GCC 之间存在一些“解释差异”。这些差异会影响一些使用
CPP扩展的 Haskell 代码。使用 Xcode 5 的用户的另一种方法是安装 GCC 并在该处直接使用 GHC。有关说明,请参阅this page。
【讨论】:
正如 Jon Purdy 所说,这与预处理有关。特别是,vector-space 中的一些模块在顶部列出了所需的语言扩展,如下所示:
{-# LANGUAGE MultiParamTypeClasses, TypeOperators
, TypeFamilies, UndecidableInstances, CPP
, FlexibleContexts
#-}
{-# OPTIONS_GHC -Wall #-}
----------------------------------------------------------------------
-- |
-- Module : Data.VectorSpace
...
即{#- ... -#} 跨越多行,因此分隔符是以# 开头的行。然后触发预处理器,显然没有好的结果!
你可以改成
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
或者可能这也可以:
{-# LANGUAGE MultiParamTypeClasses, TypeOperators
, TypeFamilies, UndecidableInstances, CPP
, FlexibleContexts #-}
这是一个自动执行此转换的脚本:
import System.IO.Strict as S
import System.Environment
import Control.Monad
rmLeadHash :: [String] -> [String]
rmLeadHash [] = []
rmLeadHash [l] = [l]
rmLeadHash (l:l':ls)
| ('#':_) <- dropWhile (==' ') l' = (l ++ l') : rmLeadHash ls
| otherwise = l : rmLeadHash (l':ls)
main = do
files <- getArgs
forM_ files $ \f -> do
hs <- S.readFile f
writeFile f $ unlines . rmLeadHash . lines $ hs
你可以这样做
$ git clone git://github.com/conal/vector-space.git # or cabal fetch vector-space
$ cd vector-space
$ cabal install strict # needed for my script
$ find src -name '*.hs' | xargs runhaskell remLeadingHashes.hs
# ^- the script I've posted
$ cabal install # installs the modified vector-space package
如果可行,您可能需要推送更改。
【讨论】:
<-在没有do关键字的情况下是如何在rmLeadHash中工作的吗?