Skip to content
superfunc edited this page Nov 4, 2014 · 20 revisions

Idris on Debian jessie

[updated in may 2014 for idris 0.9.12 / ghc 7.6 from debian]

jessie is the codename of Debian's current testing release, and it is a good starting point to install Idris: Whereas wheezy, Debian's current stable release will get more and more outdated as time passes, jessie's packages are updated regularly and therefore more recent, usually only a few weeks behind sid (Debian's unstable release). This also makes Idris' installation easier, as e. g. llvm-3.3-dev, a requirement for Idris (cf. below) is already available on jessie. Being behind sid has the advantage nevertheless of avoiding the adventures and possible pitfalls of a bleeding edge release.

I will describe the installation of Idris in a virtual Haskell environment: hsenv, relying in great part on Debian packages.

Having installed a basic Hakell environment, and in particular cabal from Debian (your milage may vary, of course):

# apt-get install ghc
# apt-get install haskell-platform
# apt-get install cabal-install
# apt-get install libgmp-dev

(These commands can be shortened, as haskell-platform depends on ghc e. g.) I cabal install only one single package: hsenv system wide in my home dir i. e.

$ cabal update
$ cabal install hsenv

Further packages I install either from Debian or from within my isolated Haskell environment. Anyway, a few more Debian packages are needed:

# apt-get install llvm-3.3-dev
# apt-get install libghc-terminfo-dev
# apt-get install pkg-config
# apt-get install libgc-dev
# apt-get install build-essential
# apt-get install libghc-llvm-dev

A virtual env is created easily:

$ mkdir foo
$ cd foo
$ hsenv

Activate this environment with

$ source .hsenv/bin/activate

(as described in the output of issuing the command hsenv above, not shown here). This will give you an indication of your env being activated at the prompt:

[hsenv]$

By the way, as I use hsenv quite a lot, I have shortcuts for activating (a) and deactivating (d) defined in my .bashrc:

a()
{
    if [ -d "$(find . -maxdepth 1 -name ".hsenv")" ]; then
        echo "activating hsenv..."
        source ./.hsenv/bin/activate
    else
        echo "not a virtual hs env"
    fi
}


d()
{
    if [  -d "$(find . -maxdepth 1 -name ".hsenv")" ]; then
        echo "deactivating hsenv..."
        deactivate_hsenv
    else
        echo "not a virtual hs env"
    fi
}

This should be enough to install Idris:

[hsenv]$ cabal update
[hsenv]$ cabal install alex
[hsenv]$ cabal install idris

cabal-dev instead of hsenv should do just as well. Likewise cabal sandboxes, which I haven't tried yet however, as my Debian installed version of cabal (v 1.16.0) doesn't provide them yet.

If everything goes well, you should be able to just call idris from within your activated env

[hsenv]$ idris

The packages installed this way can be seen in .hsenv/cabal/lib. Many of those are available for Debian as well in recent enough versions, and the more I install from Debian, the less will cabal have to do, besides I will automatically get Debian updates etc. So, while not strictly necessary, I also install from Debian before cabal installing idris these packages (install each one e. g. with # apt-get install )

libghc-ansi-terminal-dev
libghc-ansi-wl-pprint-dev
libghc-blaze-builder-dev
libghc-blaze-html-dev
libghc-cereal-dev
libghc-cpphs-dev
libghc-data-default-class-dev
libghc-dlist-dev
libghc-exceptions-dev
libghc-fingertree-dev
libghc-free-dev
libghc-haskeline-dev
libghc-keys-dev
libghc-newtype-dev
libghc-pointed-dev
libghc-profunctors-dev
libghc-reducers-dev
libghc-reflection-dev
libghc-utf8-string-dev
libghc-void-dev
libghc-xml-dev

In this way the list of packages that ghc has to compile (are built by cabal) gets much shorter. It is a good idea to dry-run the cabal install command, before actually running it, i. e. run

[hsenv]$ cabal install --dry-run -v idris

then install a few of the packages above, (dry) run again, and see how the list of packages to be installed by cabal gets shorter. I. e. you might want to jump back and forth between dry running cabal install and apt-get installing a few packages, before actually installing idris.

Anyway, the list above is what I used in may 2014 / with ghc 7.6 You should be able to verify in a fresh hsenv, that indeed the list of cabal built packages gets shorter this way.

It should be pointed out though: some Debian Haskell packages installed this way, will just not be used, as Idris requires newer version than the ones provided by jessie, e. g.

# apt-get install libghc-aeson-dev
# apt-get install libghc-data-lens-dev

will just be ignored in the Idris installation. But having them installed from Debian, doesn't hurt (impede) installation any more (as used to be the case for older versions of Idris/cabal)

Idris on debian wheezy

This excellent guide entails how to get a recent version of Haskell on debian wheezy: http://www.extellisys.com/articles/haskell-on-debian-wheezy

This is necessary for building the most recent version of idris without pulling ones hair out. Once this has been done, there is one more dependency needed to link idris, this can be installed via the following command

sudo apt-get install libtinfo-dev

You may also need to edit your .bashrc to reflect the location of our new shiny binaries. We can do this by adding the following to our file:

export PATH=$PATH:/usr/local/opt/ghc-7.8.3-x86_64-min/bin

Now, after restarting bash or reloading the profile, you should see this upon running these commands:

$  cabal --version
cabal-install version 1.20.0.3
using version 1.20.0.0 of the Cabal library 
$  ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3

Next, we simply install idris via cabal

cabal update
cabal install idris

Not so soon after, and we're done :).

Clone this wiki locally