flying3615
3/10/2017 - 10:55 AM

Curry and partially function example

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 _

}