Homebrew で Haskell Stack をインストールする

過去の記事で WindowsHaskell 環境を構築したが、Mac でも環境を構築してみた際の手順をまとめてみる。

gumfum.hatenablog.com

環境

  • macOS Monterey 12.6.3
  • Homebrew 4.2.2

インストール

brew install stack

これだけ。haskell-stack を指定しても同じものがインストールされる*1

brew install haskell-stack

stack コマンドのパスを確認してみると haskell-stack の名前でディレクトリが作成されていることがわかる。

% which stack
/usr/local/bin/stack

% ls -al /usr/local/bin/stack 
lrwxr-xr-x  1 gumfum  admin  40  1  5 14:24 /usr/local/bin/stack -> ../Cellar/haskell-stack/2.13.1/bin/stack

stack setup コマンドの実行が必要との情報もあったが、私が Homebrew 経由でインストールした場合には以下のようなメッセージが表示されたため、セットアップなどは必要なくそのまま使うことができそうである。
Haskell コンパイラ ghc や、インタプリタ ghci などを利用したい場合は、それぞれ stack を頭につけて実行する。

% stack setup
Stack will use a sandboxed GHC it installed. To use this GHC and packages outside of a project, consider using: stack ghc, stack ghci, stack runghc, or stack exec.

ghci を使う

stack ghci で対話環境を起動できる。メッセージがいくつか出てくるが、特に設定はしなくても使用できる。

% stack ghci

Note: No local targets specified, so a plain ghci will be started with no package hiding or package options.

( ... 中略 ... )
      
Prelude> putStrLn "Hello World!"
Hello World!
Prelude> sum [1..100]
5050

モジュールを import して使うこともできる。

Prelude> import Data.List
Prelude Data.List> nub [1,2,3,4,5,6,1,2,3,4]
[1,2,3,4,5,6]

終了する場合は :q もしくは :quit を実行するか、control + D を入力する。

Prelude> :q
Leaving GHCi.

サンプルプロジェクトを作る

stack new でサンプルプロジェクトが作成できる。

% stack new haskellTestProject

ディレクトリ構造は以下のようになっており、someFunc と表示されるだけのコードが作成される。テストコードも用意されているが中身は実装されていないようである。

% tree haskellTestProject
haskellTestProject
├── CHANGELOG.md
├── LICENSE
├── README.md
├── Setup.hs
├── app
│   └── Main.hs
├── haskellTestProject.cabal
├── package.yaml
├── src
│   └── Lib.hs
├── stack.yaml
└── test
    └── Spec.hs
% cat haskellTestProject/app/Main.hs 
module Main (main) where

import Lib

main :: IO ()
main = someFunc
% cat haskellTestProject/src/Lib.hs 
module Lib
    ( someFunc
    ) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"
% cat haskellTestProject/test/Spec.hs 
main :: IO ()
main = putStrLn "Test suite not yet implemented"

このままビルドおよび実行することができる。実行時には プロジェクト名-exe を指定する*2。実行すると someFunc と出力されることが確認できた。

% cd haskellTestProject
% stack build
( ... 中略 ... )
Registering library for haskellTestProject-0.1.0.0.

% stack exec haskellTestProject-exe   
someFunc

環境構築としては一旦ここまで。

*1:どちらかというとhaskell-stackがパッケージの正式名称で、stackが略称として登録されている

*2:ビルド時の設定は haskellTestProject.cabal ファイルに記載があるようである