Haskellを始めてみた Haskell
前Qiitaのトレンドに上がっていたLazy K プログラムを書くから関数型言語に興味を持ったのが発端でした。
コンビネータ計算に興味を持ち、そこからSKI記法・不動点コンビネータ・ラムダ計算等を渡り読んで楽しくなったので関数型言語を学ぼうと思いました。 ちなみになぜhaskellを選んだかというと、ただ単に勧められたからです。
今現在、Haskellをインストールする際に推奨されているのはstackを使う方法のようです。
homebrewでstack
をインストールします
$ brew install haskell-stack
HIEはhaskell用のLanguage Serverです。(language serverについては → langserver.org) HIEはhomebrewではシステム上インストールできないため、個別にGithubレポジトリから作成してインストールします。
$ git clone https://github.com/haskell/haskell-ide-engine.git
$ cd haskell-ide-engine
$ stack ./install.hs hie-8.6.4
$ stack ./install.hs build-doc-8.6.4
これで実行可能ファイルが~/.local/bin/
以下に作成されるので、~/.local/bin
をPATH
に追加すれば使用することができます。
私はvimmerなので、vim-lspと連携させて使います。
以下の設定をvimrc
に追加します。
以下は自分の他の言語用の設定をそのまま写して使っているものです。
誤りもあるかもしれませんが一応使えています。
augroup MyLsp
autocmd FileType haskell setlocal omnifunc=lsp#complete
if executable('hie')
au User lsp_setup call lsp#register_server({
\ 'name': 'hie',
\ 'cmd': {server_info->['hie']},
\ 'whitelist': ['haskell'],
\ })
endif
au FileType haskell nmap <leader>R <plug>(lsp-rename)
au FileType haskell nmap <leader>D <plug>(lsp-definition)
au FileType haskell nmap <leader>r <plug>(lsp-references)
au FileType haskell nmap <leader>d <plug>(lsp-document-symbol)
au FileType haskell nmap <leader>w <plug>(lsp-workspace-symbol)
augroup end
補完等のLanguage server
周りはvim-lsp
に任せているものの、lint
等はale
に任せているのでale
の設定もします。
let g:ale_linters = { 'haskell': ['hie'], }
本来なら、公式のチュートリアルをやるのが良いと思うのですが、英語でとっかかりづらかったのでHaskell 超入門シリーズを使っています。
書籍は今は何も使っていません。