Help us understand the problem. What is going on with this article?

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

はじめに

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 ライフを!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした