読者です 読者をやめる 読者になる 読者になる

Hackageメタデータの依存関係だけ更新してどうするの?

(追記) cabal update で反映される模様?

Agda-2.4.2.5のDependenciesで,unordered-containersを見て欲しい.依存関係が >=0.2.5.0 && <0.2.6 となっているが,これはHackage上のパッケージメタデータのみをパッケージアップロード後に編集したもので,実際2016/1/25現在見えているメタデータrev 1となっている.編集前の依存関係では >=0.2.5.0 && <0.3 であり,これはパッケージ登録時の.cabalファイルからのものだ.

実際,unordered-containers-0.2.6.0によりAgda-2.4.2.5のビルドは失敗する.

src/full/Agda/Utils/HashMap.hs:3:5:
    Ambiguous occurrence ‘mapMaybe’
    It could refer to either ‘Agda.Utils.HashMap.mapMaybe’,
                             defined at src/full/Agda/Utils/HashMap.hs:17:1
                          or ‘HashMap.mapMaybe’,
                             imported from ‘Data.HashMap.Strict’ at src/full/Agda/Utils/HashMap.hs:8:1-37

src/full/Agda/Utils/HashMap.hs:3:5:
    Conflicting exports for ‘mapMaybe’:
       ‘module HashMap’ exports ‘HashMap.mapMaybe’
         imported from ‘Data.HashMap.Strict’ at src/full/Agda/Utils/HashMap.hs:8:1-37
       ‘mapMaybe’ exports ‘Agda.Utils.HashMap.mapMaybe’
         defined at src/full/Agda/Utils/HashMap.hs:17:1

src/full/Agda/Utils/HashMap.hs:4:5:
    Ambiguous occurrence ‘alter’
    It could refer to either ‘Agda.Utils.HashMap.alter’,
                             defined at src/full/Agda/Utils/HashMap.hs:23:1
                          or ‘HashMap.alter’,
                             imported from ‘Data.HashMap.Strict’ at src/full/Agda/Utils/HashMap.hs:8:1-37

src/full/Agda/Utils/HashMap.hs:4:5:
    Conflicting exports for ‘alter’:
       ‘module HashMap’ exports ‘HashMap.alter’
         imported from ‘Data.HashMap.Strict’ at src/full/Agda/Utils/HashMap.hs:8:1-37
       ‘alter’ exports ‘Agda.Utils.HashMap.alter’
         defined at src/full/Agda/Utils/HashMap.hs:23:1

でも今は,そんな事はどうでもいいんだ.重要なことじゃない.

問題はHackageに登録されたパッケージメタデータで依存関係を編集したところで,そのパッケージそのものの依存関係の実体(つまり,アップロードされたパッケージ内のcabalファイルの中身)には何も関係が無いということだ.このことは古事記メタデータrevisionのページにもそう書かれている

Package maintainers and Hackage trustees are allowed to edit certain bits of package metadata after a release, without uploading a new tarball. Note that the tarball itself is never changed, just the metadata that is stored separately.

つまり,Agda-2.4.2.5に含まれるAgda.cabalファイルのunordered-containers依存関係は,依然として >=0.2.5.0 && <0.3 である.cabal install時にビルド失敗するunordered-containers-0.2.6.0を引き入れるのに全く躊躇が無い.アップロードしたパッケージを変更できないのだから,メタデータを弄ろうが弄るまいがこのこと自体には変わりは無い.インターフェースが消えた*1ならともかく増えた*2ことでビルド失敗するようになったAgdaは不運だったとも言える.だけど,それならそれで依存関係弄ってバージョン上げるとかするような話であり,Hackageのメタデータだけ弄っても何の解決にもならない.むしろ混乱を招く.

そもそも,.cabal内に入ってないデータならともかく,入ってるデータまでパッケージとは独立にHackage上で編集できるって一体何のための機能なんだ.正直理解できない.

*1:unordered-containersのバージョンが0.3以上になるはず

*2:unordered-containersのバージョンが0.3以上にならないかもしれない,実際0.2.6.0になった