Schema definitions
You can create validation schema using composition or using implicits
import pl.muninn.simple.validation._
 case class Field(name:String, otherField:String)
 val compositionSchema:ValidationSchema[Field] = createSchema { context =>
   context.field(_.name).is(notEmptyString and minimalLengthString(8)) +
     context.field(_.otherField).is(notEmptyString)
 }
// compositionSchema: ValidationSchema[Field] = <function1>
 compositionSchema.validate(Field("",""))
// res0: ValidationResult = Invalid(
//   e = Append(
//     leftNE = Append(
//       leftNE = Singleton(a = EmptyField(field = "name")),
//       rightNE = Singleton(
//         a = MinimalLength(field = "name", expected = 8, value = 0)
//       )
//     ),
//     rightNE = Singleton(a = EmptyField(field = "otherField"))
//   )
// )
 val implicitSchema:ValidationSchema[Field] = createSchema { context =>
   (context.field(_.name).notEmpty and minimalLengthString(8)) +
     context.field(_.otherField).notEmpty
 }
// implicitSchema: ValidationSchema[Field] = <function1>
 implicitSchema.validate(Field("",""))
// res1: ValidationResult = Invalid(
//   e = Append(
//     leftNE = Append(
//       leftNE = Singleton(a = EmptyField(field = "name")),
//       rightNE = Singleton(
//         a = MinimalLength(field = "name", expected = 8, value = 0)
//       )
//     ),
//     rightNE = Singleton(a = EmptyField(field = "otherField"))
//   )
// )