e-mon

備忘録

Haskell事始め#1

Pascalのプログラミング文法を学ぶ機会があり、丁度良いのでこれを機に何か触れたことのない言語でPascalコンパイラを作成しようと、 Haskellに手をだす事に相成りました。

ということで、HaskellPascalコンパイラを作成することを最終目標に、まずはHaskellチュートリアルを進めて行きたいと思います。

環境構築

環境:OS X 10.9.3

GHCコンパイラを使おうと思い、おもむろにbrew install ghcすると、haskell-platformをインストールしたほうがいいよ、というようなメッセージが出たので(確か)、続けて、

brew isntall haskell-platform

多分、後者だけで問題無い

$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> putStrLn "Hello World!"
Hello World!
Prelude> 

うん、動いてる。問題無い。

続けて、VimHaskellを書く環境を整えます。 .vimrcに、とりあえず以下の3つのプラグインを追加

" for Haskell {{{
"便利なghcmodなるコマンドをvimから便利に使うためのプラグイン
NeoBundle 'eagletmt/ghcmod-vim'
"補完用
NeoBundle 'eagletmt/neco-ghc'
"インデントを賢くしてくれる
NeoBundle 'kana/vim-filetype-haskell'
"}}}

Haskellのパッケージシステムcabalghc-modはインストールできるらしいので、

$ cabal update
$ cabal install ghc-mod
$ echo 'export PATH=$PATH:~/.cabal/bin' >> ~/.bash_profile
$ source ~/.bash_profile

こんなかんじで導入してパスを通す。

で、とりあえずは完了。

この作業中、neco-ghsのエラーが発生

module Main where
import System.Enviroment

System.Enviromentはミスタイプで、こんなモジュールは存在しないんだけど、 この状態で他の行で補完を発生させると、以下のようなエラーが出る。

Error occured in source's gather_candidates()!
function neocomplete#handler#_do_auto_complete..neocomplete#complete#_get_results..neocomplete#complete#_set_results_words..199..necoghc#get
_complete_words..necoghc#browse..<SNR>176_ghc_mod_caching_browse..<SNR>176_ghc_mod, 行 6
Vim(if):E684: リストのインデックスが範囲外です: 0
Source name is ghc

こういう時、プラグインのソース読めないのは本当に不便だなーと思いつつ、ソースを見てみるけどやっぱりわからない。

今回は、以下のようなHello,Worldなものを書いて終了。次回から本格始動予定。

module Main where
import System.Environment

main :: IO()
main = do
  args <- getArgs
  putStrLn ("Hello , " ++ args !! 0)
$ ghc hello.hs
$ ./hello.hs e-mon
Hello,e-mon
$