2014-05-07 14 views
5

Tôi vừa cập nhật cabal và cố gắng cài đặt 'ống kính' khỏi bị tấn công. Điều đó đã cho tôi lỗi sau -độ phân giải phụ thuộc của cáp không thành công đối với 'ống kính'

$ cabal install -j lens 
Resolving dependencies... 
Configuring dlist-0.7.0.1... 
... <snip> 
Configuring mtl-2.0.1.0... 
Building mtl-2.0.1.0... 
Failed to install mtl-2.0.1.0 
Last 10 lines of the build log (/home/aj/.cabal/logs/mtl-2.0.1.0.log): 
Building mtl-2.0.1.0... 
Preprocessing library mtl-2.0.1.0... 
[ 1 of 21] Compiling Control.Monad.Writer.Class (
Control/Monad/Writer/Class.hs, dist/build/Control/Monad/Writer/Class.o) 
[ 2 of 21] Compiling Control.Monad.State.Class (Control/Monad/State/Class.hs, 
dist/build/Control/Monad/State/Class.o) 
[ 3 of 21] Compiling Control.Monad.Reader.Class (
Control/Monad/Reader/Class.hs, dist/build/Control/Monad/Reader/Class.o) 
[ 4 of 21] Compiling Control.Monad.RWS.Class (Control/Monad/RWS/Class.hs, 
dist/build/Control/Monad/RWS/Class.o) 
[ 5 of 21] Compiling Control.Monad.Identity (Control/Monad/Identity.hs, 
dist/build/Control/Monad/Identity.o) 
[ 6 of 21] Compiling Control.Monad.Error.Class (Control/Monad/Error/Class.hs, 
dist/build/Control/Monad/Error/Class.o) 
Control/Monad/Error/Class.hs:93:18: Not in scope: `catch' 
... <snip> 
cabal: Error: some packages failed to install: 
aeson-0.7.0.3 depends on mtl-2.0.1.0 which failed to install. 
exceptions-0.6 depends on mtl-2.0.1.0 which failed to install. 
free-4.7.1 depends on mtl-2.0.1.0 which failed to install. 
lens-4.1.2 depends on mtl-2.0.1.0 which failed to install. 
mtl-2.0.1.0 failed during the building phase. The exception was: 
ExitFailure 1 

Vì vậy, có vẻ như mtl-2.0.1.0 bị hỏng. Tuy nhiên một số phụ thuộc nhiều hơn theo dõi cho thấy rằng không có gì trong định nghĩa gói ống kính thực sự phụ thuộc vào phiên bản của mtl. Infact, điều tiếp theo tôi đã thử là -

$ cabal install -j aeson 
$ cabal install -j free 
$ cabal install -j lens 

Và điều đó thành công mà không có vấn đề gì.

Vậy tại sao cabal lại cố gắng cài đặt mtl-2.0.1.0 khi cài đặt trực tiếp lens? Tôi đã thử gỡ bỏ thư mục .ghc và .cabal của tôi và lặp lại các bước, với cùng một kết quả. Phiên bản cabal tôi đang sử dụng là 1.16 -

$ cabal -V 
cabal-install version 1.16.0.2 
using version 1.16.0 of the Cabal library 
+0

này liên quan đến bản cập nhật gần đây của 'máy biến áp'. Nếu bạn có thể chờ một vài ngày cho đến khi các gói tùy thuộc vào 'máy biến áp' được nâng cấp, bạn không nên gặp phải bất kỳ sự cố nào khi cài đặt 'ống kính'. –

+0

@DannyNavarro Tôi cũng đã quản lý để cài đặt ống kính bằng phương pháp trên. Câu hỏi đặt ra là nhiều hơn - tại sao, nếu 'cabal install lens' thất bại, liệu cabal install aeson && cabal install free && cabal install lens' có hoạt động không? –

+0

Tôi đoán nó hoạt động bởi vì, bằng cách cài đặt 'free' và' aeson' đầu tiên, bạn đang buộc 'cabal' sử dụng các phiên bản đã cài đặt thay vì chọn chúng. Có vẻ như chọn một số phiên bản gói sử dụng 'mtl-2.0.1.0'. Có lẽ đó là một giới hạn trên trong phụ thuộc 'aeson' hoặc' miễn phí', nhưng rất có thể nó sẽ là một số gói khác sâu hơn trong biểu đồ phụ thuộc. –

Trả lời

0

Tôi cũng đã đánh lừa lỗi này. Tôi nghĩ rằng tôi đã cố gắng khắc phục ngay bây giờ bằng cách giải nén thủ công mtl-2.0.1.0, thêm rõ ràng catch vào danh sách nhập Control.Exception trong Control/Monad/Error/Class.hs (L: 55), sau đó chạy cabal install.

Sau đó tôi có thể chạy cabal install lens. Tôi muốn được quan tâm để biết nếu điều đó làm việc cho bạn quá!

1

Cách giải quyết mà tôi đang sử dụng là trước hết phải cài đặt máy biến áp-compat với các máy biến áp 3 lá cờ

$ cabal install -ftransformer3 transformers-compat 

và sau đó cài đặt ống kính với máy biến áp 0.3.0.0 chế

$ cabal install --constraint="transformers==0.3.0.0" lens 
Các vấn đề liên quan