checkObject (App o1 o2) context =
  do o1t <- checkObject o1 context
     o2t <- checkObject o2 context
     checkTerm o1t context
     checkTerm o2t context
     o3 <- checkApply (reduceTerm o1t) (reduceTerm o2t) o2
     return (reduceTerm o3)
checkObject (App o1 o2) context =
  do o1t <- checkObject o1 context
     o2t <- checkObject o2 context
     checkTerm o1t context
     checkTerm o2t context
     o3 <- checkApply (reduceTerm o1t) (reduceTerm o2t) o2
     return (reduceTerm o3)
checkObject (App o1 o2) context =
  do o1t <- checkObject o1 context
     o2t <- checkObject o2 context
     checkTerm o1t context
     checkTerm o2t context
     o3 <- checkApply (reduceTerm o1t) (reduceTerm o2t) o2
     return (reduceTerm o3)