HaskellでHello World
昨年の話になりますが、すごいHaskell本を読んでHaskellのファンになりました。
今回はHaskellの始め方を簡単に紹介します。
すごいHaskellたのしく学ぼう! [ ミラン・リポヴァチャ ] |
Table of Contents
はじめに
Windows上のVirtualboxで稼働しているUbuntuという前提で環境構築します。
また、本記事の内容は以下の公式ドキュメント(2018/05/07時点)とほぼ同じ内容になります。
Haskellのインストール
いきなりIDEを使うと基本が疎かになるため、今回は素のHaskellを使います。
Haskellの前にまずstackをインストールします。
$ curl -sSL https://get.haskellstack.org/ | sh
$ stack --version
Version 1.7.1, Git revision 681c800873816c022739ca7ed14755e85a579565 (5807 commits) x86_64 hpack-0.28.2
プロジェクトの作成
stackでプロジェクトを作成します。
$ stack new haskell-hello
haskell-hello
ディレクトリ配下に以下のエントリが作成されます。
.
├── app
│ └── Main.hs
├── ChangeLog.md
├── haskell-hello.cabal
├── LICENSE
├── package.yaml
├── README.md
├── Setup.hs
├── src
│ └── Lib.hs
├── stack.yaml
└── test
└── Spec.hs
プロジェクトに必要なモノの準備
必要なバージョンのコンパイラ(ghc)などを取得します。
$ stack setup
ghcのダウンロードは回線速度が遅いと時間がかかります。
ビルド
ビルドして実行ファイルを作成します。
$ stack build
ファイルは./.stack-work/install/x86_64-linux/lts-11.7/8.2.2/bin/haskell-hello-exe
というような深い場所に作成されます。
使ってみる
上記ファイルを指定する必要はありません。stack exec
コマンドを使います。
$ stack exec haskell-hello-exe
someFunc
Hello World
出力をHello Worldに変えてみましょう。
エントリポイントのapp/Main.hs
を開きます。
module Main where
import Lib
main :: IO ()
main = someFunc
Lib
のsomeFunc
が呼び出されていますので、src/Lib.hs
を開きます。
module Lib
( someFunc
) where
someFunc :: IO ()
someFunc = putStrLn "someFunc"
putStrLnが第1引数を出力していますので、someFunc
をHello World
に変えてみましょう。
module Lib
( someFunc
) where
someFunc :: IO ()
someFunc = putStrLn "Hello World"
これでstack exec haskell-hello-exe
を実行すると出力が変わっています。
※ なぜbuildナシで結果が変わるのかはまだ分かっていません..
総括
Haskellをインストールし、プロジェクトを作成してHello Worldするところまでやってみました。
今後はHaskellの気になるところをピックアップして飛び飛びに紹介したいと思っています。