LoginSignup
7
1

More than 3 years have passed since last update.

初めて使う Mac にとりあえず Haskell を動かせる環境を構築してみた

Posted at

この記事の目的

  • とりあえず、Mac はあまり使ったことがないしターミナルのコマンドもよくわからん、でもとりあえず Haskell 書いてみたい、でもでも入門以前に環境構築でつまづきそう、という、いるのかいないのかわからない読者層をターゲッティングしながら、いずれにしてもあまり難しく考えずやりたいことを短時間でやれるようにこの記事を書きました。(自分の備忘でもあります)
  • この記事は「参考ページ」に示した超有用な記事を超絶大幅に参考にさせていただいております(むしろ、これらの記事を見ながら行った作業の実施記録と言っても過言ではありません)。

背景

  • 今までは Windows で ghci を使っていた
  • 会社から Mac が支給されたので、とりあえず Mac でも Haskell を書いてみたい
  • なにもわからない

環境

  • OS: macOS Mojave バージョン10.14.5
  • MacBook Pro (Retina, 15-inch, Mid 2015)

Stack というもの

  • Haskell を書くのに便利な Stack というツールがあるらしい
  • とりあえずインストールしてみる

インストール

$ curl -sSL https://get.haskellstack.org/ | sh

パスを通す

$ export PATH=~/.local/bin:$PATH
$ echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
  • 参考にしたサイトに書いてあるとおり、ここで $ stack update をしておく。
$ stack update
$ stack --version
Version 2.1.3, Git revision 0fa51b9925decd937e4a993ad90cb686f88fa282 (7739 commits) x86_64 hpack-0.31.2
  • インストール完了!(これでうまくいってるのか、次に Hello World するまでは半信半疑だった。。)

Hello World してみる

プロジェクトを作ってみる

stack new my-project
cd my-project
stack setup
stack build
  • ふーんという感じ。よくわからないが進めていく。
  • app/Main.hs を見てみると
app/Main.hs
module Main where

import Lib

main :: IO ()
main = someFunc
  • someFunc ってなんだ?
  • つづいて src/Lib.hs を見てみる。
src/Lib.hs
module Lib
    ( someFunc
    ) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"
  • これがメインの処理らしい。
  • "someFunc" を書き換えてみれば Hello world できそう。
src/Lib.hs(書き換え後)
module Lib
    ( someFunc
    ) where

someFunc :: IO ()
someFunc = putStrLn "Hello Haskell World!"

実行してみる

my-projectディレクトリ内にて
$ stack runghc app/Main.hs

エラー発生

app/Main.hs:3:1: error:
    Ambiguous module name ‘Lib’:
      it was found in multiple packages:
      libiserv-8.6.3 my-project-0.1.0.0
  |
3 | import Lib
  | ^^^^^^^^^^

エラー発生!!
Lib というモジュールが複数のパッケージにあるらしい。

解決策

  • 調べたところ、 runghc するときに --isrcオプションを付ければいいらしい。
my-project内で
stack runghc -- -isrc app/Main.hs

結果

Hello Haskell World!

参考ページ

以下の超有用ページたちが超ヘルプフルでしたので、詳細は以下をご覧ください。
- 本気で Haskell したい人向けの Stack チュートリアル
- Stack を使って Haskell の Hello World をやってみる
- How to import adjacent module when running .hs file as script

7
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
7
1