Slide 1

Slide 1 text

FRP. Reflex @sigrlami

Slide 2

Slide 2 text

FRP.Functional Reactive Programming

Slide 3

Slide 3 text

FRP.Reactive Programming ● Декларативность ● Потоки данных (Data Flow first, Сontrol Flow vs Data Flow) ● Понятие времени

Slide 4

Slide 4 text

Типичные примеры ● HDLs (Hardware Description Language) ● Табличный редактор ● Естественный параллелизм FRP.Reactive Programming

Slide 5

Slide 5 text

● Компонуемость (Composability) ● Локальная оценка (Local Reasoning) ● Трансформируемость (Transformative) FRP. Functional Programming

Slide 6

Slide 6 text

FRP.Functional Reactive Programming ● Графический интерфейс (UI) – Элементы выбора – Действия с мышью (устройствами ввода) ● Обновление коллекций ● Анимация

Slide 7

Slide 7 text

FRP.Functional Reactive Programming История ● Conal Elliott 1997 ● Paul Hudak 2000

Slide 8

Slide 8 text

FRP.Functional Reactive Programming Библиотеки в ЯП

Slide 9

Slide 9 text

● Библиотеки в Haskell – Reactive-Banana – Arrows – Yampa – Reflex FRP.Functional Reactive Programming

Slide 10

Slide 10 text

● Reflex - cпецификация FRP и ее реализация ● Образует платформу reflex-platform – reflex – reflex-dom – reflex-contrib FRP.Reflex

Slide 11

Slide 11 text

● Практичный ФРП должен быть выразительными, понятными и эффективными ● Практичный ФРП должен иметь динамическое обновление потока данных ● Практичный ФРП должен использовать идеоматический Haskell FRP.Reflex

Slide 12

Slide 12 text

● Reflex 10 примитивов в одном Сlass – 8 чистых – 2 монадических FRP.Reflex

Slide 13

Slide 13 text

Event t a Behaviour t a never :: Event t a constant :: a -> Behavior t a push :: (a -> PushM t (Maybe b)) -> Event t a -> Event t b pull :: PullM t a -> Behavior t a merge :: GCompare k => DMap (WrapArg (Event t) k) -> Event t (DMap k) fan :: GCompare k => Event t (DMap k) -> EventSelector t k select :: EventSelector t k -> k a -> Event t a switch :: Behavior t (Event t a) -> Event t a coincidence :: Event t (Event t a) -> Event t a FRP.Reflex

Slide 14

Slide 14 text

Dynamic t a = Dynamic (Behavior t a) (Event t a) комбинация поведения и события FRP.Reflex

Slide 15

Slide 15 text

● Reflex монада комбинация reader и write ● Подписка событий ● Подписка слушателей FRP.Reflex

Slide 16

Slide 16 text

Reflex-Dom / GHCJS Фронтэнд для работы с DOM (Html документами) FRP.Reflex

Slide 17

Slide 17 text

● Примеры FRP.Reflex