The world's smallest large screen TV (phoonzang) wrote,
The world's smallest large screen TV
phoonzang

Category:

Functional Programming in Scala

Я заканчиваю читать/прорешивать девятую главу fpis'а, про парсинг. Субъективно она у меня заняла больше времени и усилий, чем восемь предыдущих.

Мне была не совсем понятна структура классов, чего ради надо было делать
trait Parsers[Parser[+_]] {
  def run[A](p: Parser[A])(input: String): Either[ParseError, A]
  ...
}

Потом я понял, что алгебра Parsers имеет гораздо более user-friendly сигнатуру методов типа run() и призвана скрыть plumbing состояний, которыми оперирует Parser[_].

Еще одно открытие: никаких громоздких классов для Parser[_] писать не нужно, вполне достаточно описать тип возвращаемого и употребляемого состояния (например, type Parser[A] = S => (A, S) для подходящего S), и все определения низкоуровневых парсеров можно закинуть в имплементацию Parsers.

Да, парсер JSON (упражнение 9.10) еще не написан и, тем более, не тестирован.
Tags: fpis
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments