haskell-jp / questions #101 at 2022-07-06 11:10:09 +0900

はじめまして!Haskellの初心者です。
cabalで「BiGUL」というパッケージをインストールしたかったのですが、どうしてもうまく行かなったので質問させていただきます。
`cabal install BiGUL --allow-newer=base`でエラーが出てきました。
GHCupを使っています。cabalはversion3.6.2.0です。
ビルドログは以下のように
$ cabal install BiGUL --allow-newer=base
Resolving dependencies...
Build profile: -w ghc-8.10.7 -O1
In order, the following will be built (use -v for more details):
- BiGUL-1.0.1 (lib) (requires build)
Starting BiGUL-1.0.1 (lib)
Building BiGUL-1.0.1 (lib)

Failed to build BiGUL-1.0.1.
Build log (
C:\cabal\logs\ghc-8.10.7\BiGUL-1.0.1-7201c71d54996439f3e7433c7d9e8e8c75b69faa.log
):
Preprocessing library for BiGUL-1.0.1..
Building library for BiGUL-1.0.1..
[ 1 of 10] Compiling GHC.InOut ( src\GHC\InOut.hs, dist\build\GHC\InOut.o )
[ 2 of 10] Compiling Generics.BiGUL ( src\Generics\BiGUL.hs, dist\build\Generics\BiGUL.o )
[ 3 of 10] Compiling Generics.BiGUL.Error ( src\Generics\BiGUL\Error.hs, dist\build\Generics\BiGUL\Error.o )
[ 4 of 10] Compiling Generics.BiGUL.PatternMatching ( src\Generics\BiGUL\PatternMatching.hs, dist\build\Generics\BiGUL\PatternMatching.o )
[ 5 of 10] Compiling Generics.BiGUL.Interpreter.Unsafe ( src\Generics\BiGUL\Interpreter\Unsafe.hs, dist\build\Generics\BiGUL\Interpreter\Unsafe.o )
[ 6 of 10] Compiling Generics.BiGUL.Interpreter ( src\Generics\BiGUL\Interpreter.hs, dist\build\Generics\BiGUL\Interpreter.o )
[ 7 of 10] Compiling ( src\Generics\BiGUL\TH.hs, dist\build\Generics\BiGUL\TH.o )

src\Generics\BiGUL\TH.hs:144:16: error:
? Couldn't match expected type ▒e(Type -> TySynEqn) -> Dec▒f
with actual type ▒eDec▒f
? The function ▒eTySynInstD▒f is applied to two arguments,
but its type ▒eTySynEqn -> Dec▒f has only one
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
In the fourth argument of ▒eInstanceD▒f, namely
▒e[TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList))),
FunD vFrom fromClauses, FunD vTo toClauses]▒f
|
144 | [TySynInstD nRep
| ^^^^^^^^^^^^^^^...

src\Generics\BiGUL\TH.hs:144:27: error:
? Couldn't match expected type ▒eTySynEqn▒f with actual type ▒eName▒f
? In the first argument of ▒eTySynInstD▒f, namely ▒enRep▒f
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
In the fourth argument of ▒eInstanceD▒f, namely
▒e[TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList))),
FunD vFrom fromClauses, FunD vTo toClauses]▒f
|
144 | [TySynInstD nRep
| ^^^^

src\Generics\BiGUL\TH.hs:146:21: error:
? Couldn't match expected type ▒eMaybe [TyVarBndr]▒f
with actual type ▒e[Type]▒f
? In the first argument of ▒eTySynEqn▒f, namely
▒e[generateTypeVarsType name typeVars]▒f
In the second argument of ▒eTySynInstD▒f, namely
▒e(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))▒f
In the expression:
TySynInstD
nRep
(TySynEqn
[generateTypeVarsType name typeVars]
(constructorsToSum
(nSum, nV1)
(map
(constructorToProduct (nK1, nR, nU1, nProd, nS1))
selectorNameAndConList)))
|
146 | [generateTypeVarsType name typeVars]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src\Generics\BiGUL\TH.hs:556:53: error:
? Couldn't match expected type ▒eExp▒f with actual type ▒eMaybe Exp▒f
? In the first argument of ▒emkBodyExpForRearr▒f, namely ▒ee▒f
In the expression: mkBodyExpForRearr e
In an equation for ▒emkBodyExpForRearr▒f:
mkBodyExpForRearr (TupE [e]) = mkBodyExpForRearr e
|
556 | mkBodyExpForRearr (TupE [e]) = mkBodyExpForRearr e
| ^

