2013-05-07 9 views
7

मैं वर्तमान में टाइप कक्षाओं को लिखना सीख रहा हूं। मैं संदिग्ध घटना की संकलन त्रुटियों के साथ ऑर्ड प्रकार वर्ग लिखने के लिए प्रतीत नहीं कर सकता।संदिग्ध घटना

module Practice where 

class (Eq a) => Ord a where 
    compare    :: a -> a -> Ordering 
    (<), (<=), (>=), (>) :: a -> a -> Bool 
    max, min    :: a -> a -> a 

    -- Minimal complete definition: 
    --  (<=) or compare 
    -- Using compare can be more efficient for complex types. 
    compare x y 
     | x == y = EQ 
     | x <= y = LT 
     | otherwise = GT 

    x <= y   = compare x y /= GT 
    x < y   = compare x y == LT 
    x >= y   = compare x y /= LT 
    x > y   = compare x y == GT 

    -- note that (min x y, max x y) = (x,y) or (y,x) 
    max x y 
     | x <= y = y 
     | otherwise = x 
    min x y 
     | x <= y = x 
     | otherwise = y 

त्रुटियाँ

Practice.hs:26:14: 
    Ambiguous occurrence `<=' 
    It could refer to either `Practice.<=', defined at Practice.hs:5:10 
          or `Prelude.<=', 
          imported from `Prelude' at Practice.hs:1:8-15 
... 

और इतने पर कर रहे हैं। मुझे लगता है कि यह प्रीलूड परिभाषित संस्करण के साथ संघर्ष कर रहा है।

उत्तर

19

समस्या यह है कि आपके कार्यों के नाम प्रीलूड से मानक लोगों के साथ संघर्ष कर रहे हैं।

इस हल करने के लिए, आप एक स्पष्ट आयात घोषणा जो परस्पर विरोधी नाम खाल जोड़ सकते हैं:

module Practice where 

import Prelude hiding (Ord, compare, (<), (<=), (>=), (>), max, min) 

... 
+0

Thanks.That मेरी समस्या हल के बहुत शुरुआत में लेखन

{-# LANGUAGE NoImplicitPrelude #-} 

सक्रिय किया जा सकता – user1850254

10

Hammar सही है, क्योंकि मानक प्रस्तावना नाम के साथ टकरा की है। लेकिन प्रीलूड से hiding नामों के अलावा अन्य समाधान भी हैं।

आप प्रस्तावना योग्य आयात कर सकते हैं:

module Practice where 

import qualified Prelude as P 

... 

इसके बाद, आप दोनों आप और समारोह के मानक संस्करण में पहुँच प्राप्त कर सकते हैं: max अपने संस्करण पर अमल होगा, और P.max मानक प्रस्तावना के निष्पादित करेंगे।

सभी मानक प्रीलूड फ़ंक्शंस को पूरी तरह से छिपाने का भी तरीका है: जीएचसी का विस्तार NoImplicitPrelude (http://www.haskell.org/haskellwiki/No_import_of_Prelude)। यह आपकी फ़ाइल

संबंधित मुद्दे