Nochmal Unify

Wir benötigen im vorangegangenen Beispiel (Unifizieren) eine bessere Schreibweise für hintereinandergehängte Maybes. Es geht aber nicht einfach um eine Folge (Liste) von Maybes, sondern der zweite Wert (Subsitution für die rechten Teilbäume) hängt ja von dem ersten (Unifikator für die linken) ab.

Was wir brauchen, ist

bind :: Maybe a -> (a -> Maybe b) -> Maybe b
bind Nothing f = Nothing
bind (Just x) f = f x
Dann könnten wir so schreiben:
uni current t1 t2 =
    bind ( uni current (left t1) (left t2))   $ \ lsub ->
    bind ( uni lsub (apply lsub (right t1))
		    (apply lsub (right t2)) ) $ \ rsub ->
    Just rsub
Das ist schon bessere Form. Wir sehen keine case oder if, sondern nur noch hintereinandergehängte Funktionen und Bindungen.