src\Generics\BiGUL\TH.hs:558:29: error:
? Couldn't match expected type ▒eExp▒f with actual type ▒eMaybe Exp▒f
? In the first argument of ▒emkBodyExpForRearr▒f, namely ▒ee▒f
In a stmt of a 'do' block: lexp <- mkBodyExpForRearr e
In the expression:
do lexp <- mkBodyExpForRearr e
rexp <- mkBodyExpForRearr (TupE es)
(_, [eprod]) <- lookupNames astNamespace [] ["EProd"]
return ((ConE eprod `AppE` lexp) `AppE` rexp)
|
558 | lexp <- mkBodyExpForRearr e
| ^

src\Generics\BiGUL\TH.hs:583:46: error:
? Couldn't match type ▒eMaybe Exp▒f with ▒eExp▒f
Expected type: [Exp]
Actual type: [Maybe Exp]
? In the second argument of ▒econcatMap▒f, namely ▒ees▒f
In the expression: concatMap getAllVars es
In an equation for ▒egetAllVars▒f:
getAllVars (TupE es) = concatMap getAllVars es
|
583 | getAllVars (TupE es) = concatMap getAllVars es
| ^^

src\Generics\BiGUL\TH.hs:649:16: error:
? Couldn't match type ▒eExp▒f with ▒eMaybe Exp▒f
Expected type: [Maybe Exp]
Actual type: [Exp]
? In the first argument of ▒eTupE▒f, namely ▒ees▒f
In the first argument of ▒ereturn▒f, namely ▒e(TupE es)▒f
In a stmt of a 'do' block: return (TupE es)
|
649 | return (TupE es)
| ^^
cabal-3.6.2.0.exe: Failed to build BiGUL-1.0.1. See the build log above for
details.
多分 GHC のversionが新しすぎるように見えます. わざとGHCの環境内バージョンを古くする,つまり

$ ghcup install ghc 8.0.2
$ cabal install BiGUL

(`--allow-newer=base` は不要になります) とやるといいのではないかと思います.私はグローバルのパッケージ登録情報をいじりたくなかったので下のコマンドを直接実行したわけではないんですけど( cabal uninstall とかないので),dependencyに baseBiGUL のみを登録した空のCabalパッケージを作って, cabal v2-build が GHC-8.10.4で死んで GHC-8.0.2 で通ることは確認しています.
ありがとうございます。GHCをバージョン8.0.2に戻して実行してみました。今度は以下のようなエラーメッセージが出てきました。
$ cabal install BiGUL
Resolving dependencies...
Up to date
Warning:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: Installation might not be completed as desired! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The command "cabal install [TARGETS]" doesn't expose libraries.
* You might have wanted to add them as dependencies to your package. In this
case add "BiGUL" to the build-depends field(s) of your package's .cabal file.
* You might have wanted to add them to a GHC environment. In this case use
"cabal install --lib BiGUL". The "--lib" flag is provisional: see
for more information.
ありがとうございました!`cabal install --lib BiGUL`でインストールできました!
何度もすみません。同じことを別のPCで作業してみたんですが、またエラーが出てきました。

C:\Users\Administrator>cabal install BiGUL
Resolving dependencies...
Build profile: -w ghc-8.0.2 -O1
In order, the following will be built (use -v for more details):
- mtl-2.2.2 (lib) (requires build)
- syb-0.7.2.1 (lib) (requires build)
- th-abstraction-0.4.3.0 (lib) (requires build)
- th-extras-0.0.0.6 (lib) (requires build)
- BiGUL-1.0.1 (lib) (requires build)
Starting th-abstraction-0.4.3.0 (lib)
Starting mtl-2.2.2 (lib)
Starting syb-0.7.2.1 (lib)
Building th-abstraction-0.4.3.0 (lib)
Building mtl-2.2.2 (lib)
Building syb-0.7.2.1 (lib)

