?

Log in

No account? Create an account

Functional Programming in Scala - The world's smallest large screen TV — LiveJournal

Sep. 26th, 2018

10:02 pm - Functional Programming in Scala

Previous Entry Share Flag Next Entry

Я заканчиваю читать/прорешивать девятую главу 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: