この記事の目的
- とりあえず、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!
参考ページ
以下の超有用ページたちが超ヘルプフルでしたので、詳細は以下をご覧ください。