Failed to build mtl-2.2.2.
Build log (
C:\cabal\logs\ghc-8.0.2\mtl-2.2.2-78add7f90d4b12c3bf02937f2e51d045fb112c3c.log
):
Preprocessing library for mtl-2.2.2..
Building library for mtl-2.2.2..
[ 1 of 22] Compiling Control.Monad.Writer.Class ( Control\Monad\Writer\Class.hs, dist\build\Control\Monad\Writer\Class.o )
[ 2 of 22] Compiling Control.Monad.Trans ( Control\Monad\Trans.hs, dist\build\Control\Monad\Trans.o )
[ 3 of 22] Compiling Control.Monad.Writer.Lazy ( Control\Monad\Writer\Lazy.hs, dist\build\Control\Monad\Writer\Lazy.o )
[ 4 of 22] Compiling Control.Monad.Writer ( Control\Monad\Writer.hs, dist\build\Control\Monad\Writer.o )
[ 5 of 22] Compiling Control.Monad.Writer.Strict ( Control\Monad\Writer\Strict.hs, dist\build\Control\Monad\Writer\Strict.o )
[ 6 of 22] Compiling Control.Monad.State.Class ( Control\Monad\State\Class.hs, dist\build\Control\Monad\State\Class.o )
[ 7 of 22] Compiling Control.Monad.State.Lazy ( Control\Monad\State\Lazy.hs, dist\build\Control\Monad\State\Lazy.o )
[ 8 of 22] Compiling Control.Monad.State.Strict ( Control\Monad\State\Strict.hs, dist\build\Control\Monad\State\Strict.o )
[ 9 of 22] Compiling Control.Monad.State ( Control\Monad\State.hs, dist\build\Control\Monad\State.o )
[10 of 22] Compiling Control.Monad.Reader.Class ( Control\Monad\Reader\Class.hs, dist\build\Control\Monad\Reader\Class.o )
[11 of 22] Compiling Control.Monad.Reader ( Control\Monad\Reader.hs, dist\build\Control\Monad\Reader.o )
[12 of 22] Compiling Control.Monad.RWS.Class ( Control\Monad\RWS\Class.hs, dist\build\Control\Monad\RWS\Class.o )
[13 of 22] Compiling Control.Monad.RWS.Lazy ( Control\Monad\RWS\Lazy.hs, dist\build\Control\Monad\RWS\Lazy.o )
[14 of 22] Compiling Control.Monad.RWS.Strict ( Control\Monad\RWS\Strict.hs, dist\build\Control\Monad\RWS\Strict.o )
[15 of 22] Compiling Control.Monad.RWS ( Control\Monad\RWS.hs, dist\build\Control\Monad\RWS.o )
[16 of 22] Compiling Control.Monad.List ( Control\Monad\List.hs, dist\build\Control\Monad\List.o )
[17 of 22] Compiling Control.Monad.Identity ( Control\Monad\Identity.hs, dist\build\Control\Monad\Identity.o )
[18 of 22] Compiling Control.Monad.Error.Class ( Control\Monad\Error\Class.hs, dist\build\Control\Monad\Error\Class.o )
[19 of 22] Compiling Control.Monad.Except ( Control\Monad\Except.hs, dist\build\Control\Monad\Except.o )
[20 of 22] Compiling Control.Monad.Error ( Control\Monad\Error.hs, dist\build\Control\Monad\Error.o )
[21 of 22] Compiling Control.Monad.Cont.Class ( Control\Monad\Cont\Class.hs, dist\build\Control\Monad\Cont\Class.o )
[22 of 22] Compiling Control.Monad.Cont ( Control\Monad\Cont.hs, dist\build\Control\Monad\Cont.o )
cabal-3.6.2.0.exe: The program 'ar' is required but it could not be found.


