昨年の話になりますが、すごいHaskell本を読んでHaskellのファンになりました。
今回はHaskellの始め方を簡単に紹介します。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

すごいHaskellたのしく学ぼう! [ ミラン・リポヴァチャ ]
価格:3024円(税込、送料無料) (2018/5/7時点)


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

LibsomeFuncが呼び出されていますので、src/Lib.hsを開きます。

module Lib
    ( someFunc
    ) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"

putStrLnが第1引数を出力していますので、someFuncHello Worldに変えてみましょう。

module Lib
    ( someFunc
    ) where
someFunc :: IO ()
someFunc = putStrLn "Hello World"

これでstack exec haskell-hello-exeを実行すると出力が変わっています。

※ なぜbuildナシで結果が変わるのかはまだ分かっていません..

総括

Haskellをインストールし、プロジェクトを作成してHello Worldするところまでやってみました。
今後はHaskellの気になるところをピックアップして飛び飛びに紹介したいと思っています。