An alpha-beta game-solver that looks like a minimax solver.
The very straightforward solve function in MiniMax.hs is reused in the solve
implementation of AlphaBeta.hs. However, AlphaBeta applies a wrapper to the
game values such that eg.
minimum [maximum [4,3], maximum [5,x]]
and
maximum [minimum [4,5], minimum [2,x]]
evaluate to 4 without ever evaluating x (in particular, even if x is ⊥).
When these wrappers are applied to lazily constructed terms in a thunk representing the output of a minimax solver, this turns out to be exactly equivalent to an alpha-beta solver.