سؤال

أثناء تقييم الخط "استيراد Control.Monad.State" في وحدة Haskell، يعطيني GHC الخطأ التالي:

Could not find module `Control.Monad.State':
  it was found in multiple packages: monads-fd-0.0.0.1 mtl-1.1.0.2
Failed, modules loaded: none.

كيف يمكنني حل هذا الصراع؟

هل كانت مفيدة؟

المحلول

لديك العديد من الخيارات. أيضاً:

  • ghc-pkg hide monads-fd. وبعد سيؤدي ذلك إلى تجاهل GHC و GHCI وجود monads-fd افتراضيا حتى تحصل في وقت لاحق ghc-pkg expose monads-fd, ، ولكن البرامج المثبتة بواسطة Cabal ستظل قادرة على البناء ضدها.
  • استخدم ال {-# LANGUAGE PackageImports #-} براغما، وتغيير بيان الاستيراد الخاص بك ل import "mtl" Control.Monad.State.
  • استخدم Cabal لإنشاء مشروعك، وتحديد mtl في ال Build-depends خط.

الأول هو الأفضل للقرصنة عارضة، والأخير هو الأفضل للإنتاج.

هذه كلها تفترض أنك تريد mtl الوحدة وليس monads-fd وحدة؛ تبادل لهم خلاف ذلك.

نصائح أخرى

كلا الحزمتين تقوم بتنفيذ Control.monad.state و GHC لا يعرف التنفيذ الذي يجب أن يفضله، لذلك تحتاج إلى إخفاء أحد الحزم من GHC. يبدو وكأنه -ignore-package <name> العلم GHC قد يساعدك هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top