function: String => ParseResult ParseResult is a Success(result, rest) or Failure(message) “abc” => Success(“a”, “bc”) “” => Failure(“string is empty”)
is a higher-order function that accepts several parsers as input and returns a new parser as its output https://en.wikipedia.org/wiki/Parser_combinator
model object Json { sealed trait JsonVal case class JsonStringVal(s:String) extends JsonVal case class JsonIntVal(i:Int) extends JsonVal case class JsonArray(items: List[JsonVal]) extends JsonVal case class JsonNull() extends JsonVal case class JsonKey(k:String) case class JsonEntry(k:JsonKey, v:JsonVal) case class JsonObject(attrs:List[JsonEntry]) extends JsonVal }