The following data types represent simple arithmetic expressions:
```scala
abstractclassExpr
caseclassNumber(x:Int)extendsExpr
caseclassVar(name:String)extendsExpr
caseclassSum(e1:Expr,e2:Expr)extendsExpr
caseclassProd(e1:Expr,e2:Expr)extendsExpr
```
Define a function `deriv(expr: Expr, v: String): Expr` returning the expression that is the partial derivative of `expr` with respect to the variable `v`.
Write an expression simplifier that applies some arithmetic simplifications to an expression. For example, it would turn the above monstrous result into the following expression: