Haskellでgithubに公開されているパッケージを取得してサンドボックスで実行するまで
ポーカーゲームを例にしてGithubからパッケージを取得して実行するまでの手順をまとめる。
作業ディレクトリを作る。
aaa:work03 foo$ mkdir poker aaa:work03 foo$ cd poker
gitからパッケージを取得する。
aaa:poker foo$ git clone https://github.com/nbouscal/poker.hs.git Cloning into 'poker.hs'... remote: Counting objects: 225, done. remote: Total 225 (delta 0), reused 0 (delta 0), pack-reused 225 Receiving objects: 100% (225/225), 37.05 KiB | 0 bytes/s, done. Resolving deltas: 100% (83/83), done. Checking connectivity... done.
取得内容を確認する。poker.cabalがビルドファイル(?)に相当するファイル。
aaa:poker foo$ ls -al ./poker.hs/ drwxr-xr-x 5 foo staff 170 5 15 11:51 . drwxr-xr-x 3 foo staff 102 5 15 11:51 .. drwxr-xr-x 13 foo staff 442 5 15 11:51 .git -rw-r--r-- 1 foo staff 608 5 15 11:51 poker.cabal drwxr-xr-x 4 foo staff 136 5 15 11:51 src
サンドボックスを作る。
aaa:poker foo$ cd poker.hs
aaa:poker.hs foo$ cabal sandbox init
Writing a default package environment file to
/Users/foo/work03/poker/poker.hs/cabal.sandbox.config
Creating a new sandbox at
/Users/foo/work03/poker/poker.hs/.cabal-sandbox
必要な依存パッケージを取得する。(時間がかかり、Stackageにしておけばよかったと後悔する。)
aaa:poker.hs foo$ cabal install --only-dependencies Resolving dependencies... Notice: installing into a sandbox located at /Users/foo/work03/poker/poker.hs/.cabal-sandbox Configuring MonadRandom-0.4.2.3... Configuring base-orphans-0.5.4... Configuring monad-loops-0.4.3... Downloading reflection-2.1.2... Configuring polyparse-1.12... Building base-orphans-0.5.4... Building monad-loops-0.4.3... Building polyparse-1.12... Building MonadRandom-0.4.2.3... Installed monad-loops-0.4.3 Configuring prelude-extras-0.4.0.3... Building prelude-extras-0.4.0.3... Configuring tagged-0.8.4... Installed MonadRandom-0.4.2.3 Building tagged-0.8.4... Configuring uniplate-1.6.12... Installed prelude-extras-0.4.0.3 Configuring reflection-2.1.2... Installed tagged-0.8.4 Building uniplate-1.6.12... Building reflection-2.1.2... Configuring random-shuffle-0.0.4... Installed base-orphans-0.5.4 Building random-shuffle-0.0.4... Configuring semigroups-0.18.1... Installed random-shuffle-0.0.4 Building semigroups-0.18.1... Configuring distributive-0.5.0.2... Installed polyparse-1.12 Configuring cpphs-1.20.1... Installed reflection-2.1.2 Building cpphs-1.20.1... Building distributive-0.5.0.2... Installed distributive-0.5.0.2 Installed uniplate-1.6.12 Installed semigroups-0.18.1 Configuring void-0.7.1... Building void-0.7.1... Installed void-0.7.1 Configuring contravariant-1.4... Building contravariant-1.4... Installed cpphs-1.20.1 Configuring haskell-src-exts-1.17.1... Building haskell-src-exts-1.17.1... Installed contravariant-1.4 Downloading comonad-5... Configuring comonad-5... Building comonad-5... Installed comonad-5 Downloading bifunctors-5.2... Configuring bifunctors-5.2... Building bifunctors-5.2... Installed bifunctors-5.2 Configuring profunctors-5.2... Configuring semigroupoids-5.0.1... Building profunctors-5.2... Building semigroupoids-5.0.1... Installed profunctors-5.2 Installed semigroupoids-5.0.1 Downloading free-4.12.4... Configuring free-4.12.4... Building free-4.12.4... Installed free-4.12.4 Downloading adjunctions-4.3... Configuring adjunctions-4.3... Building adjunctions-4.3... Installed adjunctions-4.3 Downloading kan-extensions-5.0.1... Configuring kan-extensions-5.0.1... Building kan-extensions-5.0.1... Installed kan-extensions-5.0.1 Downloading lens-4.14... Configuring lens-4.14... Building lens-4.14... Installed lens-4.14 Downloading lens-action-0.2.0.2... Configuring lens-action-0.2.0.2... Building lens-action-0.2.0.2... Installed lens-action-0.2.0.2 Installed haskell-src-exts-1.17.1 Downloading derive-2.5.25... Configuring derive-2.5.25... Building derive-2.5.25... Installed derive-2.5.25 Updating documentation index /Users/foo/work03/poker/poker.hs/.cabal-sandbox/share/doc/x86_64-osx-ghc-7.10.3/index.html aaa:poker.hs foo$
Configureする。
aaa:poker.hs foo$ cabal configure Resolving dependencies... Configuring poker-0.1...
ビルドする。
aaa:poker.hs foo$ cabal build Building poker-0.1... Preprocessing executable 'poker' for poker-0.1... [1 of 6] Compiling Poker.Types ( src/Poker/Types.hs, dist/build/poker/poker-tmp/Poker/Types.o ) [2 of 6] Compiling Poker.Utility ( src/Poker/Utility.hs, dist/build/poker/poker-tmp/Poker/Utility.o ) [3 of 6] Compiling Poker.Hands ( src/Poker/Hands.hs, dist/build/poker/poker-tmp/Poker/Hands.o ) [4 of 6] Compiling Poker.Game ( src/Poker/Game.hs, dist/build/poker/poker-tmp/Poker/Game.o ) [5 of 6] Compiling Poker.Betting ( src/Poker/Betting.hs, dist/build/poker/poker-tmp/Poker/Betting.o ) [6 of 6] Compiling Main ( src/Main.hs, dist/build/poker/poker-tmp/Main.o ) src/Main.hs:45:1: Warning: Defined but not used: ‘showBets’ Linking dist/build/poker/poker ...
distディレクトリ配下に実行ファイルができる。
aaa:poker.hs foo$ ls -al ./dist/build/poker/ total 21656 drwxr-xr-x 4 foo staff 136 5 15 11:41 . drwxr-xr-x 4 foo staff 136 5 15 11:41 .. -rwxr-xr-x 1 foo staff 11084988 5 15 11:41 poker drwxr-xr-x 7 foo staff 238 5 15 11:41 poker-tmp aaa:poker.hs foo$ ls -al ./dist/build/poker/poker -rwxr-xr-x 1 foo staff 11084988 5 15 11:41 ./dist/build/poker/poker
実行する。
aaa:poker.hs foo$ ./dist/build/poker/poker Pockets: [K♧ ,7♢ ] Community: [] Bet: 0 Chips: 1500 Check or Bet? Bet Bet how much? 100 Pockets: [9♡ ,5♧ ] Community: [] Bet: 100 Chips: 1500 Fold, Call, or Raise? Raise Raise by how much? 100 Pockets: [Q♤ ,Q♢ ] Community: [] Bet: 200 Chips: 1500 Fold, Call, or Raise? Call Pockets: [K♤ ,8♢ ] Community: [] Bet: 200 Chips: 1500 Fold, Call, or Raise? Call Pockets: [3♢ ,3♡ ] Community: [] Bet: 200 Chips: 1500 Fold, Call, or Raise? Call Pockets: [K♧ ,7♢ ] Community: [] Bet: 200 Chips: 1400 Fold, Call, or Raise? Raise Raise by how much? 200 Pockets: [9♡ ,5♧ ] Community: [] Bet: 400 Chips: 1300 Fold, Call, or Raise? Call Pockets: [Q♤ ,Q♢ ] Community: [] Bet: 400 Chips: 1300 Fold, Call, or Raise? ^[[A Fold, Call, or Raise? Call Pockets: [K♤ ,8♢ ] Community: [] Bet: 400 Chips: 1300 Fold, Call, or Raise? Call Pockets: [3♢ ,3♡ ] Community: [] Bet: 400 Chips: 1300 Fold, Call, or Raise? Call Pockets: [K♧ ,7♢ ] Community: [4♧ ,T♤ ,7♡ ] Bet: 0 Chips: 1100 Check or Bet? Check Pockets: [9♡ ,5♧ ] Community: [4♧ ,T♤ ,7♡ ] Bet: 0 Chips: 1100 Check or Bet?
そもそもポーカーの遊び方を知らないことに気づく。