2016-08-18 47 views
0

我試圖用Haskell Stack建立the code from PCPH。但是,我收到有關Cabal未找到happy的錯誤。我安裝alexhappy雖然(他們在/usr/bin)。Stack/Cabal找不到快樂

setup-Simple-Cabal-1.22.5.0-ghc-7.10.3: The program 'happy' is required but it 
could not be found 

-- While building package parconc-examples-0.4.3 using: 

這裏就是棧認爲我PATH是:

$ stack exec bash 
$ echo $PATH | tr : '\n' 
/home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/bin 
/home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/bin 
/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin 
/home/steshaw/.nix-profile/bin 
/home/steshaw/.nix-profile/sbin 
/usr/local/sbin 
/usr/local/bin 
/home/steshaw/Projects/shelly/bin 
/usr/local/sbin 
/usr/local/bin 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
/usr/games 
/usr/local/games 
/snap/bin 

下面是從stack path輸出:

stack-root: /home/steshaw/Projects/shelly/dotfiles/.stack 
project-root: /home/steshaw/Projects/parconc-examples 
config-location: /home/steshaw/Projects/parconc-examples/stack.yaml 
bin-path: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/bin:/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin:/home/steshaw/.nix-profile/bin:/home/steshaw/.nix-profile/sbin:/usr/local/sbin:/usr/local/bin:/home/steshaw/Projects/shelly/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin 
programs: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux 
compiler-exe: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin/ghc 
compiler-bin: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin 
local-bin: /home/steshaw/.local/bin 
extra-include-dirs: 
extra-library-dirs: 
snapshot-pkg-db: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/pkgdb 
local-pkg-db: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/pkgdb 
global-pkg-db: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/lib/ghc-7.10.3/package.conf.d 
ghc-package-path: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/pkgdb:/home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/pkgdb:/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/lib/ghc-7.10.3/package.conf.d 
snapshot-install-root: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3 
local-install-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3 
snapshot-doc-root: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/doc 
local-doc-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/doc 
dist-dir: .stack-work/dist/x86_64-linux/Cabal-1.22.5.0 
local-hpc-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/hpc 
local-bin-path: /home/steshaw/.local/bin 
ghc-paths: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux 

這裏是快樂的版本,堆棧發現我的路徑:

$ stack exec -- happy -V 
Happy Version 1.19.5 Copyright (c) 1993-1996 Andy Gill, Simon Marlow (c) 1997-2005 Simon Marlow 

Happy is a Yacc for Haskell, and comes with ABSOLUTELY NO WARRANTY. 
This program is free software; you can redistribute it and/or modify 
it under the terms given in the file 'LICENSE' distributed with 
the Happy sources. 

我在Ubuntu 16.04.1 LTS(x86_64)上。

+0

你可以給我們'堆棧exec'的輸出echo $ path「'? – epsilonhalbe

+0

該命令不太正常,但讓我試一試 –

+0

我認爲這是不正確的 - 你開始一個bash,因此你從全局和本地bash配置加載的東西。但我檢查了 - 有一個「堆棧路徑」命令,應該列出有趣的東西。 – epsilonhalbe

回答

1

兩件事情嘗試:

  1. 使用解析器對項目通過堆疊安裝高興:

    stack install happy --resolver lts-4.2 
    

當我建parconc-實例與解析LTS-4.2,我發現它 正在使用lts-4.2快照目錄中的快樂二進制文件,即使 我已將它安裝在PATH中的其他位置。

  • 使用此Setup.hs程序:

    import Distribution.Simple 
    import System.Environment 
    
    main = do 
        args <- getArgs 
        let args' = if elem "configure" args 
           then args ++ [ "--with-happy=/usr/bin/happy" ] 
           else args 
        defaultMainWithArgs args' 
    
  • 而且也一定要在parconc-examples.cabal的build-type:更改爲Custom。完全刪除.stack-work目錄以確保使用新的安裝程序重建所有內容。

    +0

    通過'stack'安裝'happy'不能解決我的問題。它將相同版本的'happy'安裝到〜/ .local/bin中。 –

    +0

    嘗試方法#2。在我的系統中,我很高興在〜/ .stack/snapshots/$ ARCH/$ RESOLVER/bin中爲$ RESOLVER的各種值(例如lts-4.2,lts-6.0,...)安裝了什麼版本的堆棧? – ErikR

    +0

    也只是嘗試複製到〜/ .stack /快照/.../ lts-4.2/bin – ErikR