Upload
tkconf
View
52
Download
1
Embed Size (px)
Citation preview
var irony = None
def job(programmer, vodka, spec) = { irony = Some("Stupid managers") programmer.drink(vodka).drop(spec)}
Разберем простой веб-сервис.
Получаем запрос из сети Загружаем состояние из БД Обновляем состояние в БД Отправляем ответ в сеть
def read(): DirtyHack[String] = new DirtyHack(readln())
def write(s: String): DirtyHack[Unit] = new DirtyHack(println(s))
def sum(input: String): Int = input.split(' ').map(_.toInt).sum
write("Enter numbers") foo { _ => read() foo { input => write(s"Sum is ${sum(input)}") }}
trait Functor[F[_]] extends Any { def pure[T](x: T): F[T] def map[B](f: F[A])(pred: A => B): F[B]}
trait Monad[M[_]] extends Functor[M] { def bind[B](f: M[A])(pred: A => M[B]): M[B]}
Да мы занимаемся этим каждый день!
● Изолируем состояние● Абстрагируемся от ввода-вывода● Стараемся не возвращать null
List(1,2,3,4,5,6).collect({case x if x % 2 == 0 => x *0.5}).sorted.map(_.toString).flatMap(x => List(x, x *2))