Π£Π²Π΅ΡΠ΅Π½Π½ΠΎ Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠ΅ΠΆΠΈΠΌΠ° #ΠΏΡΡΠ»ΡΡΠ²ΡΡ ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ, ΡΡΠΎ Π½Π° 22 ΡΠ½Π²Π°ΡΡ ΡΠΆΠ΅ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ²Π°Ρ Π² ΡΡΠΎΠΌ Π³ΠΎΠ΄Ρ Π²ΡΡΡΠ΅ΡΠ°. ΠΠΆΠΈΠ΄Π°Π΅ΠΌ Π² Π³ΠΎΡΡΠΈ Martin Chaov, Software Architect SBTech ΠΈ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠ° ΠΠΎΡΡΠ°ΡΡΠΊΠ°, Senior Front-end developer ITecGurus π± Π’Π΅ΠΌΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΡΠ΅ΡΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠ»Π°Π½Π° ΠΏΠΎ Π»ΠΈΡΠ½ΠΎΠΌΡ ΡΠΎΡΡΡ Π½Π° Π³ΠΎΠ΄ β Growing Seniority π http://mathrandom.com/growing_seniority.
ΠΠ°ΠΊ ΡΠ΅Π·Π°Π»ΠΈ Π»ΠΈ Π±Ρ Π½ΠΎΠΆΠ½ΠΈΡΡ βοΈ ΠΈΠ· ΠΈΠΊΠΎΠ½ΠΎΠΊ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΌΠΈ - https://wh0.github.io/2020/01/02/scissors.html
β ΠΡΠ»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌ Π² ΡΡΠΈΠ»Π΅ "ΠΎΡ ΡΡΠΊΠΈ". ΠΡΠΊΡΡΡΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΉ online ΡΠ΅ΡΠ²ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅.
https://www.excalidraw.com/
https://www.excalidraw.com/
β ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ moment.js Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°ΡΠ°ΠΌΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ 2kB. API ΠΏΠΎΠ²ΡΠΎΡΡΡ API moment.js.
β Π£ΡΠ΅Π±Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½ΠΈΡΠΈΠ·Π°ΡΠΈΠΈ Ρ Docker.
β ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° JavaScript. jExcel ΡΡΠΎ vanilla javascript ΠΏΠ»Π°Π³ΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠΎΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², JSON, CVS ΠΈ XSLX ΡΠ°ΠΉΠ»ΠΎΠ².
https://bossanova.uk/jexcel
https://bossanova.uk/jexcel
β ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ΅ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ² ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΠΌΠΎΡΡΠΈΠ·ΠΌΠ°Ρ
: ΡΠ½Π΄ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΈ ΠΈΠ·ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ. ΠΡΠ±ΠΎΠΉ ΠΌΠΎΡΡΠΈΠ·ΠΌ (Morphism) ΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ²Π°ΡΡ:
ΠΠ½Π΄ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ (Endomorphism) - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΈΠΏ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°ΠΊΠΎΠΉ-ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠ·ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ (Isomorphism) - ΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌΠΈ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡΡ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ, Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΡΠΎΡΠΊΠΈ Π² Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° [0, 1] ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° {x:0, y:1}:
//
ΠΠ½Π΄ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ (Endomorphism) - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΈΠΏ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°ΠΊΠΎΠΉ-ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
// uppercase :: String -> String
const uppercase = (str) => str.toUpperCase()
// decrement :: Number -> Number
const decrement = (x) => x - 1
ΠΠ·ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ (Isomorphism) - ΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌΠΈ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡΡ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ, Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΡΠΎΡΠΊΠΈ Π² Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° [0, 1] ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° {x:0, y:1}:
//
Providing functions to convert in both directions makes them isomorphic.Π³ΠΎΠ΄Π½Ρ Π² ΡΡΡΠ»ΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
const pairToCoords = (pair) => ({x: pair[0], y: pair[1]})
const coordsToPair = (coords) => [coords.x, coords.y]
coordsToPair(pairToCoords([1, 2])) // [1, 2]
pairToCoords(coordsToPair({x: 1, y: 2})) // {x: 1, y: 2}
Π‘Π΅
β serverless-offline - ΡΠΌΡΠ»ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² AWS Ξ» ΠΈ API Gateway. ΠΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ serverless ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π² ΠΎΠ±Π»Π°ΠΊΠΎ ΠΈ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ Π²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
β Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΠ² Π΄Π»Ρ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π»Ρ JavaScript. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
https://github.com/ryanmcdermott/clean-code-javascript
https://github.com/ryanmcdermott/clean-code-javascript
β ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π²Π°ΡΠΈΡ
npm ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². Π― Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ semantic release - ΡΡΠΎ Π·ΠΎΠ»ΠΎΡΠ°Ρ ΡΠ΅ΡΠΈΡ npm.
https://semantic-release.gitbook.io/semantic-release/
https://semantic-release.gitbook.io/semantic-release/
Π Π΅Π±ΡΡ, Ρ Π½Π°Ρ ΠΎΡΡΠ°Π»ΠΈΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 13 Π±ΠΈΠ»Π΅ΡΠΎΠ² Π½Π° ΠΏΠ΅ΡΠ²ΡΡ Π² ΡΡΠΎΠΌ Π³ΠΎΠ΄Ρ Π²ΡΡΡΠ΅ΡΡ, ΡΡΠΎ ΡΠΎΡΡΠΎΠΈΡΡΡ ΡΠΆΠ΅ Π² ΡΡΡ ΡΡΠ΅Π΄Ρ, 22 ΡΠ½Π²Π°ΡΡ. ΠΠ΄Π΅ΠΌ Π² Π³ΠΎΡΡΠΈ ΠΠ°ΡΡΠΈΠ½Π° Π§Π°ΠΎΠ²Π° (Software Architect SBTech) ΠΈ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠ° ΠΠΎΡΡΠ°ΡΡΠΊΠ° (Senior front-end developer ITecGurus). Π’Π°ΠΊ ΡΡΠΎ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, Π½Π°Π»Π΅ΡΠ°ΠΉ ΡΠΎΡΠΎΠΏΠΈΡΡ π https://2event.com/en/events/1855761
2Event
Math.random(). Growing Seniority
Math.random(). The engineering community.
We are the community of software engineers connected around JS-based stack of technologies. The main goal is to gather together people and share knowledge between them. We are going to deepβ¦
We are the community of software engineers connected around JS-based stack of technologies. The main goal is to gather together people and share knowledge between them. We are going to deepβ¦
β Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π· ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΠΌΠΎΡΡΠΈΠ·ΠΌΠ°Ρ
: ΡΠ½Π΄ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΈ ΠΈΠ·ΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΌΠΎΡΡΠΈΠ·ΠΌΠ°Ρ
: Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ (homomorphism) .
ΠΡΡΡΡ (M, β M, eM) ΠΈ (N, β N, eN) β Π΄Π²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π° (ΠΎ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π°Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅). Π€ΡΠ½ΠΊΡΠΈΡ h: M β N Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ (homomorphism), Π΅ΡΠ»ΠΈ h(x β M y) = h(x) β N h(y) Π΄Π»Ρ Π»ΡΠ±ΡΡ x ΠΈ y ΠΈΠ· M, ΠΈ h(eM) = eN.
ΠΡΠΈΠΌΠ΅ΡΡ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠ²:
- Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π», ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π», Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π» ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΡ hom(+, id, 0), hom(β , id, 1), hom(max, id, ββ) ΠΈ hom(min, id, +β) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ id, Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ reduce(β , e).
- Π€ΡΠ½ΠΊΡΠΈΡ length, Π²ΡΡΠΈΡΠ»ΡΡΡΠ°Ρ Π΄Π»ΠΈΠ½Ρ ΡΠΏΠΈΡΠΊΠ°, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ hom(+, one, 0), Π³Π΄Π΅ one(x) = 1.
- Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ f ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°, ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ hom(++, g, []), Π³Π΄Π΅ g(x) = [f(x)]. Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ map(f).
- Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΎΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠ°. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΡΡΡΡ merge β ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ Π΄Π²ΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², list(x) = [x] β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. Π’ΠΎΠ³Π΄Π° Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ hom(merge, list, []) Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠΎΠΌΡΠΌ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ.
Π£ΡΡ... ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, ΡΡΠΎΠ±Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π²Π·ΠΎΡΠ²Π°ΡΡ ΠΌΠΎΠ·Π³ Π² ΡΡΡΠ»ΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ haskell-style ΠΌΠΎΡΡΠΈΠ·ΠΌΡ ΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π΄Π»Ρ javascript
ΠΡΡΡΡ (M, β M, eM) ΠΈ (N, β N, eN) β Π΄Π²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π° (ΠΎ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π°Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅). Π€ΡΠ½ΠΊΡΠΈΡ h: M β N Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ (homomorphism), Π΅ΡΠ»ΠΈ h(x β M y) = h(x) β N h(y) Π΄Π»Ρ Π»ΡΠ±ΡΡ x ΠΈ y ΠΈΠ· M, ΠΈ h(eM) = eN.
f(a * b) = f(a) * f(b)
A.of(f).ap(A.of(x)) == A.of(f(x))
Either.of(_.toUpper).ap(Either.of("oreos")) == Either.of(_.toUpper("oreos"))
ΠΡΠΈΠΌΠ΅ΡΡ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠ²:
- Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π», ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π», Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π» ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΡ hom(+, id, 0), hom(β , id, 1), hom(max, id, ββ) ΠΈ hom(min, id, +β) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ id, Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ reduce(β , e).
- Π€ΡΠ½ΠΊΡΠΈΡ length, Π²ΡΡΠΈΡΠ»ΡΡΡΠ°Ρ Π΄Π»ΠΈΠ½Ρ ΡΠΏΠΈΡΠΊΠ°, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ hom(+, one, 0), Π³Π΄Π΅ one(x) = 1.
- Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ f ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ°, ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ hom(++, g, []), Π³Π΄Π΅ g(x) = [f(x)]. Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ map(f).
- Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΎΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠ°. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΡΡΡΡ merge β ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ Π΄Π²ΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², list(x) = [x] β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. Π’ΠΎΠ³Π΄Π° Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌ hom(merge, list, []) Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠΎΠΌΡΠΌ ΡΠΏΠΈΡΠΎΡΠ½ΡΠΌ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠΎΠΌ.
Π£ΡΡ... ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π³ΠΎΠΌΠΎΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, ΡΡΠΎΠ±Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π²Π·ΠΎΡΠ²Π°ΡΡ ΠΌΠΎΠ·Π³ Π² ΡΡΡΠ»ΠΊΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ haskell-style ΠΌΠΎΡΡΠΈΠ·ΠΌΡ ΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π΄Π»Ρ javascript