haskell and FreeBSD 11.1
鈴虫が盛んに鳴く季節。あの忌まわしい蚊もゆく夏を惜しんで活動を活発化してる。
また、蚊の被害を受けた。残念ながら犯行現場とホシは特定出来ず。今回の被害は、 ケツの穴の近く。今年で2度目の被害。変態蚊がうろちょろしてるんだな。
駐在さんか役場の方に言って、犯人を逮捕して欲しいぞ。なんたって、目にも見えにくい ストーカーですからな。
被害に遭った本人は、身悶えしております。痒くても迂闊に掻ける場所ではないからね。 一時の快楽に浸ってしまうと、痔になるとか、とんでもない後遺症を併発しそうなので、 全治5日ぐらいまで、ひたすらMになってましょ。
全国各地で、ストーカーが蔓延してるみたいで、今年バージョンの対策が出てた。
いろいろ紹介されてるけど、決定的なものは無いなあ。絶対に刺されない方法を研究して、誰か (イグ)ノーベル賞を取ってください。それが人類を幸福に導きますよ。
でもまあ、蚊のストーカー被害ぐらいならよしとするか。殺人鬼のヒアリの被害には遭っていないからね。
ghc 8.2.1 on FreeBSD 11.1
まずFreeBSDの新しいのを入れた。古いBSDでどんなpkgを入れたか忘れてしまっているので、 pkg infoして、どんなのが入っていたか偵察。必要なものを新たな革袋に入れてあげた。
そして、いよいよghcの新種を入れる。
810 2 I+ 0:00.54 gmake --no-print-directory -f ghc.mk install BINDIST=YES NO_INCLUDE_DEPS=YES 1330 2 I+ 0:00.30 utils/ghc-cabal/dist-install/build/tmp/ghc-cabal copy libraries/template-haskell dist-install strip /usr/loc 1333 2 R+ 3:02.13 strip --strip-unneeded /usr/local/GHC821/lib/ghc-8.2.1/template-haskell-2.12.0.0/libHStemplate-haskell-2.12.
上記のようにstripしてる所で、べらぼうに時間がかかった。対象ファイルが沢山あるので 気長に待とう。
で、次は動作試験。ハロワ出来るかな。
[sakae@fb11 /tmp]$ ghc aa.hs
[1 of 1] Compiling Main ( aa.hs, aa.o )
Linking aa ...
<no location info>: error:
Warning: Couldn't figure out linker information!
Make sure you're using GNU ld, GNU gold or the built in OS X linker, etc.
/usr/bin/ld.lld: error: unable to find library -liconv
/usr/bin/ld.lld: error: unable to find library -lcharset
/usr/bin/ld.lld: error: unable to find library -lgmp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
`clang' failed in phase `Linker'. (Exit code: 1)
iconvとかは、/usr/local/libの下に有るはずなんで、それらをちゃんと捕捉していないのか脳?取り合えず、詳細なコンパイルログを取ってみよう。
[sakae@fb11 /tmp]$ ghc aa.hs -v >log 2>&1
そして古い方もね。
[fb11: tmp]$ stack exec -- ghc aa.hs -v >OLD 2>&1
見比べてみると、-L/usr/local/libが、新しい方には付いていないなあ。
古いFB11の方は、stackで動かしていて、こちらはちゃんと実行ファイルが生成された。 念のため、ちゃんとリンクしてるか確認。
[fb11: tmp]$ ldd ./aa
./aa:
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x8008dc000)
libcharset.so.1 => /usr/local/lib/libcharset.so.1 (0x800bd7000)
libgmp.so.10 => /usr/local/lib/libgmp.so.10 (0x800dd9000)
libm.so.5 => /lib/libm.so.5 (0x80105b000)
librt.so.1 => /usr/lib/librt.so.1 (0x801286000)
libthr.so.3 => /lib/libthr.so.3 (0x80148b000)
libc.so.7 => /lib/libc.so.7 (0x8016b2000)
そうなったら、export LD_LIBRARY_PATH=/usr/local/lib しとけばいいんだな。やってみたけど、どうも働いていない雰囲気。ちょいとぐぐったら、FreeBSDの流儀では、rc.confに 書いておkって事みたい。
ldconfig_local_dirs="/usr/local/lib"
で、やってみたけど、無駄骨だった。こうなれば、もっと根本的な問題だな。 C語でハロワを書いて実験。
[sakae@fb11 /tmp]$ cc t.c [sakae@fb11 /tmp]$ cc t.c -liconv /usr/bin/ld: cannot find -liconv cc: error: linker command failed with exit code 1 (use -v to see invocation) [sakae@fb11 /tmp]$ cc t.c -L/usr/local/lib -liconv
これが、clang 4.0.0って、備え付けの挙動。コンパイル時(正確にはリンク時か)に、libraryの在処を指定すると、ちゃんとコンパイルが成功するとな。
じゃ、pkgから入れたデフォと言うgcc 5.4.0でやってみる。
[sakae@fb11 /tmp]$ gcc t.c -liconv
こちらは、何食わぬ顔をしてコンパイルが成功している。ちゃんと/usr/local/libにも目を 通しているって事だ。
今の所の結論は、clangは 融通の利かない奴って事だな。
を見ると、-Lをghcする時に渡せとな。
[sakae@fb11 /tmp]$ ghc aa.hs -L/usr/local/lib
Linking aa ...
<no location info>: error:
Warning: Couldn't figure out linker information!
Make sure you're using GNU ld, GNU gold or the built in OS X linker, etc.
[sakae@fb11 /tmp]$ ./aa
Hellow GHC
ghcをインストールする時に、このオプションを埋め込んでおけってのが、どうやら正しい対処方法と思われる。
Comprehensive overview of using the Build System このあたりを見て、再度トライかな。
ghc とバトル
今入っているghcをまともに使いたい。これはもうghcとバトルだな。
ちょっと古いけどghcのマニュアルを見つけてきた。 栄光のグラスゴーHaskellコンパイルシステム利用の手引き
[sakae@fb11 /tmp]$ ghc --info
[("Project name","The Glorious Glasgow Haskell Compilation System")
,("GCC extra via C opts"," -fwrapv -fno-builtin")
,("C compiler command","clang")
,("C compiler flags"," -fno-stack-protector")
,("C compiler link flags"," -fuse-ld=lld")
,("C compiler supports -no-pie","NO")
,("Haskell CPP command","clang")
,("Haskell CPP flags","-E -undef -traditional -Wno-invalid-pp-token -Wno-unicod
e -Wno-trigraphs")
,("ld command","ld.lld")
,("ld flags","")
,("ld supports compact unwind","NO")
,("ld supports build-id","YES")
,("ld supports filelist","NO")
,("ld is GNU ld","YES")
:
これがghcの内部環境のようだ。perlも必需品になってるぞ。ghcが開発されてた頃はperl全盛期だったんでしょうな。今ならpythonだろうけど、今更誰もpythonに乗り換える勇気が無い んだな。
上の報告を良く見ると、[(String, String)] って、事になってるな。真にもってhaskellで ございますって言う趣。
そんな事より、もっと高次元で考えるんだ。そう、これって、Makefileに書かれる情報じゃん。 ghcには、--makeなんてオプションが有るんで、makeを内蔵してんだな。これは、ocamlに 比べて、大きなアドバンテージになりますよ。あちらは、OMakeだったかが別アプリになってて、 わざわざインストールしないと使えない。まてよ、そうするとocamlの方がunix的だな。気に いらなかったら、取り換えられるからね。その点、ghcときたら、図体ばかり大きくなって(以下自粛)
で、糞みたいに沢山ある引数なんて、どうせ忘れてしまっているだろうから、確認出来るように しといたからねって、--helpをすると出てくる。
[sakae@fb11 /tmp]$ ghc --show-options | grep -- -pg -pgmlo -pgmlc -pgmi -pgmL -pgmP -pgmF -pgmc -pgms -pgma -pgml -pgmdll -pgmwindres -pgmlibtool
これと上記のマニュアルを照らし合わせてみると、使うコンパイラーをコマンド引数から変更 出来るようだ。
[sakae@fb11 /tmp]$ ghc -pgmc gcc aa.hs -v : *** C Compiler: gcc -c /tmp/ghc1143_0/ghc_4.c -o /tmp/ghc1143_0/ghc_5.o -I/usr/local/GHC821/lib/ ghc-8.2.1/include *** C Compiler: gcc -c /tmp/ghc1143_0/ghc_7.s -o /tmp/ghc1143_0/ghc_8.o Error (figuring out linker information): user error (invalid --version output, o r linker is unsupported)
こんな風に、コンパイラーを動的に切り替え出来るとな。
コンパイルの途中で実行を止め、成果を確認出来るとな。興味があるのが、hs語がどんなC語に 変換されるかなって事。それには、-Cオプションを付けると良いらしい。
[sakae@fb11 /tmp]$ ghc -C aa.hs ghc: the option -C is only available with an unregisterised GHC Usage: For basic information, try the `--help' option.
ちゃんとしたGHCでは、そんな秘密を暴くようなまねをさせませんだと。秘密主義だな。 ならば、コンパイルの残骸を残す作戦はどうだ?
[sakae@fb11 /tmp]$ ghc aa.hs -keep-tmp-files [1 of 1] Compiling Main ( aa.hs, aa.o )
こんなdir(多分pidと、n個目のターゲットって事だろう)が出来ていた。ファイルに番号が 付いているのは、生成順だろう。(haskell用語で言うと、数えられる性質 Ord を満たす。 まてよ順番だから、Enumかな。その両方だろうな)
[sakae@fb11 /tmp/ghc1205_0]$ ls ghc_10.rsp ghc_4.c ghc_6.rsp ghc_8.o ghc_2.s ghc_5.o ghc_7.s ghc_9.rsp
で、順番と言うと、ghc_2.s が、数字的に一番小さい。なんでこんなものが最初なんだ? しばし考えて、メインを動かす為の下準備だろうと推測。C語系で言う、crt.oみたいなやつだな。
次にghc_4.c 折角だから開陳しとく
#include "Rts.h"
extern StgClosure ZCMain_main_closure;
int main(int argc, char *argv[])
{
RtsConfig __conf = defaultRtsConfig;
__conf.rts_opts_enabled = RtsOptsSafeOnly;
__conf.rts_opts_suggestions = true;
__conf.rts_hs_main = true;
return hs_main(argc,argv,&ZCMain_main_closure,__conf);
}
これに関連するのが、ghc_6.rsp 内容は
"-fno-stack-protector" "-DTABLES_NEXT_TO_CODE" "-c" "/tmp/ghc1205_0/ghc_4.c" "-o" "/tmp/ghc1205_0/ghc_5.o" "-I/usr/local/GHC821/lib/ghc-8.2.1/include"
コンパイルに使ったコマンド引数だな。
元ネタのaa.hsは、main = putStrLn "hello" なので、helloを探してみる。 ghc_2.s に有ったぞ。最初の推測は、脆くも崩れ去ったのかな。
.section .rodata.str,"aMS",@progbits,1
.align 1
.align 1
c18T_str:
.asciz "hello"
:
.Lc18R:
movq $stg_bh_upd_frame_info,-16(%rbp)
movq %rax,-8(%rbp)
movl $c18T_str,%r14d
movl $ghczmprim_GHCziCString_unpackCStringzh_closure,%ebx
addq $-16,%rbp
jmp stg_ap_n_fast
あああ、糞石の所まで行っちゃったね。で、最後のおまとめ引数は、ghc_10.rspにあった。
"-fno-stack-protector" "-DTABLES_NEXT_TO_CODE" "-fuse-ld=lld" "-o" "aa" "-Wl,--gc-sections" "aa.o" "-L/usr/local/GHC821/lib/ghc-8.2.1/base-4.10.0.0" "-L/usr/local/GHC821/lib/ghc-8.2.1/integer-gmp-1.0.1.0" "-L/usr/local/GHC821/lib/ghc-8.2.1/ghc-prim-0.5.1.0" "-L/usr/local/GHC821/lib/ghc-8.2.1/rts" "/tmp/ghc1205_0/ghc_5.o" "/tmp/ghc1205_0/ghc_8.o" "-Wl,-u,base_GHCziInt_I16zh_con_info" : "-lHSbase-4.10.0.0" "-lHSinteger-gmp-1.0.1.0" "-lHSghc-prim-0.5.1.0" "-lHSrts" "-lCffi" "-liconv" "-lcharset" "-lgmp" "-lm" "-lrt" "-lpthread"
長い々引数を使って、やっと実行ファイルが出来上がるとな。そして大事な事は、lHSrtsが リンクされてる事。IOモナドで、アクションが出てくるけど、こやつがその正体なのね。 下々の事は、こいつにまかせて、上の人は、純粋さに酔いしれているとな。
おまけで、コンパイルした時に出来上がる、*.hi ファイル。大事なファイルと言われるけど バイナリーぽくて目障りだったんだ。それを克服する手段が見つかったぞ。
[sakae@fb11 /tmp]$ ghc --show-iface aa.hi
Magic: Wanted 33214052,
got 33214052
Version: Wanted [8, 0, 2, 1],
got [8, 0, 2, 1]
Way: Wanted [],
got []
interface Main 8021
interface hash: 19f6a4a4da9136a816a32115ec55da59
ABI hash: 50d12cfa3fafa76362ad669e2ab71a6f
export-list hash: f771e351bdd1727b0d1a620d7b529ff0
orphan hash: 693e9af84d3dfcc71e640e005bdc5e2e
flag hash: 1c9edd8f53b0421dfc05392e725e4fe1
sig of: Nothing
used TH splices: False
where
exports:
main
module dependencies:
package dependencies: base-4.10.0.0* ghc-prim-0.5.1.0 integer-gmp-1.0.1.0
orphans: GHC.Base GHC.Float
family instance modules: Control.Applicative Data.Either
Data.Functor.Const Data.Functor.Identity Data.Monoid
Data.Type.Equality GHC.Generics GHC.IO.Exception GHC.TypeLits
GHC.TypeNats
:
1ecb270cb7abe920603f26ebb081f978
main :: IO ()
何となく普通の人が見ても、役に立ちそうだな。cabal地獄の一因は、これを見ても分かるな。 しっかりバージョン情報が埋め込まれている。悪い事が出来ない仕掛けなんだな。
その点、UnixがELFに採用してるバージョンマッチは、ファイル名なんだな。こちらの方が 穏やかで良いわい。ああ、これを否定して開発されたのが、前回やったNixOSか。
try install cabal-install
余りghcと戯れていてもしょうがないので、取り合えずcabalを使えるようにしておこう。 その前に、ghcにリンク用の引数を埋め込む。そんなの簡単、aliasでいいじゃんと思ったけど、 何かの都合でaliasが使われない可能性がある。そんな状況が発生する事を考慮して、本体に 埋め込むんだ。幸いな事に、ghcがghc-8.2.1にリンクされてて、そいつがshスクリプトに なってた。以下のように不格好なhackを施す。(ああ、不格好な経営とかいう本がDeNAから 出てて、読んだな。世の中のお役にたてたいって言う理念が、いつの間にか、金儲け集団に なっちゃってる。ああ、余談でした。)
[sakae@fb11 /usr/local/GHC821/bin]$ sudo vi ghc-8.2.1
:
# exec "$executablename" -B"$topdir" ${1+"$@"}
exec "$executablename" -B"$topdir" -L/usr/local/lib ${1+"$@"}
これでいいかと思ったら、ccを単独で使ってコンパイルしてるな。そういう場合は、上記の おまじないが効かない。さて、どうする? ぐぐれカス。
[sakae@fb11 ~/cabal-install-1.24.0.2]$ export LIBRARY_PATH=/usr/local/lib [sakae@fb11 ~/cabal-install-1.24.0.2]$ CC=cc ./bootstrap.sh -j 2 : Configuring Cabal-1.24.2.0... Setup: Encountered missing dependencies: process >=1.1.0.1 && <1.5 Error during cabal-install bootstrap: Configuring the Cabal package failed.
LIBRARY_PATHってのは、コンパイル時の拡張で、LD_LIBRARY_PATHってのは実行時の拡張なのね。前者は人生65年にして、初めて知った次第。
あれ、cabal地獄の蓋が開いたぞ。この現象って、OpenBSDの時も発生したような。。。。 何とか、閻魔様の眼をかいくぐりたいぞ。またぐぐれかな。
ちと中休みで、-j 2の効用を見てたら、ghcはあくまでシングルで走り、パラレルで走るのは、 バックエンドのCコンパイラーだけなのね。まあ、ghcはmake内蔵なんで、そんなものなのか。 こういうのを、ご隠居さんの無駄知識と言うんだな。
ああ、口の悪い人は、ご隠居さんなんて言うと、自他共に認めたと言うだろうけど、最近読んだ、隠居学って本の影響ね。
隠れて居るから隠居。最近の若い者の中に引き籠りって症状を呈する輩が居るけど、こちらの方が余程もってご隠居さんですよ。本当の隠居さんは、有り余る時間を好きな事に費やせる、余裕な人の事を言うそうなんで、お間違えなきように!
まあ、麻生さんは、そんな金を使わん経済効果ZEROの老人は、早くくたばってしまえ、らしい ですけどね。この間、出版業界に貢献したから許してね。そして、これからの消費計画は、 地元の旨い酒半ダース購入、旨いもん探検隊出発予定となってます。
てんやわんやの探検物語は、椎名誠さんあたりの本でも読めばいいのかな。膨大なシリーズに なってたから、有意義に時間を潰せるだろう。
再び cabal-install
bootstrap.sh fails on MacOS with GHC-8.2.1 を見ると、新しいCabalを用意したとの事なんで、bootstrap.shを書き換えてみた。けど、そんなのは まだ上がっていない。
しょうがないので、 The Cabal package をみたら、processの所が1.7に修正されてた。ならば、今有るやつを書き換えちゃえ。
Cabal-1.24.2.0/Cabal.cabalとCabal.cabal.hackageの該当部分を書き換えた。
そこは通過したけど、今度は
Configuring HTTP-4000.3.3... Setup: Encountered missing dependencies: base >=4.3.0.0 && <4.10, time >=1.1.2.3 && <1.7 Error during cabal-install bootstrap: Configuring the HTTP package failed.
今度は、bootstrap.shを書き換え
HTTP_VER="4000.3.7"; HTTP_VER_REGEXP="4000\.(2\.([5-9]|1[0-9]|2[0-9])|3\.?)"
# >= 4000.2.5 < 4000.4
お次のエラーは、
Configuring async-2.1.0... Setup: Encountered missing dependencies: base >=4.3 && <4.10
bootstrap.shのファイルを開いたままにしてのもぐら叩き(不毛ですな)
ASYNC_VER="2.1.1.1"; ASYNC_VER_REGEXP="2\."
# 2.*
今度な何だじゃなくて、今度は難だですよ!!
Configuring hashable-1.2.4.0... Setup: Encountered missing dependencies: base >=4.0 && <4.10
また修正
HASHABLE_VER="1.2.6.1"; HASHABLE_VER_REGEXP="1\."
# 1.*
次
Configuring cabal-install-1.24.0.2... Setup: Encountered missing dependencies: bytestring >=0.9 && <0.10.2, bytestring-builder >=0.10 && <1, directory ==1.1.*, process >=1.0.1.1 && <1.5
cabal-install.cabalを修正。いよいよ本山にかかったな。
build-depends: directory >= 1.2 && < 1.4,
process >= 1.1.0.2 && < 1.7
で、本山の登頂中に、意味不なエラーに遭遇したしたよ。
[ 65 of 106] Compiling Distribution.Client.ProjectPlanOutput ( Distribution/Client/ProjectPlanOutput.hs, dist/build/cabal/cabal-tmp/Distribution/Client/ProjectPlanOutput.o ) Error during cabal-install bootstrap: Building the cabal-install package failed.
こうなったら、パラレルコンパイルを止めて(-j無し)、普通にやってみます。
[ 7 of 106] Compiling Distribution.Client.Compat.Time ( Distribution/Client/Com
pat/Time.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Compat/Time.o )
Distribution/Client/Compat/Time.hs:130:41: error:
* Couldn't match type `time-1.8.0.2:Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime'
with `time-1.7:Data.Time.Clock.UTC.NominalDiffTime'
NB: `time-1.7:Data.Time.Clock.UTC.NominalDiffTime'
is defined in `Data.Time.Clock.UTC' in package `time-1.7'
`time-1.8.0.2:Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTim$'
is defined in `Data.Time.Clock.Internal.NominalDiffTime'
in package `time-1.8.0.2'
Expected type: POSIXTime
Actual type: time-1.8.0.2:Data.Time.Clock.Internal.POSIXTime.POSIXTime
* In the first argument of `posixTimeToModTime', namely
`(modificationTimeHiRes x)'
In the expression: posixTimeToModTime (modificationTimeHiRes x)
In an equation for `extractFileTime':
extractFileTime x = posixTimeToModTime (modificationTimeHiRes x)
|
130 | extractFileTime x = posixTimeToModTime (modificationTimeHiRes x)
| ^^^^^^^^^^^^^^^^^^^^^^^
Distribution/Client/Compat/Time.hs:158:41: error:
* Couldn't match expected type `time-1.7:Data.Time.Clock.UTC.UTCTime'
with actual type `time-1.8.0.2:Data.Time.Clock.Internal.UTCTime.UTCTime$
NB: `time-1.8.0.2:Data.Time.Clock.Internal.UTCTime.UTCTime'
is defined in `Data.Time.Clock.Internal.UTCTime'
in package `time-1.8.0.2'
`time-1.7:Data.Time.Clock.UTC.UTCTime'
is defined in `Data.Time.Clock.UTC' in package `time-1.7'
* In the second argument of `diffUTCTime', namely `t0'
In the first argument of `realToFrac', namely
`(t1 `diffUTCTime` t0)'
In the first argument of `(/)', namely
`realToFrac (t1 `diffUTCTime` t0)'
|
158 | return $ realToFrac (t1 `diffUTCTime` t0) / realToFrac posixDayLength
| ^^
Error during cabal-install bootstrap:
Building the cabal-install package failed.
今度は、ちゃんとエラーの所で止まってくれた。パラレル系は扱いが難しい。(今はそんな、突っ込みは無しです)
該当箇所 Distribution/Client/Compat/Time.hs
129#if MIN_VERSION_unix(2,6,0) 130extractFileTime x = posixTimeToModTime (modificationTimeHiRes x) 131#else 132extractFileTime x = posixSecondsToModTime $ fromIntegral $ fromEnum $ 133 modificationTime x 134#endif : 156#if MIN_VERSION_directory(1,2,0) 157 t1 <- getCurrentTime 158 return $ realToFrac (t1 `diffUTCTime` t0) / realToFrac posixDayLength 159#else 160 t1 <- getClockTime 161 let dt = normalizeTimeDiff (t1 `diffClockTimes` t0) 162 return $ fromIntegral ((24 * tdDay dt) + tdHour dt) / 24.0 163#endif
らちが明かないので、 Getting the Code Version Control cabalから、dev版を取ってきた。README.mdには、
Installing Cabal ---------------- Assuming that you have a pre-existing, older version of `cabal-install`, run: ~~~~ cabal install cabal-install
こんな事が書かれている。古いcabal-installを使って、Lift(ああ、haskell屋が好んで使う用語だな)しろとな。だからさー、オイラーの場合は諸般の事情で古いcabalは入れたくない訳よ。(古いghc属が諸々と入るため)
だめもとで、cabal-installに移動して、強引にbootstrap.shしたら、
[ 95 of 141] Compiling Distribution.Client.FetchUtils ( Distribution/Client/FetchUtils.hs,
dist/build/cabal/cabal-tmp/Distribution/Client/FetchUtils.o )
Distribution/Client/FetchUtils.hs:182:36: error:
* Couldn't match type `Distribution.Types.PackageId.PackageIdentifier'
with `Cabal-2.0.0.2:Distribution.Types.PackageId.PackageIdentifier'
NB: `Cabal-2.0.0.2:Distribution.Types.PackageId.PackageIdentifier'
is defined in `Distribution.Types.PackageId'
in package `Cabal-2.0.0.2'
`Distribution.Types.PackageId.PackageIdentifier'
is defined in `Distribution.Types.PackageId'
in package `Cabal-2.1.0.0'
Expected type: Cabal-2.0.0.2:Distribution.Types.PackageId.PackageIdentifier
Actual type: PackageId
* In the second argument of Sec.downloadPackage', namely `pkgid'
In a stmt of a 'do' block: Sec.downloadPackage' rep pkgid path
In the second argument of `($)', namely
`do info verbosity ("writing " ++ path)
Sec.downloadPackage' rep pkgid path'
|
182 | Sec.downloadPackage' rep pkgid path
| ^^^^^
Error during cabal-install bootstrap:
Building the cabal-install package failed.
やっぱり駄目か。しくしく(T_T)
そもそも、素直なghcを使おうと思ったのは、stackで際限なく増え続ける.stackに嫌気が さしたからだった。でも、普通に考えたら、ghcを使っていても、今度は,cabalが鬼のように 増え続ける事うけあい。
だったら、日よってstackにしとけ、、、これが苦労して得た結論かな。