Failed to build syb-0.7.2.1.
Build log (
C:\cabal\logs\ghc-8.0.2\syb-0.7.2.1-e44883851fc7f4e9e174a5a09b2eed9e11c9c81e.log
):
Preprocessing library for syb-0.7.2.1..
Building library for syb-0.7.2.1..
[ 1 of 16] Compiling Data.Generics.Instances ( src\Data\Generics\Instances.hs, dist\build\Data\Generics\Instances.o )
[ 2 of 16] Compiling Generics.SYB.Instances ( src\Generics\SYB\Instances.hs, dist\build\Generics\SYB\Instances.o )
[ 3 of 16] Compiling Data.Generics.Basics ( src\Data\Generics\Basics.hs, dist\build\Data\Generics\Basics.o )
[ 4 of 16] Compiling Generics.SYB.Basics ( src\Generics\SYB\Basics.hs, dist\build\Generics\SYB\Basics.o )
[ 5 of 16] Compiling Data.Generics.Aliases ( src\Data\Generics\Aliases.hs, dist\build\Data\Generics\Aliases.o )
[ 6 of 16] Compiling Data.Generics.Builders ( src\Data\Generics\Builders.hs, dist\build\Data\Generics\Builders.o )
[ 7 of 16] Compiling Generics.SYB.Builders ( src\Generics\SYB\Builders.hs, dist\build\Generics\SYB\Builders.o )
[ 8 of 16] Compiling Data.Generics.Schemes ( src\Data\Generics\Schemes.hs, dist\build\Data\Generics\Schemes.o )
[ 9 of 16] Compiling Generics.SYB.Schemes ( src\Generics\SYB\Schemes.hs, dist\build\Generics\SYB\Schemes.o )
[10 of 16] Compiling Data.Generics.Text ( src\Data\Generics\Text.hs, dist\build\Data\Generics\Text.o )
[11 of 16] Compiling Generics.SYB.Text ( src\Generics\SYB\Text.hs, dist\build\Generics\SYB\Text.o )
[12 of 16] Compiling Data.Generics.Twins ( src\Data\Generics\Twins.hs, dist\build\Data\Generics\Twins.o )
[13 of 16] Compiling Generics.SYB.Twins ( src\Generics\SYB\Twins.hs, dist\build\Generics\SYB\Twins.o )
[14 of 16] Compiling Generics.SYB.Aliases ( src\Generics\SYB\Aliases.hs, dist\build\Generics\SYB\Aliases.o )
[15 of 16] Compiling Data.Generics ( src\Data\Generics.hs, dist\build\Data\Generics.o )
[16 of 16] Compiling Generics.SYB ( src\Generics\SYB.hs, dist\build\Generics\SYB.o )
cabal-3.6.2.0.exe: The program 'ar' is required but it could not be found.


Failed to build th-abstraction-0.4.3.0.
Build log (
C:\cabal\logs\ghc-8.0.2\th-abstraction-0.4.3.0-8cec04ce0f55f21f8cf003dcaddf596660cddd78.log
):
Preprocessing library for th-abstraction-0.4.3.0..
Building library for th-abstraction-0.4.3.0..
[1 of 3] Compiling Language.Haskell.TH.Datatype.TyVarBndr ( src\Language\Haskell\TH\Datatype\TyVarBndr.hs, dist\build\Language\Haskell\TH\Datatype\TyVarBndr.o )
[2 of 3] Compiling Language.Haskell.TH.Datatype.Internal ( src\Language\Haskell\TH\Datatype\Internal.hs, dist\build\Language\Haskell\TH\Datatype\Internal.o )
[3 of 3] Compiling Language.Haskell.TH.Datatype ( src\Language\Haskell\TH\Datatype.hs, dist\build\Language\Haskell\TH\Datatype.o )
cabal-3.6.2.0.exe: The program 'ar' is required but it could not be found.

cabal-3.6.2.0.exe: Failed to build mtl-2.2.2 (which is required by
BiGUL-1.0.1). See the build log above for details.
Failed to build syb-0.7.2.1 (which is required by BiGUL-1.0.1). See the build
log above for details.
Failed to build th-abstraction-0.4.3.0 (which is required by BiGUL-1.0.1). See
the build log above for details.
なんか エラー見ると 大体どんなパッケージのビルドにも失敗しそうな文言ですね…(それくらいしかわからないです. ar コマンドが Windows 上での Cabalによるビルドに実際に使われているのかとかもよくわからないので).たとえば,
cabal install QuickCheck

