LoginSignup
5
1

More than 3 years have passed since last update.

【2019版】 Mac に Haskell の環境構築をして stack で helloworld するまで

Last updated at Posted at 2019-12-21

はじめに

Mac で stack を用いて Haskell の hello world をする方法を記載します。

環境

  • Mac
    • brew
    • tree

Haskell とは

Haskell (ハスケル) とは、純粋関数型プログラミング言語です。
高階関数や静的多相型付け、定義可能な演算子、例外処理といった多くの言語で採用されている現代的な機能に加え、パターンマッチングやカリー化、リスト内包表記、ガードといった多くの特徴的な機能を持っています。

参考: wikipedia

Stack とは

Stack は、Haskellプロジェクトを開発するためのクロスプラットフォームプログラムです。

以下の機能があります。

  • 隔離された場所にGHCを自動的にインストール
  • プロジェクトに必要なパッケージをインストール
  • プロジェクトを構築
  • プロジェクトをテスト
  • プロジェクトをベンチマーク

参考: The Haskell Tool Stack

環境構築

brew を使って、 stack をインストールしましょう。

$ brew install stack
$ stack setup  # コンパイラや基本パッケージをインストール

プロジェクトの作成

stack new でプロジェクトを作成できます。

$ cd /path/to/your/workspace
$ stack new helloworld  # helloworld プロジェクトの作成
$ cd helloworld

プロジェクトファイルの確認

tree コマンドで、ディレクトリ構成を見てみましょう。
細かい説明は、割愛します。

$ tree
.
├── ChangeLog.md
├── LICENSE
├── README.md
├── Setup.hs
├── app
│   └── Main.hs
├── hello.cabal
├── package.yaml
├── src
│   └── Lib.hs
├── stack.yaml
├── stack.yaml.lock
└── test
    └── Spec.hs

3 directories, 11 files

プロジェクトの編集

それでは、プロジェクトを編集していきましょう。
主要なファイルは、 app/Main.hssrc/Lib.hs です。

app/Main.hs

app/Main.hs を見ると、Lib が import されており、 main で someFunc が呼び出されています。

module Main where

import Lib

main :: IO ()
main = someFunc

この someFunc は src/Lib.hs に定義されているので、そっちをみてみましょう。

src/Lib.hs の確認

src/Lib.hs をみると、デフォルトではこのようになっているはずです。

-- src/Lib.hs
module Lib
    ( someFunc
    ) where

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

src/Lib.hs の編集

src/Lib.hs を以下のように編集してみましょう!

-- src/Lib.hs
module Lib
    ( someFunc
    ) where

someFunc :: IO ()
someFunc = putStrLn "Hello, world!"  -- 編集

プロジェクトの実行

それではお待ちかね、プロジェクトを実行しましょう。

$ stack build
$ stack exec helloworld-exe   # stack exec [プロジェクト名]-exe
Hello, World!

無事、「Hello, World!」 が表示されましたね!

終わりに

いかがだったでしょうか?
おそらくこれが、 Haskell と Stack を用いた最速の Hello, World かと思われます。

これで、皆さんも良い Haskell ライフを!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1