haskell-jp / beginners #12

@manami2622 has joined the channel
@escapegoat173 has joined the channel
@usabarashi has joined the channel
@tcokygets has joined the channel
早速質問なんですが
「stack hoogle --setup」
をしようとしても全くうまくいきません
助けてください……
あと
「stack runghc hoge.hs」
が全く成功しません……
どうやらstackを実行するたびに何かしらのエラーが起きているようです
実行したときに何が出力されたか、貼り付けていただきたいです。
あまりに長いという場合でもSlackが適当にファイルアップロードに切り替えてくれるはずです。
Error: Error encountered while configuring GHC with
/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/configure --prefix=/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/
run in /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/

The following directories may now contain files, but won't be used by stack:
- /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/
- /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/

For more information consider rerunning with --verbose flag
https://github.com/commercialhaskell/stack/issues/3741 と少し似てますね。うまく行くか分かりませんが、とりあえず stack setup --reinstall してみましょうか。
これもエラーメッセージは似て非なるようですが、libgmpが入ってないからってのはあり得ますね。
Mac使わないので分かりませんが... https://matsubara0507.github.io/posts/2018-10-28-ghc-8-6-error-no-gmp.html
MacBook-Air:~ sirkerf$ stack setup --reinstall
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Already downloaded.         
xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance
configure: error: in `/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2':
configure: error: C compiler cannot create executables
See `config.log’ for more details
Received ExitFailure 77 when running
Raw command: /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/configure --prefix=/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/
Run from: /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/

          
Error: Error encountered while configuring GHC with
     /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/configure --prefix=/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/
     run in */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/*
    
    The following directories may now contain files, but won’t be used by stack:
     - */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/*
     - */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/*
    
    For more information consider rerunning with --verbose flag
    
Configuring GHC ...
MacBook-Air:~ sirkerf$
やはり以上のようになって解決しませんでした……。
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

これが見える範囲内での根本原因っぽいですねぇ。
直し方はこれ https://qiita.com/eytyet/items/59c5bad1c167d5addc68 の「直し方」のセクションかな?
問題のメッセージでググったら他にも直し方を解説した記事が出てきたので参考にするといいと思います。
MacBook-Air:~ sirkerf$ stack setup --reinstall
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Already downloaded.         
configure: error: in `/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2':
configure: error: C compiler cannot create executables
See `config.log’ for more details
Received ExitFailure 77 when running
Raw command: /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/configure --prefix=/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/
Run from: /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/

          
Error: Error encountered while configuring GHC with
     /Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/configure --prefix=/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/
     run in */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/ghc-8.8.2/*
    
    The following directories may now contain files, but won’t be used by stack:
     - */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2.temp/*
     - */Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/*
    
    For more information consider rerunning with --verbose flag
    
Configuring GHC ...
MacBook-Air:~ sirkerf$
全く進展しません……。
あれ?
「runghc hoge.hs」は問題なく動きます……が、「ghc hoge.hs」と打つと

MacBook-Air:haskell_sutdy sirkerf$ ghc fizzbuzz.hs
Linking fizzbuzz ...
In file included from /Users/sirkerf/.ghcup/ghc/8.6.5/lib/ghc-8.6.5/include/Stg.h:77,
         from /Users/sirkerf/.ghcup/ghc/8.6.5/lib/ghc-8.6.5/include/Rts.h:29,

         *from /var/folders/dq/jgt54zr53k55xdqgb045n2t40000gn/T/ghc14855_0/ghc_1.c*:one:*0: error:*
*   *

*/usr/local/Cellar/gcc/9.3.0/lib/gcc/9/gcc/x86_64-apple-darwin19/9.3.0/include-fixed/math.h:45:10: error:*
   *fatal error: sys/cdefs.h: No such file or directory*
    *45 | #include <sys/cdefs.h>*
     *|     ^~~~~~~~~~~~~*
  *|*
*45 |* #include *<*sys/cdefs.h>
  *|     ^*
compilation terminated.
`gcc’ failed in phase `C Compiler’. (Exit code: 1)

と出てきます。
「GHCなのにC言語のコンパイラが関係する」なんてことあるんでしょうか……。
詳しくは割愛しますが(私もよく考えたらそんなに詳しくないし)、めっちゃあります。xcode周りでバグっているのもそういう事情です。
となるとこの問題はカテゴリ違い(HaskellじゃなくてC)になるんでしょうか、ありがとうございました。
ああー、別にここで聞く分には全く問題ないです。Macだとよくありそうですし
失礼しました、では引き続きお世話になります。
stackがインストールしているGHCとghcupでインストールされたGHC(今runghcやghcコマンドを打って呼び出されている方)は別のGHCなんで、とりあえずstackの方に集中しましょう(根っこの問題は同じなんじゃないかな)。
もう一度 stack setup --reinstall すると多分今度は最初と違うエラーに変わってるんじゃないかと思いますのでそれを見てみましょう
すれ違ってしまって申し訳ないのですが、
「brew install gmp」をした後、
「もうあるよ」と言われたので、
「brew upgrade gmp」をしました。

