計算機科学のブログ

コードの整理とプロジェクトのビルド 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
回文か判定する言葉を入力
あいうえおおえういあ
回文である。
%