Haskellの開発環境構築
先ほど決意表明をしました.
教本である「関数プログラミング実践入門」ではHaskellを扱うので環境構築をしたので,メモと同朋のためにも記録します.
環境
- Mac OSX 10.11.2 El Capitan
- Haskell
- Haskell Platform 7.10.3
- Vim
Haskellのインストール
Haskellを使うのに,「Haskell-Platform」というのをインストールします. Haskellのオフィシャルからインストールパッケージをダウンロードします.
自分がインストールしたのは,先述したバージョンです.
Vimの環境設定
Vimを普段使いしています.けれども,いわゆる「なんちゃってVimmer」(未満)です. (凝りだすと目的が変わってしまうから,という理由をつけてます;)
ググッて,参考にさせていただいたサイトです.
Aruneko的びぼーろく - [Vim]うまいことHaskellを書いてみたい
NeoBundleの改善による変更のため,一部うまくいきませんでした.内容が被る部分も含めて以下に記録しておきます.
Haskell-Platformをインストールすると,同時にインストールされているcabalというパッケージマネージャ(Rubyでいうところのgem)で,「happy」と「ghc-mod」をインストールします. VimでHaskellするのに必要なのが「ghc-mod」だそうです. 「happy」は詳しく調べていないですが,Haskellのコンパイルをよしなにしてくれるとか.
$ cabal install happy $ cabal install ghc-mod
自分は普段(仕事では)オフラインの環境でVimを使っていたりするので,NeoBundleは使っていなかったですが,「とりあえず環境作らなきゃ」なので使用させて頂きました.
$ mkdir -p ~/.vim/bundle $ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
VimのHaskellプラグインのインストールをするようNeoBundleを使うのに.vimrcに追記しました. 追記した分だけ晒します. なんちゃってVimmerなので,他と干渉したりとか,設定カブってるとかよくわかりませんが,動作しました.
set nocompatible filetype plugin indent off if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim endif call neobundle#begin(expand('~/.vim/bundle/')) NeoBundleFetch 'Shougo/neobundle.vim' NeoBundle 'kana/vim-filetype-haskell' NeoBundle 'eaglemt/ghcmod-vim' call neobundle#end() filetype plugin indent on
Haskellの動作確認用コード
Haskellのとりあえずサンプルコードです. 拡張子は「foo.hs」のように「hs」とします.
import Text.Printf main::IO() main = do printf "Hello World\n"
Haskellを実行してみる(GHCi)
GHCiで実行してみます. GHCは,「Glasgow Haskell Compiler」だそうです.(スコットランド生まれなのでしょうか?ラグビーW杯2015おもしろかったですね) 「i」はインタープリタか,インタラクティブの「i」だと思います.
ターミナルから実行する.
$ ghci GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help Prelude> :l foo.hs [1 of 1] Compiling Main ( foo.hs, interpreted ) Ok, modules loaded: Main. *Main> main Hello World *Main>
インタープリタ中のコマンド
「*Main> main」は,ソースに書いたmain関数を実行しています.(という理解を現在時点でしています)
Haskellを実行してみる→できなかった(GHCコンパイラと実行コマンド)
コンパイル,実行,とそれぞれコマンドで実行できるそうです.ですが,現況実行できていません.
$ ghc --make foo $ ls foo foo.hs foo.hi foo.o $ runghc foo
とりあえず,今日はここまで.
(以下,追記@2016-01-10)
先述のVimの環境構築の際にお世話になりましたArunekoさまにコメント頂き,実行することができました. 僕の参考書籍(「関数プログラミング実践入門」)の読みが浅かったです.
Haskellを実行してみる(runghcで実行)
「runghc」はHaskellのソースコードをスクリプト実行するコマンドです.
$ runghc foo.hs Hello World!
Haskellを実行してみる(GHCコンパイラを使って実行)
「ghc」はHaskellのソースコードをコンパイルし,実行バイナリを作成します.
$ ghc --make foo $ ./foo Hello World!
やったね!