module Main where

-- Definiere eine einfache Datenstruktur für DOM-Elemente
data DOM a = Element a [DOM a] | EmptyElement deriving (Show, Eq)

-- Schreibe die Unit funktion, welche einen Wert in einen DOM-Container verschachtelt!
unit :: a -> DOM a


-- Schreibe die Bind Funktion, welches es einem Erlaubt funktionen des Monadischen Typen DOM zu verketten
bind :: DOM a -> (a -> DOM b) -> DOM b


-- Schreibe eine Lift Funktion, welche eine Funtion nimmt und diesselbe funktion mit den Monadischen Werten DOM als Eigabe und Ausgabetyp besitzt
lift :: (a -> b) -> DOM a -> DOM b


-- Hauptfunktion zum Ausführen von Tests
main :: IO ()
main = do
    print $ unit "root"  -- Element "root" []