Update in Nov 2018:
Install Haskell Platform with
sudo apt install haskell-platform
, which include ghc, cabal, and stack.
Or only install ghc, cabal and hoogle with sudo apt install ghc cabal-install hoogle
.
Verified on Ubuntu 16.04 Server.
Written in 2011:
On Linux
Installation
sudo apt-get install aptitude
sudo aptitude install haskell-platform
verified on Linux Mint 14 Xfce.
Install hoogle (offline documentation of Haskell):
cabal update
cabal install alex happy && cabal install hoogle
Ref: http://stackoverflow.com/questions/11753979/cabal-install-hoogle-error
Very slow, you can use the online version;
modify ~/.cabal/conifg:
remote-repo: old.hackage.haskell.org:http://old.hackage.haskell.org
Ref:
http://hackage.haskell.org/
http://www.haskell.org/haskellwiki/Hoogle
$ cabal update
$ cabal install hoogle
$ ~/.cabal/bin/hoogle data # create database
$ ~/.cabal/bin/hoogle map # search "map"
Save the following lines to ~/.ghci to enable you use ":hoogle" or ":doc" to get doc info in ghci:
:def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\""
:def doc \x -> return $ ":!hoogle --info \"" ++ x ++ "\""
Sample Project
Based on http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_program;
-
create home folder:
take haq
; -
create source file "Haq.hs";
-
stick it in version control:
git init git add Haq.hs git commit -m "add first source"
-
add a build system:
cabal init
; -
modify .cabal file: add "Haq.hs" after "-- main-is:" and uncomment this line(delete "--"); If you donot specify the license type, comment out the line "license-file";
-
cabal update
-
cabal install --prefix=
--user -
run app:
bin/haq me
under, or run app in-place (under current directory): dist/build/haq/haq me
verified on Haskell Platform 7.4.2, Linux Mint 14:
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.2
Miscellaneous
-
ghc: compiler
-
ghci: interactive shell;
-
runghc: run haskell script without compile
-
Compile haskell source file to executable:
$ ghc --make <FileName>.hs -o <ExeFileName>
for example:
$ ghc --make Test.hs -o test
GHCi usage
-
get current working directory: :!pwd (you can use :!
to run any shell command); -
turn on/off type declaration: :set +t, :unset +t
-
get type information of a object: :t
-
define local variable and show bindings:
let x = 3, :show bindings
-
load module: :m +Data.Ratio
-
change cwd: :cd
-
load file: :l
-
quit ghci shell: :q
-
get function doc: :i
Syntax
-
comments: --
-
comparison: /=, >, <
-
boolean operation: not, || , &&
-
Haskell requires type names to start with an uppercase letter, and variable names must start with a lowercase letter.
-
To construct a rational number: 11 % 29 (after ":m +Data.Ratio")
-
values in "where", "case" and "let" clause must keep the SAME indentions;
Shell Interaction Library
shqq, shelly
Ref: Shelly: Write your shell scripts in Haskell
On Windows
Use sublime text 2 as text editor, use cmder as console.
In Sublime Text 2 main menu: [Preferences -> Settings -- User], remove "Vintage" from "ignored_packages" to enable Vintage.
Use intero as haskell plugin for vim
When open a .hs file in neovim aftering installed the plugin parsonsmatt/intero-neovim, the intero compiling failed:
...
Logs have been written to: /home/leo/.stack/global-project/.stack-work/logs/haskeline-0.7.4.3.log
$ cat /home/leo/.stack/global-project/.stack-work/logs/haskeline-0.7.4.3.log
/usr/bin/ld.gold: error: cannot find -ltinfo
collect2: error: ld returned 1 exit status
$ /usr/bin/ld.gold -ltinfo --verbose
Attempt to open //lib/x86_64-linux-gnu/libtinfo.so failed
Google libtinfo.so ubuntu
, find libtinfo-dev
:
$ sudo apt install libtinfo-dev
libtinfo-dev : Depends: libtinfo5 (= 6.0+20151024-2ubuntu1) but 6.0+20160213-1ubuntu1 is to be installed