2013-02-13 5 views
1

Я пытаюсь написать экземпляр show, чтобы отобразить сформированную формулу, но после имитации всего синтаксиса я все еще сталкиваюсь с той же ошибкой, что и ниже.Haskell: Показать экземпляр Ambiguity

Hugs> :load "C:\\Users\\Devil\\Desktop\\CASESTUDY1.hs" 
ERROR file:.\CASESTUDY1.hs:15 - Ambiguous variable occurrence "show" 
*** Could refer to: CASESTUDY1.show Hugs.Prelude.show 

Ниже приведено содержимое моего файла .hs, включая тип данных и соответствующий экземпляр show.

module CASESTUDY1 

where 

data Wff = VAR String 
      | NEG Wff 
      | AND Wff Wff 
      | OR Wff Wff 
      | IMPL Wff Wff 

instance Show Wff where 
show (VAR x) = x 
show (NEG x) = "~" ++ show(x) 
show (AND x y) = "(" ++ show(x) ++ "^" ++ show(y) ++ ")" 
show (OR x y) = "(" ++ show(x) ++ "v" ++ show(y) ++ ")" 
show (IMPL x y) = "(" ++ show(x) ++ "-->" ++ show(y) ++ ")" 

ответ

4

В haskell важное значение имеет пробел. Вам необходимо отложить show, принадлежащие вашему экземпляру Show.

instance Show Wff where 
    show (VAR x)  = show x 
    show (NEG x)  = "~" ++ show x 
    show (AND x y) = "(" ++ show x ++ "^" ++ show y ++ ")" 
    show (OR x y) = "(" ++ show x ++ "v" ++ show y ++ ")" 
    show (IMPL x y) = "(" ++ show x ++ "-->" ++ show y ++ ")" 

Кроме того, вам не нужны скобки для передачи параметров для отображения. show(x) должно быть show x.


Если вы изучаете Haskell Я рекомендую эти исключительные ресурсы:

+0

Спасибо большое Dacto, это было так давно я прикоснулся Haskell .. спасибо u очень очень ... –

+0

Не беспокойтесь, получайте удовольствие! – Dacto