checkApply (O (Prod _ t1 o1)) t2 o2 =
  if unify t1 t2 then return (O (substObject o1 o2)) else Left (TypeMismatch t1 t2)
checkApply (O (Prod _ t1 o1)) t2 o2 =
  if unify t1 t2 then return (O (substObject o1 o2)) else Left (TypeMismatch t1 t2)
checkApply (O (Prod _ t1 o1)) t2 o2 =
  if unify t1 t2 then return (O (substObject o1 o2)) else Left (TypeMismatch t1 t2)