In one of my projects I want to use llvm-general and llvm-general-pure but I want to use the llvm-3.9 branch which works with llvm 3.9, the latest version of these libraries on hackage are for llvm 3.5.
My project is a stack project, this is what I have in stack.yaml :
resolver: nightly-2017-05-01
packages:
- '.'
- location:
git: https://github.com/bscarlet/llvm-general.git
commit: 61fd03639063283e7dc617698265cc883baf0eec
subdirs:
- llvm-general
- llvm-general-pure
extra-dep: true
All other options are left to default.
This is my project.cabal :
name: compiler-final
version: 0.1.0.0
category: Compiler
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
library
hs-source-dirs: src
exposed-modules: Lexer,Parser,ParserTestData,CodeGen
other-modules: Prelude,StateTUtil
ghc-options: -Wall -dcore-lint -fhpc -XNoImplicitPrelude -fobject-code
build-depends: base-noprelude >= 4.7 && < 5 , megaparsec < 6 , transformers < 1, unordered-containers < 1 , hashable < 2
,classy-prelude , either < 5 , mono-traversable < 2 , logfloat < 0.14 , text
default-language: Haskell2010
default-extensions: OverloadedStrings
executable compiler-final-exe
hs-source-dirs: app
main-is: Main.hs
ghc-options: -threaded -rtsopts -XNoImplicitPrelude -with-rtsopts=-N -fobject-code
build-depends: base
, compiler-final
default-language: Haskell2010
default-extensions: OverloadedStrings
test-suite compiler-final-test
type: exitcode-stdio-1.0
hs-source-dirs: test
other-modules: LexerSpec , ParserSpec
main-is: Spec.hs
build-depends: base
, compiler-final, megaparsec < 6 , hspec < 3,hspec-megaparsec >= 0.3,unordered-containers < 1
,hashable,transformers < 1,text,bytestring , mtl, text
ghc-options: -threaded -rtsopts -with-rtsopts=-N -fhpc -Wall -XNoImplicitPrelude -fobject-code
default-language: Haskell2010
default-extensions: OverloadedStrings
Benchmark compiler-final-bench
type: exitcode-stdio-1.0
hs-source-dirs: bench
main-is: Bench.hs
other-modules: ParserBench
build-depends: base,compiler-final,megaparsec < 6 ,unordered-containers < 1,QuickCheck<3
,hashable
ghc-options: -rtsopts -auto-all -caf-all -fforce-recomp -fobject-code
default-language: Haskell2010
Unfortunately in CodeGen.hs this simple import statement doesn't compile : import LLVM.General.AST, it says it didn't find the module.
Now I have llvm-general branch 3.9 installed globally through cabal install and I can access it with ghci -package(not stack ghci) and the above module exists.
I tried adding llvm-general and llvm-general-pure to my dependencies list with version 3.9.0.0 but stack seems to try to install version 3.5 because it reports errors about mismatched versions.
So how to achieve what I want ?
Your .cabal does not list llvm-general and llvm-general-pure as dependencies, hence why LLVM.General.AST is not being found.
Moreover, your stack.yaml is pointing to master, so stack will only see version 3.5. stack doesn't know anything about version 3.9 if it's not in the stack.yaml file. Either:
change the commit to ec1ad5bd2112e7f64dbb43441b5e2075cf6ad8e;
or, if you have the branch cloned locally, you can replace the whole location field corresponding to the repository with
- location: 'path/to/llvm-general'
extra-dep: true
- location: 'path/to/llvm-general-pure'
extra-dep: true
Related
So I seen another post where somebody figured this out but they just said they figured it out and I can't.
I need Data.ByteString for a project I'm working on to read a binary file. I get this error on my Main.hs.
Could not load module ‘Data.ByteString’
It is a member of the hidden package ‘bytestring-0.10.8.2’.
You can run ‘:set -package bytestring’ to expose it.
(Note: this unloads all the modules in the current scope.)
I now have this relevant code in my stack.yaml file and .cabal file respectively.
resolver: lts-14.27
packages:
- bytestring >= 0.10.8.2
- binary >= 0.7.5
library
exposed-modules:
Lib
other-modules:
Paths_maze
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
default-language: Haskell2010
executable maze-exe
main-is: Main.hs
other-modules:
Paths_maze
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, maze
, bytestring >= 0.10.8.2
, binary >= 0.7.5
default-language: Haskell2010
I don't understand what I'm missing, any help is always appreciated.
Also yes I am very new to Haskell.
EDIT
(in response tosjakobi's comment)
Updates:
.cabal file had dependencies added to it's library section
stack.yaml file had binary and bytestring removed. This is how the stack file was originally when it was made new, except I changed the resolver based on my professors given choice. I don't even know the difference.
package.yaml file is now below
Files (relevant code):
stack.yaml file
resolver: lts-14.27
packages:
- .
package.yaml file
dependencies:
- base >= 4.7 && < 5
library:
source-dirs: src
executables:
maze-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- maze
tests:
maze-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- maze
.cabal file
library
exposed-modules:
Lib
other-modules:
Paths_maze
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
, bytestring >= 0.10.8.2
, binary >= 0.7.5
default-language: Haskell2010
executable maze-exe
main-is: Main.hs
other-modules:
Paths_maze
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, maze
, bytestring >= 0.10.8.2
, binary >= 0.7.5
default-language: Haskell2010
I want to work on a new Haskell project using the threepenny-gui package.
The first thing I did was create a stack project via $ stack new threepennydemo. From here, here, I did the following:
I edited the extra-deps section in my stack.yaml file from:
# extra-deps: []
to
extra-deps:
- threepenny-gui-0.9.0.0
I edited the .cabal file from:
library
exposed-modules:
Lib
other-modules:
Paths_threepennydemo
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
default-language: Haskell2010
executable threepennydemo-exe
main-is: Main.hs
other-modules:
Paths_threepennydemo
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, threepennydemo
default-language: Haskell2010
test-suite threepennydemo-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_threepennydemo
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, threepennydemo
default-language: Haskell2010
to
library
exposed-modules:
Lib
other-modules:
Paths_threepennydemo
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
, threepenny-gui >= 0.9
default-language: Haskell2010
executable threepennydemo-exe
main-is: Main.hs
other-modules:
Paths_threepennydemo
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, threepennydemo
, threepenny-gui >= 0.9
default-language: Haskell2010
test-suite threepennydemo-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_threepennydemo
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, threepennydemo
, threepenny-gui >= 0.9
default-language: Haskell2010
I edited the stock /app/Main.hs from:
module Main where
import Lib
main :: IO ()
main = someFunc
to
import Graphics.UI.Threepenny
main :: IO ()
main = do
startGUI defaultConfig showMessage
showMessage :: Window -> UI ()
showMessage window = do
getBody window #+ [string "Hello, world!"]
return ()
I enter the command $ stack build.
From here, I notice two things. The first is that I receive the following error:
Building all executables for `threepennydemo' once. After a successful build of all of them, only specified executables will be rebuilt.
threepennydemo> configure (lib + exe)
Configuring threepennydemo-0.1.0.0...
threepennydemo> build (lib + exe)
Preprocessing library for threepennydemo-0.1.0.0..
Building library for threepennydemo-0.1.0.0..
Preprocessing executable 'threepennydemo-exe' for threepennydemo-0.1.0.0..
Building executable 'threepennydemo-exe' for threepennydemo-0.1.0.0..
[1 of 2] Compiling Main
/Users/my_username/threepennydemo/app/Main.hs:1:1: error:
Could not load module ‘Graphics.UI.Threepenny’
It is a member of the hidden package ‘threepenny-gui-0.9.0.0’.
Perhaps you need to add ‘threepenny-gui’ to the build-depends in your .cabal file.
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import Graphics.UI.Threepenny
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- While building package threepennydemo-0.1.0.0 using:
/Users/my_username/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_3.0.1.0_ghc-8.8.4 --builddir=.stack-work/dist/x86_64-osx/Cabal-3.0.1.0 build lib:threepennydemo exe:threepennydemo-exe --ghc-options " -fdiagnostics-color=always"
Process exited with code: ExitFailure 1
The second is that my .cabal file, edited as mentioned in 2., has automatically removed the edits I made to the file.
What am I missing in order to be able to use a third party library when setting up a new stack project?
My difficulty as the result of some confusion between stack.yaml and package.yaml. The latter being what generates the threepennydemo.cabal file. Hence, dependencies must also be specified to a package.yaml file. Adding this dependency to the package.yaml allowed $ stack build to complete without issue.
I installed a simple proyect with stack, my stack.yaml looks like:
resolver: lts-14.6
packages:
- .
dependencies:
- base (>=3 && <5)
- numbers
and I have a simple code that only calls a function:
module Main where
import Lib
import Data.Number.CReal
main :: IO ()
main = someFunc
and the error is always the same:
numbers-play-0.1.0.0: unregistering (local file changes: numbers-play.cabal)
numbers-play> configure (lib + exe)
Configuring numbers-play-0.1.0.0...
numbers-play> build (lib + exe)
Preprocessing library for numbers-play-0.1.0.0..
Building library for numbers-play-0.1.0.0..
[1 of 2] Compiling Lib
[2 of 2] Compiling Paths_numbers_play
Preprocessing executable 'numbers-play-exe' for numbers-play-0.1.0.0..
Building executable 'numbers-play-exe' for numbers-play-0.1.0.0..
[1 of 2] Compiling Main [Data.Number.CReal changed]
/home/damian/dev/haskell/numbers-play/app/Main.hs:4:1: error:
Could not load module ‘Data.Number.CReal’
It is a member of the hidden package ‘numbers-3000.2.0.2’.
Perhaps you need to add ‘numbers’ to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
|
4 | import Data.Number.CReal
| ^^^^^^^^^^^^^^^^^^^^^^^^
My cabal file:
cabal-version: 1.12
-- This file has been generated from package.yaml by hpack version 0.31.2.
--
-- see: https://github.com/sol/hpack
--
-- hash: fb0ed9e8eb8062639f1d6a02a65d857d15b3265158925242287d4a8a885f8381
name: numbers-play
version: 0.1.0.0
description: Please see the README on GitHub at <https://github.com/githubuser/numbers-play#readme>
homepage: https://github.com/githubuser/numbers-play#readme
bug-reports: https://github.com/githubuser/numbers-play/issues
author: Author name here
maintainer: example#example.com
copyright: 2019 Author name here
license: BSD3
license-file: LICENSE
build-type: Simple
extra-source-files:
README.md
ChangeLog.md
source-repository head
type: git
location: https://github.com/githubuser/numbers-play
library
exposed-modules:
Lib
other-modules:
Paths_numbers_play
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
default-language: Haskell2010
executable numbers-play-exe
main-is: Main.hs
other-modules:
Paths_numbers_play
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, numbers-play
default-language: Haskell2010
test-suite numbers-play-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_numbers_play
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, numbers-play
default-language: Haskell2010
How can I import it properly?
The dependencies field, which specifies the numbers dependency, should be in your package.yaml file (which Stack uses to generate the cabal file), and not in stack.yaml (which is for Stack-specific configuration, such as choosing the resolver).
I'm trying to make 2 executables "project". All duplicates of this question did not help me - their answers don't fix my problem. I have .cabal file like this:
name: int-tests
version: 0.1.0.0
synopsis: Integration Tests Suite
description: Integration Tests Suite
license: AllRightsReserved
author: Author name here
maintainer: example#example.com
copyright: 2018 Author name here
build-type: Custom
extra-source-files: README.md
cabal-version: >=1.10
library
hs-source-dirs: common
exposed-modules: Common
build-depends: base
, text
, aeson
, network-uri
default-language: Haskell2010
ghc-options: -Wall -Werror
executable api-tests-exe
hs-source-dirs: api
main-is: Main.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Werror
build-depends: base
, hspec
, QuickCheck
default-language: Haskell2010
executable e2e-tests-exe
hs-source-dirs: e2e
main-is: Main.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Werror
build-depends: base
, hspec
, QuickCheck
default-language: Haskell2010
and when I call stack ide targets I don't see these 2 targets. So, stack build api-tests and stack build e2e-tests don't work too.
How can I create 2 targets' project for stack? I tried also package.yaml but result is the same. Stack version is 1.9.1. I have folders tree like:
api/
...
e2e/
...
where are Main.hs files with content like:
module Main (main) where
main :: IO ()
main = print "Hello"
Also I tried option -main-is Main but without success.
Error looks like:
Error: While constructing the build plan, the following exceptions were encountered:
Unknown package: api-tests
AFAIK, stack build always builds all your targets. But if you want to be run just one executable, you'll need the full name including the -exe. So, stack exec api-tests-exe and stack exec e2e-tests-exe.
But what you really want to do is make these test targets: https://www.haskell.org/cabal/users-guide/developing-packages.html#test-suites
Problem was in stack.yaml file, I had to add '.' folder to "packages:" section.
I want to use System.Directory in emacs with Haskell mode and Intero, While the on the fly check warns that Couldn't find module System.Directory. So I add some dependencies in my cabal file. And the warning doesn't disappear while the stack build successfully executed.
Below is my cabal file:
-- This file has been generated from package.yaml by hpack version 0.28.2.
--
-- see: https://github.com/sol/hpack
--
-- hash: 536b5f6ecaaec7d4b7a9694c8f69bbe648a1d21d80fa721e533ac5b139955401
name: find
version: 0.1.0.0
description: Please see the README on GitHub at <https://github.com/Handora/find#readme>
homepage: https://github.com/Handora/find#readme
bug-reports: https://github.com/Handora/find/issues
author: Handora
maintainer: qcdsr970209#gmail.com
copyright: Qian Chen
license: BSD3
license-file: LICENSE
build-type: Simple
cabal-version: >= 1.10
extra-source-files:
ChangeLog.md
README.md
source-repository head
type: git
location: https://github.com/Handora/find
library
exposed-modules:
Lib
RecursiveContents
other-modules:
Paths_find
hs-source-dirs:
src
build-depends:
base >=4.7 && <5
, directory
default-language: Haskell2010
executable find-exe
main-is: Main.hs
other-modules:
Paths_find
hs-source-dirs:
app
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, find
, directory
default-language: Haskell2010
test-suite find-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_find
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, find
default-language: Haskell2010
I add the directory into build dependencies and executable build dependencies. So my question is how to make the System.Directory visible to Intero, so the warnings can disappear.
You can get it to show up by running intero-restart.
There may be a "more correct" way, but this works.