コードの整理とプロジェクトのビルド stackを使ってプロジェクトをビルドする 実行、コマンド、YAMLファイル
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT6(コードの整理とプロジェクトのビルド)、LESSON 35(stackを使ってプロジェクトをビルドする)、35.5(練習問題)Q35-1の解答を求めてみる。
本著ではpalindrome-checker.cabalファイルの設定を書き換えてたけど、package.yamlファイルの設定を書き換えても上手くいくみたい。というか、stack buildコマンドを実行するときpackage.yamlファイルを書き換えてないとpalindrome-checker.cabalファイルの内容がpackage.yamlの内容で上書きされるみたい。
以下書き換えたYAMLファイルの内容と、実際にプロジェクトをビルドして実行してみた結果。
stack setupコマンドはエラーが出て、メッセージ通りに記述していってもまた新しいエラーメッセージが表示されたから、今回はstack buildコマンドが上手くいったことでよしとすることに。
コード
palindrome-checker.cabal/package.yaml
name: palindrome-checker
version: 0.1.0.0
github: "githubuser/palindrome-checker"
license: BSD3
author: "kamimura"
maintainer: "example@example.com"
copyright: "2021 kamimura"
extra-source-files:
- README.md
- ChangeLog.md
# Metadata used when publishing your package
# synopsis: Short description of your package
# category: Web
# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/githubuser/palindrome-checker#readme>
dependencies:
- base >= 4.7 && < 5
- text
library:
source-dirs: src
executables:
palindrome-checker-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- palindrome-checker
tests:
palindrome-checker-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- palindrome-checker
default-extensions: OverloadedStrings
入出力結果(Terminal, Zsh)
% stack setup
The GHC located at /Users/…/.stack/programs/x86_64-osx/ghc-8.10.7/bin/ghc-8.10.7 failed to compile a sanity check. Please see:
http://docs.haskellstack.org/en/stable/install_and_upgrade/
for more information. Exception was:
Received ExitFailure 1 when running
Raw command: /Users/…/.stack/programs/x86_64-osx/ghc-8.10.7/bin/ghc-8.10.7 /private/var/folders/2y/nfx9b0d9267fxn7rhzybw2xh0000gn/T/stack-sanity-check-0aacb1e7c7b9e903/Main.hs -no-user-package-db
Run from: /private/var/folders/2y/nfx9b0d9267fxn7rhzybw2xh0000gn/T/stack-sanity-check-0aacb1e7c7b9e903/
Standard output:
Loaded package environment from /Users/…/.ghc/x86_64-darwin-8.10.7/environments/default
[1 of 1] Compiling Main ( /private/var/folders/2y/nfx9b0d9267fxn7rhzybw2xh0000gn/T/stack-sanity-check-0aacb1e7c7b9e903/Main.hs, /private/var/folders/2y/nfx9b0d9267fxn7rhzybw2xh0000gn/T/stack-sanity-check-0aacb1e7c7b9e903/Main.o )
Standard error:
/private/var/folders/2y/nfx9b0d9267fxn7rhzybw2xh0000gn/T/stack-sanity-check-0aacb1e7c7b9e903/Main.hs:1:1: error:
Could not load module âDistribution.Simpleâ
It is a member of the hidden package âCabal-3.2.1.0â.
You can run â:set -package Cabalâ to expose it.
(Note: this unloads all the modules in the current scope.)
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import Distribution.Simple
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
% stack install distribution
Error: While constructing the build plan, the following exceptions were
encountered:
In the dependencies for distribution-1.1.1.0:
containers-0.6.5.1 from stack configuration does not match ==0.5.* (latest
matching version is 0.5.11.0)
random-1.2.0 from stack configuration does not match ==1.1.* (latest
matching version is 1.1)
needed since distribution is a build target.
Some different approaches to resolving this:
* Set 'allow-newer: true'
in /Users/…/.stack/config.yaml to ignore all version constraints and build anyway.
* Recommended action: try adding the following to your extra-deps
in /Users/…/palindrome-checker/stack.yaml:
- containers-0.5.11.0@sha256:1af9da3baaddc4f4aaea016b07d4c38ddbf702ce3f0df31120531950837996b8,17308
- random-1.1@sha256:7b67624fd76ddf97c206de0801dc7e888097e9d572974be9b9ea6551d76965df,1777
Plan construction failed
% stack build
palindrome-checker-0.1.0.0: unregistering (local file changes: package.yaml)
palindrome-checker> build (lib + exe)
Preprocessing library for palindrome-checker-0.1.0.0..
Building library for palindrome-checker-0.1.0.0..
Preprocessing executable 'palindrome-checker-exe' for palindrome-checker-0.1.0.0..
Building executable 'palindrome-checker-exe' for palindrome-checker-0.1.0.0..
palindrome-checker> copy/register
Installing library in /Users/…/palindrome-checker/.stack-work/install/x86_64-osx/e67eb8948c5ca5b05145d327b42dbaf36b07cbc5c162184cfcce5372fdfb9a45/8.10.7/lib/x86_64-osx-ghc-8.10.7/palindrome-checker-0.1.0.0-3R7ppxjAjvo6K9JkXgTIAf
Installing executable palindrome-checker-exe in /Users/…/palindrome-checker/.stack-work/install/x86_64-osx/e67eb8948c5ca5b05145d327b42dbaf36b07cbc5c162184cfcce5372fdfb9a45/8.10.7/bin
Registering library for palindrome-checker-0.1.0.0..
% stack exec palindrome-checker-exe
回文か判定する言葉を入力
Ab
回文ではない。
% stack exec palindrome-checker-exe
回文か判定する言葉を入力
Aba
回文である。
% stack exec palindrome-checker-exe
回文か判定する言葉を入力
あいうえお
回文ではない。
% stack exec palindrome-checker-exe
回文か判定する言葉を入力
あいうえおおえういあ
回文である。
%