2011-11-19 10 views
5

Mam pytanie: Jak mogę przesłonić metodę show dla String lub Char? Dzięki.Metoda przesłonięcia show dla String/Char w Haskell

+1

Czy istnieje powód, dla którego nie chcesz definiować innych funkcji typu "Char -> String' lub" String -> String'? Dlaczego chcesz zastąpić 'show'? – hammar

+4

Myślę, że musisz zawinąć go w [nowy typ] (http://www.haskell.org/haskellwiki/Newtype) i zdefiniować opcję Pokaż dla tego typu. –

Odpowiedz

2

Jeśli chcesz to zrobić, robisz to źle.

Dla bardziej technicznego powodu, patrz my answer na poprzednie pytanie.

Ty naprawdę powinien być używany zarówno własne a -> String funkcji (ewentualnie za pośrednictwem własnego typu klasy) lub użyć ładnego drukowania bibliotekę dla bardziej szczegółowych wyjść (z których niektóre mają już wbudowany Pretty klasę).

8

Ponieważ ludzie wydają się podoba mój komentarz, to jest tutaj jako odpowiedź:

Jeśli chcesz reimplement zajęcia typu na istniejących typów, można owinąć je w newtype typu -declared. Pozwala to na zdefiniowanie własnych implementacji bez rzeczywistego narzutu w czasie wykonywania (ponieważ newtype jest izomorficzny w stosunku do oryginalnego typu, nie ma faktycznego boksowania w środowisku wykonawczym).

Może to wyglądać mniej więcej tak:

newtype MyChar = MyChar Char 

instance Show MyChar where 
    show (MyChar c) = "head \"" ++ c : "\"" 

Możesz użyć tego owijając Char S z MyChar, tak:

print $ fmap MyChar "test" 

To będzie wydrukować

[head "t",head "e",head "s",head "t"] 
+0

Możesz także zdefiniować showList, a następnie listy MyChar będą miały również niestandardowe formatowanie. W rzeczywistości dlatego wyświetlanie list znaków ([Char]) zachowuje się inaczej niż pokazywanie innych list ([a]). – sdcvvc

Powiązane problemy