Curry and partially function example
package partialFun
/**
* Created by liuyufei on 10/03/17.
*/
class Mail extends App {
case class Email(subject: String, text: String, sender: String, recipient: String)
type EmailFilter = Email => Boolean
type IntPairPred = (Int, Int) => Boolean
def sizeConstraint(pred: IntPairPred)(n: Int)(email: Email) = pred(email.text.size, n)
val gt: IntPairPred = _ > _
val ge: IntPairPred = _ >= _
val lt: IntPairPred = _ < _
val le: IntPairPred = _ <= _
val eq: IntPairPred = _ == _
val minSize: Int => Email => Boolean = sizeConstraint(ge)
val maxSize: Int => Email => Boolean = sizeConstraint(le)
val min20: Email => Boolean = minSize(20)
val max20: Email => Boolean = maxSize(20)
//convert method to a function object
val sizeConstraintFn: (IntPairPred, Int, Email) => Boolean = sizeConstraint _
val sizeConstraintFN: IntPairPred => Int => Email => Boolean = sizeConstraint _
}