Was wir brauchen, ist
bind :: Maybe a -> (a -> Maybe b) -> Maybe b bind Nothing f = Nothing bind (Just x) f = f xDann 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 rsubDas ist schon bessere Form. Wir sehen keine case oder if, sondern nur noch hintereinandergehängte Funktionen und Bindungen.