module Main where

-- Definiert einen simplen container für unsere Werte
data Box a = Box a deriving (Show, Eq)

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

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

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


-- Tests
main :: IO ()
main = do
    print $ unit 10  -- Box 10
