Lub is an experiment in computing least upper information bounds on (partially defined) functional values.
It provides a
lub function that is consistent with the unamb operator but has a more liberal precondition.
unamb requires its arguments to equal when neither is bottom,
lub is able to synthesize a value from the partial information contained in both of its arguments, which is useful with non-flat types.
For more info on
unamb, see the unamb package package on Hackage and on GitHub.
I got inspired for this package after stimulating discussions with Thomas Davie, Russell O'Connor others in the #haskell gang.