その通りにした後に
「stack setup --reinstall」をしました。
そうしたら今度はエラーが出ませんでした。
以下個人的に気になったログです。

Installed GHC.   
Trouble loading CompilerPaths cache: Control.Exception.Safe.throwString called with:

Compiler file metadata mismatch, ignoring cache
Called from:
 throwString (src/Stack/Storage/User.hs:275:8 in stack-2.5.1-6DM1RsturFMC73zSqWnQ8j:Stack.Storage.User)

stack will use a sandboxed GHC it installed
For more information on paths, see ‘stack path’ and ‘stack exec env’
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
「ghc hoge.hs」コマンドがエラーなく動作しました。
「stack runghc hoge.hs」コマンドもエラーなく動作しました。
よかった!ghcupでインストールした方の問題はちょっとググっても見つからなかったしわからないので、とりあえずstackでインストールしたものを使ってみてはいかがでしょうか!
そのようにしたいと思います。>stackでインストールしたものを使う。

あしかけ24時間もの間お付き合いいただき本当にありがとうございました。本当に助かりました。もしかしたらまた質問しに伺うかも知れません。その時もどうかよろしくお願いしたします。
ちなみにこれは蛇足ですが、当初の目的だった「stack hoogle --setup」も特殊な問題が発生しない限りはうまくいきそうです。
……ものすごく時間がかかっていますけれども……。
またまたすみません、直毛です。
別の問題が発生しました。
「stack hoogle --setup」
は時間をかけて完了しましたが
「stack exec — hoogle generate」
がうまくいかないようです。
エラーメッセージは以下になります。

Executable named hoogle not found on path: [“/Users/sirkerf/.stack/global-project/.stack-work/install/x86_64-osx/9818903ee3c668083647fa205fd07e4ca74d4ea5b763e164981b890d5d4430f7/8.8.2/bin”,“/Users/sirkerf/.stack/snapshots/x86_64-osx/9818903ee3c668083647fa205fd07e4ca74d4ea5b763e164981b890d5d4430f7/8.8.2/bin”,“/Users/sirkerf/.stack/compiler-tools/x86_64-osx/ghc-8.8.2/bin”,“/Users/sirkerf/.stack/programs/x86_64-osx/ghc-8.8.2/bin”,“/Users/sirkerf/.cabal/bin”,“/Users/sirkerf/.ghcup/bin”,“/Users/sirkerf/.cabal/bin”,“/Users/sirkerf/.ghcup/bin”,“/Users/sirkerf/.rbenv/shims”,“~/.rbenv/shims”,“/usr/local/bin”,“/usr/local/bin”,“/usr/bin”,“/bin”,“/usr/sbin”,“/sbin”,“/Library/TeX/texbin”]
MacBook-Air:~ sirkerf$
https://github.com/commercialhaskell/stack/issues/5005
同じメッセージの表示された方がいらっしゃるようですが、状況は異なるように見受けられます。
必要かも知れないので環境の情報も提出しておきます
使用環境
macOS Big Sur
version 11.0.1
MacBook Air (13-inch, Early 2014)
プロセッサ 1.4 GHz デュアルコアIntel Core i5
メモリ 8GB 1600 MHz DDR3
グラフィックス Intel HD Graphics 5000 1536 MB
シリアル番号 伏せます
再度「stack hoogle --setup」を試みました
エラーメッセージが異なるようです。

No hoogle version was found, trying to install the latest version
Minimum version is hoogle-5.0. Found acceptable hoogle-5.0.17.15 in your index, requiring its installation.
hoogle: The Hoogle file /Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo is corrupt, only 25 bytes.
CallStack (from HasCallStack):
 errorIO, called at src/General/Store.hs:173:9 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Store
CallStack (from HasCallStack):
 errorIO, called at src/General/Util.hs:270:66 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Util
Received ExitFailure 1 when running
Raw command: /Users/sirkerf/.stack/snapshots/x86_64-osx/2266d4dec467e88058dea8d746dcca61bab2a982e1ab1285e2f68fb879d6e56e/8.8.2/bin/hoogle --database=/Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo

MacBook-Air:~ sirkerf$
Warning: Installation path /Users/sirkerf/.local/bin
     not found on the PATH environment variable
と表示されたので「~」ディレクトリにある「.bash_profile」に以上のパスを通してみました。
結果
「stack exec — hoogle generate」がうまくいきそうです。
ありがとうございました。
ありがとうございませんでした(?)
まだ問題があるようです。
「stack exec — hoogle generate」
はうまくいったようです。
その後の
「stack hoogle」
がうまくいきません。エラーメッセージを貼ります。
MacBook-Air:~ sirkerf$ stack hoogle
No hoogle version was found, trying to install the latest version
Minimum version is hoogle-5.0. Found acceptable hoogle-5.0.17.15 in your index, requiring its installation.
hoogle: The Hoogle file /Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo is corrupt, only 25 bytes.
CallStack (from HasCallStack):
 errorIO, called at src/General/Store.hs:173:9 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Store
