हैलो हास्केल समुदाय,जब GHCi में संकलित मॉड्यूल लोड हो रहा है
मैं हास्केल के लिए नया हूँ और कोई समस्या हुई थी जब मैं अपनी पहली बड़ी परियोजना की संरचना करने की कोशिश की त्रुटि 'इंटरफेस लोड करने में विफल'।
यहां समस्या का न्यूनतम उदाहरण है (मैं निर्माण करने के लिए कैबल का उपयोग कर रहा हूं)।
FooMod1
|- FooMod1.cabal
|- Setup.hs
|- src
|- FooMod1.hs
|- FooMod1
|- C1.hs
|- T1.hs
FooMod1.hs के लिए स्रोत:
module FooMod1 (
C1(..) ,
T1(..) ,
) where
import FooMod1.C1
import FooMod1.T1
स्रोत C1.hs के लिए:
यह एक सरल मॉड्यूल की निर्देशिका संरचना है
module FooMod1.C1 (
C1(..)
) where
class C1 a where
c1FooFun :: a -> IO()
T1.hs के लिए स्रोत:
module FooMod1.T1 (
T1(..)
) where
import FooMod1.C1
data T1 = T1 deriving(Show)
instance C1 T1 where
c1FooFun T1 = putStrLn "c1FooFun from T1"
कबाल फ़ाइल के लिए स्रोत:
Name: FooMod1
Version: 0.0.1
Cabal-version: >=1.10
Build-type: Simple
library
build-depends: base >= 4 && < 5
if impl(ghc >= 7.0.0)
default-language: Haskell2010
ghc-options: -Wall
exposed-modules: FooMod1
ghc-options: -Wall -rtsopts
hs-source-dirs: src, src/FooMod1
default-language: Haskell2010
और Setup.hs:
module Main where
import Distribution.Simple
main = defaultMain
मैं बिना किसी समस्या के
cabal configure
cabal build
cabal install
कर सकते हैं। जब मैं ghci और
import FooMod1
यह मॉड्यूल लोड करता है और मैं डेटा कन्स्ट्रक्टर देख सकता हूं। लेकिन जब मैं उदाहरण
:t c1FooFun
के लिए एक समारोह के प्रकार मिलता है या एक मूल्य मैं का निर्माण करने का प्रयास करें:
Failed to load interface for `FooMod1.C1'
There are files missing in the `FooMod1-0.0.1' package,
try running 'ghc-pkg check'.
Use -v to see a list of the files searched for.
In the expression: c1FooFun
'GHC-pkg जांच' कुछ भी नहीं पता चलता है।
मुझे क्या याद आ रही है? मैंने इसे हास्केल 2010 मानक (http://www.haskell.org/onlinereport/haskell2010/haskellch5.html) में देखा और मुझे त्रुटि नहीं मिली। तो मेरे प्रश्न
1) मुझे यह त्रुटि क्यों मिल रही है?
2) क्या उस अच्छे अभ्यास की तरह पदानुक्रमित मॉड्यूल तैयार कर रहा है? (काफी बड़े कार्यक्रमों को मानें)
अग्रिम में बहुत धन्यवाद!
जूल्स
मुझे लगता है कि आपकी कैबल फ़ाइल में 'अन्य मॉड्यूल:' लाइन गुम है। आपने इसे केवल 'FooMod1' मॉड्यूल के बारे में बताया है। मुझे यकीन नहीं है कि यह संकलन त्रुटि क्यों नहीं है। – asm
@ एंड्रयू: आपको बहुत धन्यवाद कि समस्या थी ... क्या आप समाधान को उत्तर के रूप में दोबारा पोस्ट कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं? – jules