www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

chris

Gepostet:
25.06.2008 12:16

Eigener Datentyp - Wert zuweisen  
Hallo,
ich möchte einen Datenyp mit 3 verschiedenen Typen von Konstruktoren erstellen.

So weit bin ich schon :

>data Distance = Endlich {endl :: Int} | Unbekannt | Unendlich
> deriving (Eq,Ord)


Jetzt will ich aber 'Endlich' einen Integer Wert zuweisen - und das klappt nicht.

Habs auch schon so ausprobiert:

>data Distance = Endlich | Unbekannt | Unendlich deriving (Eq,Ord)
>instance Show Distance where show(Unendlich) = "+inf"
> show(Endlich) = "0"

Aber mir fehlt da noch das Wissen um weiter zu kommen - brauche hilfe!

DANKE
Zum Seitenanfang    
 
Siracusa

Gepostet:
25.06.2008 17:04

   
Hallo,

du kannst einen endlichen Wert x folgendermaßen erstellen:
x :: Distance
x = Endlich { endl = 100 }
Allerdings würde ich davon abraten einen Record-Konstruktor mit anderen Konstruktoren gemischt zu verwenden. Das könnte Probleme bei der Musteranpassung von Distance-Werten geben. Überhaupt könnten Records für Anfänger möglicherweise an verschiedenen Stellen relativ verwirrend sein.

Ich schlage vor den Datentyp so umzuschreiben:
data Distance = Endlich Int | Unbekannt | Unendlich deriving (Eq, Ord)

-- Wertzuweisung:
x :: Distance
x = Endlich 100

-- Musteranpassung:
f :: Distance -> ...
f (Endlich x) = ...


Viele Grüße,

Siracusa
Zum Seitenanfang