1. 程式人生 > >Haskell 幾乎無痛苦上手指南

Haskell 幾乎無痛苦上手指南

趁著自己重灌Linux 虛擬機器的機會,把安裝 haskell 的過程記錄一下,順便幫那些還猶豫徘徊在haskell門外的讀者入門。

基本概念:

是一門通用函式式語言,幾乎可以進行任何種類的開發,包括命令列,GUI,資料庫,Web.原始碼可以跨平臺: Linux,Mac, Windows, FreeBSD 等.

函式式變成風格為主,命令式風格為輔,具有嚴格且方便易用的型別系統。型別檢查可以幫助程式設計師在開發過程中避免很多錯誤,並輔助組織程式的結構。

主要有 GHC, hugs 兩種, 還有中 nhc 沒用過就不說了。我們這裡要安裝的是 GHC,以及在 ghc 基礎上的 Haskell Platform。

GHC

全稱: Glasgow Haskell Compiler , 包含一個高效的Haskell編譯器ghc,以及一個類似 python 互動環境的直譯器 ghci 。GHC可以編譯生成高效的可執行程式。

Haskell Platform 是一個打包的haskell 開發環境,包含GHC以及很多第三方開發庫,以及cabal 包管理器等。

Cabal 又是什麼?

簡單說就是 Ubuntu 的  apt-get, Perl 的 cpan , Python 的 easy_install , Ruby 的 gem 。 這麼說明白了吧.

要安裝一個第三方庫,只需要:  cabal install lib-name 就可以了。 幾乎就這麼簡單。

怎麼安裝 Haskell 的第三方庫?

有一個 HackageDB  類似與 Perl 的cpan 的東西,這個列表包含了 Haskell 可用的第三方庫。安裝用同一的方式:  cabal install libname 就可以了。 大部分的庫可以很方便的安裝,不過一些第三方庫會依賴一些特定系統的庫,因此不是總能順利安裝。

===================

安裝過程

(本文基於 Ubuntu 9.10 , 對於其他基於 apt-get 的Linux也適用。)

1. 安裝依賴庫

sudo apt-get install libedit2 libedit-dev freeglut3-dev libglu1-mesa-dev libgmp3-dev

2. 下載 GHC

GHC下載頁面 , 選擇適合的版本下載(x86, x86_64) ,例如下載 x86版本 Linux:

wget http://haskell.org/ghc/dist/6.12.1/ghc-6.12.1-i386-unknown-linux-n.tar.bz2

3. 安裝 ghc

$ tar jxvf ghc-6.12.1-i386-unknown-linux-n.tar.bz2

$ cd ghc-6.12.1

$ ./configure

$ sudo make install

安裝完,測試下:

4. 安裝 Haskell Platform

下載: wget http://hackage.haskell.org/platform/2010.1.0.0/haskell-platform-2010.1.0.0.tar.gz

解壓縮, ./configure , make,   make install

make 的過程可能比較長,要編譯一大堆的第三方庫。

5. Cabal 的配置

安裝完 Haskell Platform 後,會提示使用者進行 cabal update , 就是更新下庫的目錄列表:

$ cabal update

要安裝一個庫,首先在 HackageDB 上找到需要的庫,然後執行 cabal install 即可:

=====================

Hello World

說了這麼久,終於到了我最喜歡的 Hello World 階段了。

GHCi  這個互動環境

haskell 程式既可以解釋執行也可以編譯執行,這在開發過程中是很方便用來除錯的。

> print "hello world"

"hello world"

看上去很簡單,沒啥出奇的東西。下面嘗試些有意思的東西:

編譯程式

下面來寫一個完整的程式,並且編譯成可執行檔案, 首先編寫 hello.hs 檔案,內容如下,用 ghc 編譯。

Haskell 的編輯環境

隆重推薦 Emacs  ,Emacs 中的 Haskell-mode 在編寫程式中,幫助進行縮排、語法高亮等,配合 unicode 顯示,可以得到非常漂亮的效果。

另開一篇詳解emacs 環境吧。

轉自:http://blog.csdn.net/albert_lee/article/details/5469933