CallStack (from HasCallStack):
 errorIO, called at src/General/Util.hs:270:66 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Util
Received ExitFailure 1 when running
Raw command: /Users/sirkerf/.local/bin/hoogle --database=/Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo

MacBook-Air:~ sirkerf$
やはり同じ状況の人もいるようですが似たような状況ではなさそうです。
手詰まりになりました、もしよければ助けてくださると嬉しいです。
根本的な原因は
hoogle: The Hoogle file /Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo is corrupt, only 25 bytes.

のようです。ただ、 database.hoo is corrupt でググっても https://github.com/ndmitchell/hoogle/issues を検索しても
https://github.com/commercialhaskell/stack/issues を検索してもかすりもしないので、かなり厄介そうです。

... と思ったところでそもそも stack hoogleってstack exec hoogleとどう違うの?と思いながら手元のプロジェクトで試したところよく似たエラーに出くわしました。

database.hoo is corrupt なるメッセージから予想はしてたんですけど、やっぱりその前の stack hoogle からなんかおかしかったみたいですね。
こんなメッセージが出ました:
(前略)
Packages missing documentation:                 array                 base                 (中略)    Win32                 xhtml            rts
No packages were found, aborting (use no arguments to index all of Stackage)
Received ExitFailure 1 when running
Raw command: "C:\\Users\\igrep\\AppData\\Roaming\\local\\bin\\hoogle.exe" generate --local "--database=S:\\prj\\readme-test\\.stack-work\\hoogle\\9b06ae13\\database.hoo"

一度その「corrupt」してるという /Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo を削除してからもう一度 stack hoogle すると、よく似たエラーが出るはずです。

で、さらに検索してみたところ https://github.com/commercialhaskell/stack/issues/5228 と同じ現象ではないかと推測されます。
ちなみに、こういうときはMac自体の情報もヒントにならなくはないですが、どちらかというと stack などのバージョンがあった方が助かります。
私の場合、途中で stack upgrade したのでややこしいですが現在stack 2.5.1で、最初に stack hoogle したときは stack 2.3.3でした(はず):
> stack --version
Version 2.5.1, Git revision d6ab861544918185236cf826cb2028abb266d6d5 x86_64 hpack-0.33.0

OSはWindows 10 Pro 20H2。
で、私も試したところうまく行ったので報告。
https://github.com/commercialhaskell/stack/issues/5228#issuecomment-636451325 がワークアラウンドみたいです。
最後の行は stack exec hoogle に変えましたが。
まず指定されていた「database.hoo」を削除してから「stack hoogle」を実行してみたところ、以下のようなメッセージに変化したようです。

MacBook-Air:~ sirkerf$ stack hoogle
No hoogle version was found, trying to install the latest version
Minimum version is hoogle-5.0. Found acceptable hoogle-5.0.17.15 in your index, requiring its installation.
hoogle: The Hoogle file /Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo is corrupt, only 25 bytes.
CallStack (from HasCallStack):
 errorIO, called at src/General/Store.hs:173:9 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Store
CallStack (from HasCallStack):
 errorIO, called at src/General/Util.hs:270:66 in hoogle-5.0.17.15-167DuRZRx9WKaAmip51pIT:General.Util
Received ExitFailure 1 when running
Raw command: /Users/sirkerf/.local/bin/hoogle --database=/Users/sirkerf/.stack/global-project/.stack-work/hoogle/x86_64-osx/a4f4c41115e9878e03bbb7d67e126c6f8eb36e4637d9cc5f7bd65f984990b349/8.8.2/database.hoo

MacBook-Air:~ sirkerf$
stack versionは以下の通りです。

MacBook-Air:~ sirkerf$ stack --version
Version 2.5.1, Git revision d6ab861544918185236cf826cb2028abb266d6d5 x86_64 hpack-0.33.0
MacBook-Air:~ sirkerf$
そして削除したはずの「database.hoo」ですが復活しましたね。
中身は

HOOGLE-5.0.17

のみでした。
最後の答えは、その表示されているスクリプトを書いてどこかに保存するのでしょうけれど、その名前と保存先はどのようにすれば良いでしょうか?
なんでもいいと思いますよ。実行しやすい名前で、実行しやすいところに。当然 PATH に入っている方が常用はしやすいでしょうけど。別に手で打ってシェルの履歴に覚えさせておく程度でもいいでしょうし。
参考にさせていただきたいのですが、igrepさんはどんな名前で保存してどこの場所に保存しましたか?
「実行しやすい名前」「実行しやすいところ」がピンと来なかったもので……。