Definition eines neuen Datentyps
Eine Typdeklaration verwenden
Der einfachste Weg aus der im letzten Abschnitt beschriebenen Problematik besteht darin, selbst einen neuen Datentyp für den Status einzuführen.
Die folgenden Abschnitte passen noch nicht zum Beispiel bzw. sind noch nicht fertig...
Typdefinition ohne Benutzername
type LoginStatus
= Abgemeldet
| Angemeldet
In der REPL lässt dies direkt verwenden:
> Abgemeldet
Abgemeldet : LoginStatus
> Angemeldet
Angemeldet : LoginStatus
Aufgabe
Erkläre die Ausgabe in der REPL.
Typdefinition mit Benutzername
type LoginStatus
= Abgemeldet
| Angemeldet String
module Interpreter exposing (..)
type Befehl
= LI -- links
| RE -- rechts
| VW Int -- vorwärts ...
> import Interpreter exposing (..)
> LI
LI : Befehl
> VW 2
VW 2 : Befehl
> [VW 2, RE, VW 4, LI, VW 2]
[VW 2,RE,VW 4,LI,VW 2]
: List Befehl
Mit type Befehl
wird der neue Datentyp Befehl
definiert.
Die Datenwerte des neuen Datentyps Befehl
werden in der Typdeklaration genau angegeben. Es sind die Datenwerte LI
und RE
für die Drehungen sowie VW ...
(wobei hier für die drei Punkte eine Int
-Zahl eingesetzt werden muss) für die Vorwärtsbewegung.
Mit diesen Datenwerten vom Typ Befehl
kann man jetzt eine Liste mit Daten des Typs Befehl
erstellen.
Die Welt ist damit für Elm wieder in Ordnung.
Aufgabe 1
Teste die oben gezeigte Typdeklaration mit einer selbst vorgegebenen Befehlsliste.
Aufgabe 2
Der folgende Quelltext enthält weitere Typdeklarationen. Analysiere den Quelltext und erläutere alle Detail. Teste selbst.
module Interpreter exposing (..)
type Befehl
= LI -- links
| RE -- rechts
| VW Int -- vorwärts ...
type alias Programm = List Befehl
programm1: Programm
programm1 = [VW 2, RE, VW 4, LI, VW 2]
type Richtung
= N -- Norden
| O -- Osten
| S -- Süden
| W -- Westen
type alias Akteur = (Int, Int, Richtung)
akteur: Akteur
akteur = (0,0,N)
> import Interpreter exposing (..)
> akteur
(0,0,N) : Akteur
> programm1
[VW 2,RE,VW 4,LI,VW 2]
: Programm