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

Haskellでcabal installをはじめて使う人のためのプラクティス

More than 3 years have passed since last update.

追記

stack使おうぜ。
@tanakh さんも日本語で紹介してくれてるし。

対象読者

誰のためか

Haskellで標準パッケージにないライブラリを使ってプログラムを始めて書く人

誰のためでないか

  • Haskellかけない人
  • cabal使ってまぁまぁな規模のHaskellプログラムを作ったことがある人
  • cabal使って実行ファイルのパッケージをインストールしたい人

まえがき

すごいH本とかでHaskellの文法はわかったから、じゃあなんか動くプログラム作ろうってなったとき、PersistentとかParsecとかみたいなcabal installしないといけないパッケージを使いたくなる。
でも、ネットの世界にはまだ古い情報がたくさん残ってて、"cabal hell"とかいう名前で憎まれている依存性解決にともなうエラーを引き起こしがち。

工学部数学科出身のゴルファー@notogawaさんが最近出版された「関数プログラミング実践入門」には7章でしっかりcabalの使い方が書いてあるみたいだったので買って読んだら解決する話だけど、僕が普段やってることをプラクティスな形でメモしておく。

解決方法

mkdir -p anyPath/newDir
cd anyPath/newDir # あたらしいプログラムを作る作業ディレクトリ
cabal sandbox init # cabal hell を引き起こさないように依存性を当該ディレクトリ内で完結させる
cabal init
# なんかいろいろ聞かれるから適当に答える

これでnewDir.cabalが作成されるので、vimとかのエディタで開いて

newDir.cabal
executable newDir
  main-is:             Main.hs  -- main関数があるファイル名
  -- other-modules:       
  -- other-extensions:    
  build-depends:       base >=4.6 && <4.7
                      ,scotty  -- ここに追加のパッケージ名をコンマ区切りで追加していく
  hs-source-dirs:      src     -- `src`ディレクトリ以下に`hs`ファイルをまとめておけるようになる

としたあとでsrcディレクトリ下にMain.hsなど必要なファイルを作成。
その後

cabal install

でなんかパッケージが足りないとかエラーがでたらそのパッケージをHackageで調べてパッケージ名をnewDir.cabalbuild-dependsに追加する。cabal installが通ったら

cabal run # runのあとになんか引数つけたらプログラムに渡される

とか

cabal configure && cabal build && cabal install
./dist/build/newDir/newDir # なんか引数つけてもいいよ
# 一回インストールおわったらその後は下の行だけでOK

とかすれば動く。

Why do not you register as a user and use Qiita more conveniently?
  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
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