とか通りますか?
そうですね...`cabal install QuickCheck`も似たようなエラーが出ました。
成功しているマシン、失敗したマシンのそれぞれの cabal install BiGUL を実行したコンソールでただ

ar

を実行してみることはできますか?
これって実行できたって感じですか?

使用法: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
ar -M [<mri-script]
コマンド:
d - 書庫からファイルを削除する
m[ab] - 書庫内のファイルを移動する
p - 書庫内のファイルを表示する
q[f] - 書庫へファイルを素早く追加する
r[ab][f][u] - 書庫内の既存ファイルを置換する。存在しない場合は新規にファイルを挿入する
s - ranlib として動作する
t - 書庫の内容を表示する
x[o] - 書庫からファイルを抽出する
コマンドに関係した修飾子:
[a] - [member-name] の後にファイルを配置する
[b] - [member-name] の前にファイルを配置する ([i] と同じ)
[D] - 日時、uid、gid に 0 (ゼロ) を使用する
[U] - use actual timestamps and uids/gids (default)
[N] - 同名インスタンスで [count] 番目のものを使う
[f] - 挿入されたファイル名を切り詰める
[P] - 名前の一致を調べる際に完全パスを使う
[o] - 本来の日時を保持する
[u] - 現在の書庫に入っているものより新しいファイルだけを置換する
一般的な修飾子:
[c] - ライブラリファイルを作成する必要があるときでも警告しない
[s] - 書庫の索引を作成する (ranlib を参照)
[S] - シンボル表を構築しない
[T] - 薄い書庫を作成する
[v] - 冗長に表示を行う
[V] - バージョン情報を表示する
@<file> - <file> からオプションを読み込む
--target=BFDNAME - ターゲットのオブジェクト形式を BFDNAME として指定する
任意指定:
--plugin <p> - 指定したプラグインを読み込む
エミュレーションに関係したオプション:
エミュレーションに関係したオプションはありません
ar: サポートされているターゲット: pe-x86-64 pei-x86-64 pe-bigobj-x86-64 elf64-x86-64 elf64-l1om elf64-k1om pe-i386 pei-i386 elf32-i386 elf32-iamcu elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
できてますね
実行できたのは成功マシンの方ですか?
そうですね。失敗したマシンは今手元にないので、帰ったら実行してみます。
失敗したマシンで実行してみました!失敗しましたね。

'ar' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
なるほど.ちなみに,もしかして成功マシンって bash on WSLで,失敗の方は cmd.exeだったりします?
そうですね。OSの環境が原因ですか?
arがUnix系のツールだから、bashにはネイティヴインストールされてるけど、windowsの側のcmd.exeにexeとして直接見えるようには入ってないのかな、という想像をしました。ただ、解せないのは、ghcupをインストールしたのってcmd.exeを介してですよね? それなのにそういう失敗が起こるのが不思議だなー、という。
現状Windows版のGHCをインストールした場合、GHCは自身に添付されたmsys2に入ったツール群を使うので、普通はあり得ないですね。再インストールかなぁ :confused:
そうですね、cmdでghcupをインストールしました。再インストールしてみます!
今確認したのですが、ghcupのインストールページにはpowershellでのインストール方法は書かれていましたが、cmd.exeでのインストール方法がかかれていませんでした。ghcupをインストールしたのがcmd.exeからであってるなら、もしかしたらghcupの対応が無いためにconfigurationがおかしくなってるのかもしれないとか適当に考えました。windowsの用語法が私がwindowsに触っていないうちに変わっていて、cmd.exeがじつはpowershellを指すようになっていたりは…しませんよね?
そう言われてみれば、そもそもcmdからのghcupのインストールはできないはずですね。
PowerShellでghcupをインストールした後、cmdでghcupを実行してGHCをインストールする、なら可能だとは思いますが。