yesod-ghc-wrapper issue when running 'yesod devel' for first time - haskell

I have ghc in my path, have set up yesod init and cabal built it.
Now, when I 'yesod devel' I get :
cabal: Cannot find the program 'ghc' at 'yesod-ghc-wrapper' or on the path
ghc IS on the path!
thanks

I've seen that if the path to the yesod bin directory under cabal is not in my PATH.
Try changing your PATH to include the yesod directory and see if it goes away.
For example, in my .bash_profile I have:
export PATH=$PATH:/Users/username/Library/Haskell/ghc-7.4.2/lib/yesod-bin-1.2.2/bin/

Related

Cabal project: show full path to files

I'm using cabal 3.2.0.0. I've created a cabal.project file which points to many submodules. When I run cabal build all and there is an error in a submodule, the path to the file with an error is shown relative to the cabal file of the submodule. This is very inconvenient with vim's :make. Is there a way to turn the path to relative from .project file? Or at least into absolute path.
Well, I've not found found how to do it with cabal, but I wrote a small vim plugin that band-aid fixes this problem.
https://github.com/d86leader/vim-config/blob/ac1651544b5c61f3dfa4f19a00946efb49056793/autoload/hs_cabal.vim

Cargo path setup for rust-racer

I just installed racer using cargo. After installing it say this:
Installing /home/karthik/.cargo/bin/racer
warning: be sure to add `/home/karthik/.cargo/bin` to your PATH to be able to run the installed binaries
How do I do this? Googling didn't help. Also, Should I be setting a PATH variable for cargo bin as well?
Edit: OS is Ubuntu 14.04 and I have super user access
You have to add the cargo bin path to your PATH variable and set the RUST_SRC_PATH in .profile or .bash_profile.
Related unix.stackechange question
There are two steps:
(1) Add the Cargo bin to your PATH variable. You can run $ whereis cargo to find the bin path, and then do $ sudo -H gedit /etc/environment where you can add that new path section to your current PATH variable. You will need to save and close the file (and you can ignore the error message in the terminal during the saving portion) in order for it to take effect.
(2) Run $ rustup component add rust-src to download the necessary Rust source files for you.
At this point Racer should work properly.
This is based on the answer here.

installed ghc from PPA 'no such file or directory'

I added GHC-7.10.1 from this ppa:hvr/ghc # https://launchpad.net/~hvr/+archive/ubuntu/ghc
However I can't seem to find ghc from the command line. any suggestions?
me#ubuntu:~/Documents/haskell$ ghc
bash: /usr/bin/ghc: No such file or directory
As the linked page describes
The packages install into /opt/ghc/$VER/ so in order to use them, the easiest way is to bring a particular GHC version into scope by placing the respective /opt/ghc/$VER/bin folder early into the PATH environment variable.

Using HLint.hs file in EclipseFP

Is it possible to use HLint.hs file to customize HLint messages in EclipseFP?
I tried adding a HLint.hs file in the project root containing:
import "hint" HLint.HLint
ignore "Use camelCase"
but it has no effect:
Update:
For HLint to pick up the changes in the HLint.hs file it is required to run Cabal install dependencies by right clicking on the project:
EclipseFP runs HLint passing the project folder as the working directory, so a HLint.hs file there will be taken into account. HLint only runs when needed, so after putting the HLint.hs file or modifying it you need to touch your source files so they get rebuilt again and HLint runs on them again.

Run HAppStack app withot cabal

I'm trying out HAppStack. I installed HAppStack and created a project: happstack new project web. New folder 'web' created with project guestbook under it. So now I want to run it. The only way I could do it is run cabal install. But I want to run my app without installing with cabal! Executing run.sh errors: Could not find module 'Paths_guestbook'. How can I do it?
Edit:
In general, is there a way to run HAppStack app without rebuild like in Snap?
In general, you can always build Cabal projects without installing simply by doing:
$ cabal configure
$ cabal build
The resulting executable will usually be called dist/build/<project>/<project>.
The specific error you're getting is because the code must be built with Cabal to get the Paths_guestbook module, which will contain information about the location of data files used by it. (It may be the case that it's unable to find these data files if you run the executable without installing it; in that case, you'll need a more elaborate solution, such as cabal-dev.)
(I'm not a Happstack user, so I don't know if there's an official way to accomplish this, but this should work for basically any Cabal-based project in general. The repository shows that run.sh was last modified in 2009, so I suspect it has simply bit-rotten. It doesn't do anything special, though, so cabal build should work just fine.)
SHORT VERSION:
The run.sh seems to be missing an include paramater. Modify it to look like this:
#!/bin/sh
runghc -isrc -isrc-interactive-only src/Main.hs
I have update the run.sh in darcs to include this change.
LONG VERSION:
Normally that flag is not needed for Happstack applications. You can usually just do, runhaskell Main.hs. But in that particular example the Main.hs explicitly imports:
import Paths_guestbook (version)
which is used in the versionInfo function so that the server can report its own version number. Though version number in src-interactive-only is hardcoded and will generally be out of date. So it is only correct if you actually build with cabal.
The Paths_guestbook module is normally created automatically when cabal build is run. So, another fix would be to change the run.sh to:
#!/bin/sh
runghc -isrc -idist/build/autogen src/Main.hs
And run cabal configure && cabal build once. After that you will be able to use run.sh (until you do a cabal clean).
Another option would be to set a CPP flag in the .cabal file, and only import Paths_guestbook when the application is being built via cabal.
For example in the happstack.com source code:
http://patch-tag.com/r/stepcut/happstackDotCom/snapshot/current/content/pretty/Main.hs
In line 40 (or so) you will see an #ifdef __CABAL__. happstack.com needs to be able to know where to find the static content such as .css files. When doing runhaskell Main.hs in the local directory, it will look for the files in a sub-directory of the local directory. If you do cabal install it will instead look whever cabal installs the data files. Or, you can override the default location with command-line arguments. (Which is what the debian packaging for that app does).
Unfortunately, the happstack new project command is somewhat bitrotten because the author became a parent and has not had time to work on it in a long time. It will likely be removed from the upcoming Happstack release in order to reduce confusion.
In order to be truly useful, I think the command needs to prompt for a bunch of values and then generate a new project from a set of templates. Similar to how 'cabal init' works. But currently, no one has volunteered the time to make that happen.
To see changes to your source appear automatically with out restarting the server you can use the happstack-plugins library. There is an screencast of it here:
http://happstack.blogspot.com/2010/10/recompile-your-haskell-based-templates.html

Resources