i

Der Datentyp Maybe

Die Typbeschreibung untersuchen

In der Dokumentation (siehe Elm - Maybe) findet man folgende Typbeschreibung für den Datentyp Maybe.

type Maybe a
    = Just a
    | Nothing

Mit unserem bisherigen Wissen über die Erzeugung von Datentypen hätten wir z.B. folgenden Datentyp definieren können:

type VielleichtInt
    = Zahl Int
    | KeineZahl

Aufgabe 1

Beschreibe die Gemeinsamkeiten und Unterschiede zwischen den beiden Datentypen Maybe und VielleichtInt. Stelle insbesondere die Bedeutung der Typvariable a in der Definition von Maybe heraus.

Maybe Int

Wenn man die Typvariable a mit Int konkretisiert, dann heißt das, dass es genau zwei Sorten von Daten vom Datentyp Maybe Int gibt: Zum einen Daten wie Just 2 oder Just -4, die besagen, dass genau die betreffende Int-Zahl gemeint ist. Zum anderen gibt es den Datenwert Nothing, der besagt, dass es sich um nichts dergleichen (hier: um keine Int-Zahl) handelt.

Mit Daten vom Datentyp Maybe Int kann man genauso umgehen wie mit anderen Daten auch:

x : Maybe Int
x = Just 2

y : Maybe Int
y = Nothing

Wenn die beiden Werte x und y so definiert wurden, lassen sie sich in der REPL wie folgt testen:

> x
Just 2 : Maybe Int
> y
Nothing : Maybe Int

Aufgabe 2

(a) Teste das selbst in der REPL.

(b) Teste analog den Datentyp Maybe Float oder Maybe String.

Pattern Matching

Um auf die Werte von Maybe-Daten zuzugreifen, verwendet man Pattern Matching z.B. in der folgenden Art:

f : Maybe Int -> String
f wert =
    case wert of
        Nothing ->
            "Keine Zahl"

        Just _ ->
            "Zahl"


g : Maybe Int -> Int
g wert =
    case wert of
        Nothing ->
            -1

        Just n ->
            n

Das kennst du in genau dieser Form bereits von selbst definierten Datentypen aus dem vorherigen Kapitel. Der Datentyp Maybe ist also ein ganz normaler Datentyp, der genauso wie andere - selbst definierte - Datentypen auch verwendet werden kann. Der einzige Unterschied besteht darin, dass er bereits vordefiniert ist.

Aufgabe 3

Teste die beiden Funktionen in der REPL und erkläre wie sie funktionieren.

Suche

v
8.2.2.9.1.3 Der Datentyp Maybe
Kopieren durch Anklicken

Rückmeldung geben