Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2016-07-15

FP

Всем, кто начал вникать в functional programming, смотреть и слушать обязательно:

Основные принципы объясняются настолько доступно, что даже я всё понял.

О чём речь, собственно:

Core Principles of FP design
– functions, types, composition
Functions as parameters
– functions as interface
– partial application & dependency injection
– continuations, chaining & the pyramid of doom
Monads
– error handling, async
Maps
– dealing with wrapped data
– functors
Monoids
– aggregating data and operations


types are not classes (more like sets, valid input/output values)

types separate data from behaviour, can compose types

algebraic types; product types; sum types (choice/union)

totality, total/partial functions

for composition you need functions with one parameter:
currying – every function is a one parameter function

currying/partial application – dependency injection, continuations

chaining continuations takes us to monads: monadic bind;
use bind to chain error handlers, Railway Oriented Programming

Mappable types are 'functors':
Option.map: lifting operations to Option world / List, Future, … other monads and wrapped types

monoid: math term: closure + 'zero' (identity element) + associativity
semigroup = monoid – zero

any combination of monoids = monoid; define a combinator and get aggregation for free (reduce);
incremental updates, parallelizm, missing data handling

convert non-monoid (customer) to a monoid (customerStats), using map;
… reduce // 'Hadoop make me a sandwich'

convert expensive monoids to cheap monoids: map blocks to aggregated data, incremental updates;
monoid homomorphism

monoid from functions? input type == output type: endomorphism (remember monoid closure?);
all endomorphisms are monoids, you can aggregate them
example: Event Sourcing

monads are monoids: monoid in the category of endofunctors.


Hadoop make me a sandwich:
оригинал ищите в твиттере




Отсмотрено по наводке http://thedeemon.livejournal.com/112356.html









original post http://vasnake.blogspot.com/2016/07/fp.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)