bstitute lcAbs@(LcAbs newParam fn) oldParam new
  | newParam /= oldParam = LcAbs newParam $ substitute fn oldParam new
  | otherwise            = lcAbs -
substitute lcAbs@(LcAbs newParam fn) oldParam new
  | newParam /= oldParam = LcAbs newParam $ substitute fn oldParam new
  | otherwise            = lcAbs
substitute lcAbs@(LcAbs newParam fn) oldParam new
  | newParam /= oldParam = LcAbs newParam $ substitute fn oldParam new
  | otherwise            = lcAbs