๐Ÿšง WIP: Bartosz Milewski's "Category Theory for Programmers" Korean translation ๐Ÿ“š

Overview

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก 

๋ณธ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋Š” Bartosz Milewsk์˜ Category Theory for Programmers์„ ๋ฒˆ์—ญํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

  ๐Ÿ—‚ ๋ชฉ์ฐจ

Part 1.

  1. ๋ฒ”์ฃผ:ํ•ฉ์„ฑ์˜ ๋ณธ์งˆ
  2. ํƒ€์ž…๊ณผ ํ•จ์ˆ˜
  3. ํฌ๊ณ  ์ž‘์€ ๋ฒ”์ฃผ
  4. Kleisli Categories
  5. Products and Coproducts
  6. Simple Algebraic Data Types
  7. Functors
  8. Functoriality
  9. Function Types
  10. Natural Transformations

Part 2.

  1. Declarative Programming
  2. Limits and Colimits
  3. Free Monoids
  4. Representable Functors
  5. The Yoneda Lemma
  6. Yoneda Embedding

Part 3.

  1. Itโ€™s All About Morphisms
  2. Adjunctions
  3. Free/Forgetful Adjunctions
  4. Monads: Programmerโ€™s Definition
  5. Monads and Effects
  6. Monads Categorically
  7. Comonads
  8. F-Algebras
  9. Algebras for Monads
  10. Ends and Coends
  11. Kan Extensions
  12. Enriched Categories
  13. Topoi
  14. Lawvere Theories
  15. Monads, Monoids, and Categories

๋” ๋‚˜์€ ์กฐํŒ ์„ค์ •์ด ์žˆ๋Š” ์ฑ…์˜ ๋ฌด๋ฃŒ pdf ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Blurb์—์„œ ์ปฌ๋Ÿฌ ์ผ๋Ÿฌ์ŠคํŠธ๋ ˆ์ด์…˜์ด ์žˆ๋Š” ํ•˜๋“œ์ปค๋ฒ„ ๋ฒ„์ „์„ ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ฒญ์ค‘๋“ค์—๊ฒŒ ์ด ์ž๋ฃŒ๋ฅผ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒˆ ์„œ๋ฌธ

ํ•œ๋™์•ˆ ์ €๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ฒ”์ฃผ๋ก ์— ๊ด€ํ•œ ์ฑ…์„ ์จ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๊ณผํ•™์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ, ๊ณผํ•™์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์—”์ง€๋‹ˆ์–ด๋ผ๋Š” ์ ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์ € ๋˜ํ•œ ๋‘๋ ต์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ณผํ•™๊ณผ ์—”์ง€๋‹ˆ์–ด๋ง ์–‘์ชฝ์—์„œ ์ผ์„ ํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด์— ํฐ ๊ฒฉ์ฐจ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ํ•ญ์ƒ ๋ฒ”์ฃผ๋ก ์„ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ์€ ๊ฐ•ํ•œ ๊ฐ•๋ฐ•์„ ๋Š๊ปด์™”์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‹จ์ˆœํ•œ ์„ค๋ช…์˜ ๋Œ€๊ฐ€์˜€๋˜ ๋ฆฌ์ฒ˜๋“œ ํŒŒ์ธ๋จผ(Richard Feynman)์—๊ฒŒ ์—„์ฒญ๋‚œ ์กด๊ฒฝ์„ ํ‘œํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํŒŒ์ธ๋จผ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์ตœ์„ ์„ ๋‹คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋…์ž๊ฐ€ ๋ฒ”์ฃผ๋ก ์„ ๋ฐฐ์šฐ๋„๋ก ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์ด ์„œ๋ฌธ์„ ์ถœํŒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด ์ฑ…์ด ์—ฌ๋Ÿฌ๋ถ„์„ ์œ„ํ•ด ์“ฐ์˜€๋‹ค๋Š” ๊ฒƒ์„ ๋ช‡ ๋ฌธ๋‹จ์˜ ๊ณต๊ฐ„์—์„œ ์„ค๋“ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด "ํ’๋ถ€ํ•œ ์—ฌ๊ฐ€ ์‹œ๊ฐ„"์— ์ˆ˜ํ•™์˜ ๊ฐ€์žฅ ์ถ”์ƒ์ ์ธ ๋ถ„์•ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ๋ฐ˜๋Œ€ ์˜๊ฒฌ์ด๋˜ ๋ชจ๋‘ ์—†์• ๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ๋‚™๊ด€๋ก ์€ ๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ, ๋ฒ”์ฃผ๋ก ์€ ๋งค์šฐ ์œ ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•„์ด๋””์–ด์˜ ๋ณด๊ณ ์ž…๋‹ˆ๋‹ค. Haskell ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ด ์ž์›์„ ์˜ค๋žซ๋™์•ˆ ํ™œ์šฉํ•ด ์™”์œผ๋ฉฐ ์•„์ด๋””์–ด๊ฐ€ ์ฒœ์ฒœํžˆ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์Šค๋ฉฐ๋“ค๊ณ  ์žˆ์ง€๋งŒ, ์ด ๊ณผ์ •์€ ๋„ˆ๋ฌด ๋Š๋ฆฌ๊ณ  ์†๋„๋ฅผ ๋†’์—ฌ์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘˜์งธ, ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ˆ˜ํ•™์ด ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์ฒญ์ค‘์—๊ฒŒ ํ˜ธ์†Œํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ถ„์ ๋ถ„ํ•™์ด๋‚˜ ๋Œ€์ˆ˜ํ•™์— ์•Œ๋ ˆ๋ฅด๊ธฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฒ”์ฃผ๋ก ์„ ์ฆ๊ธธ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ ์ €๋Š” ๋ฒ”์ฃผ๋ก ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋งˆ์Œ์— ์ž˜ ๋งž๋Š” ์ข…๋ฅ˜์˜ ์ˆ˜ํ•™์ด๋ผ๊ณ  ์ฃผ์žฅํ•  ์ •๋„์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฒ”์ฃผ๋ก ์ด ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋‹ค๋ฃจ๊ธฐ๋ณด๋‹ค ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฒ”์ฃผ๋ก ์€ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์ข…๋ฅ˜์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ์€ ๋ฒ”์ฃผ๋ก ์˜ ๋ฟŒ๋ฆฌ์— ์žˆ์œผ๋ฉฐ ๋ฒ”์ฃผ ์ž์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ํ•ฉ์„ฑ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณธ์งˆ์ด๋ผ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ฃผ์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์„œ๋ธŒ๋ฃจํ‹ด์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ๋‚ด๋†“๊ธฐ ํ›จ์”ฌ ์ „๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” ๊ณ„์† ํ•ฉ์„ฑ์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ ์ „ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์€ ์ฝ”๋“œ ๋ธ”๋ก์„ ํ•ฉ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ˜๋ช…์„ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„์— ๊ฐ์ฒด ํ•ฉ์„ฑ์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•จ์ˆ˜์™€ ๋Œ€์ˆ˜์  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ•ฉ์„ฑํ•˜๋Š” ๊ฒƒ๋ฟ ์•„๋‹ˆ๋ผ ๋™์‹œ์„ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ๋Š” ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์…‹์งธ, ์ €์—๊ฒŒ๋Š” ๋น„๋ฐ€ ๋ฌด๊ธฐ์ธ ์นผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์นผ๋กœ ์ˆ˜ํ•™์„ ๋„์‚ดํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋” ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „๋ฌธ ์ˆ˜ํ•™์ž๋ผ๋ฉด ๋ชจ๋“  ๊ฐ€์ •์„ ๋ฐ”๋กœ ์„ธ์šฐ๊ณ  ๋ชจ๋“  ์ง„์ˆ ์„ ๊ฒ€์ฆํ•˜๊ณ , ๋ชจ๋“  ์ฆ๋ช…์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์กฐ์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜ํ•™ ๋…ผ๋ฌธ๊ณผ ์ฑ…์„ ์™ธ๋ถ€์ธ์ด ์ฝ๊ธฐ์— ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ €๋Š” ํ›ˆ๋ จ์„ ๋ฐ›์€ ๋ฌผ๋ฆฌํ•™์ž์ด๋ฉฐ ๋ฌผ๋ฆฌํ•™์—์„œ ๋น„๊ณต์‹ ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋†€๋ผ์šด ๋ฐœ์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์ž๋“ค์€ ์œ„๋Œ€ํ•œ ๋ฌผ๋ฆฌํ•™์ž P. A. M. Dirac์ด ์ผ๋ถ€ ๋ฏธ๋ถ„ ๋ฐฉ์ •์‹์„ ํ’€๊ธฐ ์œ„ํ•ด ๋งŒ๋“  Dirac ๋ธํƒ€ ํ•จ์ˆ˜๋ฅผ ๋น„์›ƒ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ Dirac์˜ ํ†ต์ฐฐ๋ ฅ์„ ๊ณต์‹ํ™”ํ•œ ๋ถ„ํฌ ์ด๋ก ์ด๋ผ๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ฏธ์ ๋ถ„ํ•™ ๋ถ„์•ผ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ์›ƒ์Œ์„ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์†์„ ํ”๋“œ๋Š” ์ฃผ์žฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž˜๋ชป๋œ ๋ง์„ ํ•  ์œ„ํ—˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฑ…์—์„œ ๋น„๊ณต์‹์ ์ธ ์ฃผ์žฅ ๋’ค์—๋Š” ํ™•์‹คํ•œ ์ˆ˜ํ•™์  ์ด๋ก ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ํƒ์ž ์œ„์—๋Š” ์„ ๋”์Šค ๋งฅ ๋ ˆ์ธ(Saunders Mac Lane)์˜ ์ˆ˜ํ•™์ž๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก ์˜ ๋‚ก์€ ์‚ฌ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๋ฒ”์ฃผ๋ก ์ด๋ฏ€๋กœ ์ปดํ“จํ„ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ฃผ์š” ๊ฐœ๋…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๊ฐ€ ์ธ๊ธฐ ์žˆ๋Š” ๋ช…๋ นํ˜• ์–ธ์–ด๋ณด๋‹ค ์ˆ˜ํ•™์— ๋” ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋Š” ๋” ๋งŽ์€ ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒ”์ฃผ๋ก ์˜ ํ˜œํƒ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ธฐ ์ „์— Haskell์„ ๋ฐฐ์›Œ์•ผ ํ•  ๊ฑฐ๋ผ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ์œ ํ˜น์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ”์ฃผ๋ก ์ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์™ธ์—๋Š” ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋” ๋งŽ์€ C++ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋”๋Ÿฌ์šด ๊ตฌ๋ฌธ์„ ๊ทน๋ณตํ•ด์•ผ ํ•˜๊ณ  ์žฅํ™ฉํ•œ ๋ฐฐ๊ฒฝ์—์„œ ํŒจํ„ด์ด ๋ˆˆ์— ๋„์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ๋†’์€ ์ถ”์ƒํ™” ๋Œ€์‹  ๋ณต์‚ฌ, ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ชซ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Haskell์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฑฑ์ •์€ ๋ฉ€์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Haskell ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋  ํ•„์š”๋Š” ์—†์ง€๋งŒ, C++๋กœ ๊ตฌํ˜„ํ•  ์•„์ด๋””์–ด๋ฅผ ์Šค์ผ€์น˜ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ Haskell์„ ์‹œ์ž‘ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•๊ณผ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ์ด C++ ํ…œํ”Œ๋ฆฟ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋…์ž๋“ค์ด ์ด๋ฏธ Haskell์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒœ์ฒœํžˆ ์†Œ๊ฐœํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒฝํ—˜์ด ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ์Šค์Šค๋กœ ์ด๋ ‡๊ฒŒ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์ฃผ๋ก ์ด๋‚˜ ํ•จ์ˆ˜ํ˜• ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋žซ๋™์•ˆ ์ฝ”๋”ฉ์„ ํ•ด์™”๋Š”๋ฐ ๋ฌด์—‡์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋‚˜์š”? ํ™•์‹คํžˆ ๋ช…๋ นํ˜• ์–ธ์–ด๋ฅผ ์นจ๋ฒ”ํ•˜๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ํ˜• ๊ธฐ๋Šฅ์˜ ๊พธ์ค€ํ•œ ํ๋ฆ„์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ์ธ Java์กฐ์ฐจ๋„ ์ตœ๊ทผ C++์˜ ๋žŒ๋‹ค๊ฐ€ ๋ช‡ ๋…„๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ‘œ์ค€์œผ๋กœ ๊ธ‰๋ณ€ํ•˜๋Š” ์„ธ์ƒ์„ ๋”ฐ๋ผ์žก๊ธฐ ์œ„ํ•ด ๋น ๋ฅธ ์†๋„๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ํ™œ๋™์€ ํŒŒ๊ดด์ ์ธ ๋ณ€ํ™” ๋˜๋Š” ๋ฌผ๋ฆฌํ•™์ž๋“ค์ด ๋งํ•˜๋Š” ์ƒ์ „์ด๋ฅผ ์œ„ํ•œ ์ค€๋น„์ž…๋‹ˆ๋‹ค. ๋ฌผ์„ ๊ณ„์† ๊ฐ€์—ดํ•˜๋ฉด ๊ฒฐ๊ตญ ๋“๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์ ์  ๋œจ๊ฑฐ์›Œ์ง€๋Š” ๋ฌผ์—์„œ ๊ณ„์† ํ—ค์—„์„ ์ณ์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋Œ€์•ˆ์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๊ตฌ๋ฆฌ์˜ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํฐ ๋ณ€ํ™”๋ฅผ ์ฃผ๋„ํ•˜๋Š” ํž˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ˜๋ช…์ž…๋‹ˆ๋‹ค. ๋„๋ฆฌ ํผ์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋™์‹œ์„ฑ ๋ฐ ๋ณ‘๋ ฌ์„ฑ ๋ถ„์•ผ์—์„œ ์–ด๋–ค ๊ฒƒ๋„ ์‚ฌ์ง€ ์•Š๊ณ  ๋Œ€์‹  ์œ„ํ—˜ํ•˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๋””์ž์ธ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ธฐ๋ณธ ์ „์ œ์ธ ๋ฐ์ดํ„ฐ ์€๋‹‰์€ ๊ณต์œ ์™€ ๋ณ€ํ™”๊ฐ€ ๊ฒฐํ•ฉํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฎคํ…์Šค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ข‹์ง€๋งŒ, ๋ถˆํ–‰ํžˆ๋„ ์ž ๊ธˆ์€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž ๊ธˆ์„ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์€ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‰ฝ๊ณ  ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ๋ช…๋ นํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ถ€์ž‘์šฉ์ด ๊ฑท์žก์„ ์ˆ˜ ์—†์ด ๋‚˜์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ์ข…์ข… ํŽธ๋ฆฌํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํšจ๊ณผ๋Š” ์›์น™์ ์œผ๋กœ ์ด๋ฆ„๊ณผ ์ฃผ์„์œผ๋กœ ์ธ์ฝ”๋”ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SetPassword ๋˜๋Š” WriteFile์ด๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋ถ„๋ช… ์ผ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ถ€์ž‘์šฉ์„ ์ƒ์„ฑํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜ ์œ„์— ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•ฉ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ผ์ด ๋ณต์žกํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋‚˜์˜๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ํฐ ๊ทœ๋ชจ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“œ๋Š” ๋ถ€์ž‘์šฉ์ด ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์€ ํ™•์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ชจ๋‘ ๋ถ€์ž‘์šฉ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ์›จ์–ด์˜ ๋ณ€ํ™”์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋กœ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ๋Ÿฝ์˜ ์œ„๋Œ€ํ•œ ๊ณ ๋”• ๋Œ€์„ฑ๋‹น์˜ ๊ฑด์ถ•๊ฐ€๋“ค์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋Š” ์žฌ๋ฃŒ์™€ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๊นŒ์ง€ ๊ธฐ์ˆ ์„ ์—ฐ๋งˆํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ”„๋ž‘์Šค์˜ ๋ณด๋ฒ ์—๋Š” ๋ฏธ์™„์„ฑ ๊ณ ๋”• ์–‘์‹์˜ ๋Œ€์„ฑ๋‹น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋Œ€์„ฑ๋‹น์€ ์ธ๊ฐ„์˜ ํ•œ๊ณ„์— ๋Œ€ํ•œ ๊นŠ์€ ํˆฌ์Ÿ์„ ์ฆ์–ธํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์˜ ๋ชจ๋“  ๋†’์ด์™€ ๊ฐ€๋ฒผ์šด ๊ธฐ๋ก์„ ๊นจ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ผ๋ จ์˜ ๋ถ•๊ดด๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ์‡ ๋ง‰๋Œ€์™€ ๋‚˜๋ฌด ์ง€์ง€๋Œ€ ๊ฐ™์€ ์ž„์‹œ ์กฐ์น˜๋Š” ๊ทธ๊ฒƒ์ด ๋ถ„ํ•ด๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๋งŽ์€ ์ผ์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„๋Œ€์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ํ˜„๋Œ€ ์žฌ๋ฃŒ ๊ณผํ•™, ์ปดํ“จํ„ฐ ๋ชจ๋ธ๋ง, ์œ ํ•œ ์š”์†Œ ๋ถ„์„, ์ผ๋ฐ˜ ์ˆ˜ํ•™๊ณผ ๋ฌผ๋ฆฌํ•™์˜ ๋„์›€ ์—†์ด ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๊ณ ๋”• ๊ฑด์ถ•๋ฌผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ธฐ์ ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋ฏธ๋ž˜ ์„ธ๋Œ€๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๋ณต์žกํ•œ ์šด์˜ ์ฒด์ œ, ์›น ์„œ๋ฒ„ ๋ฐ ์ธํ„ฐ๋„ท ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๋ณด์—ฌ์ฃผ์—ˆ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์— ๊ฐํƒ„ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋งค์šฐ ์–ด์„คํ”ˆ ํ† ๋Œ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ๊ธฐ์ดˆ๋ฅผ ๊ณ ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋ฒ  ๋Œ€์„ฑ๋‹น ๋ถ•๊ดด๋ฅผ ๋ง‰๋Š” ์ž„์‹œ ์กฐ์น˜

๋‹ค์Œ์œผ๋กœ โžก


Translated by @Minsu Kim โœŒ

You might also like...

[WIP] A solid directive for adding colorful shadows to images.

solid-cosha A solid directive for adding colorful shadows to images (based on cosha). Quick start Install it: yarn add solid-cosha Use it: import { co

Feb 3, 2022

๐Ÿ“ [WIP] Write your reports in markdown, and get them in docx.

md-report What's md-report The repo name md-report stands for both "Write your reports in markdown, and get them in docx." and "Made report again." ("

Jun 12, 2022

A programming language (WIP)

Umo programming language Concept Effect system (not implemented) Subtyping (not implemented) Opt-in shared mutability (not implemented) Gradual typing

Feb 25, 2022

WIP : Un pictionary mais avec 15 trait droits (sans courbes)

TODO Signer l'ID Ban dรจs le lobby Limiter la taille des pseudos Joueur dรฉconnectรฉ avec une couleur Afficher un message en cas de kick Limiter les devi

Apr 25, 2022

Minimal framework for SSG (WIP, PoC)

Frostleaf https://zenn.dev/0918nobita/scraps/64a268583b8463 Development Install tools asdf plugin-add nodejs asdf plugin-add pnpm asdf install Install

Jun 4, 2022

WIP: Hevm based debugger for hardhat-huff projects

Huff Debug An easy hevm debug integration for hardhat-huff projects What does it do: Speed up your development experience by gaining rich feedback in

Jul 15, 2022

๐Ÿ–ผ๏ธ Bringing Material Design 3 to the Astro Blog. [WIP]

๐Ÿ–ผ๏ธ Gumori You [WIP] Bringing Material Design 3 to the Astro Blog. ๐Ÿ‘ฅ Contributing If you're interested in contributing to Gumori You, pls read the fo

Oct 16, 2022

NPMJS Alternative (WIP)

SNPM (WIP) SNPM is an "alternative" for NPM, but it's not meant to replace NPM/Yarn/PNPM DISCLAIMER ๐Ÿšง This project was made to learn more about Packa

Dec 31, 2022

WIP: Power-pack for Turbo Streams

TurboPower turbo_power is a power-pack for Turbo Streams. It provides Turbo Streams with a bunch of new actions and additionally adds the morph action

Jan 4, 2023
Owner
Minsu Kim
Be Professionalism ๐Ÿ˜Ž
Minsu Kim
A Discord bot for bruteforcing Korean students' school name

A Discord bot for bruteforcing Korean students' school name

Dollar3795 3 Mar 9, 2022
Japanese translation of vitejs.dev

Vite Docs JA Vite ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฎๆ—ฅๆœฌ่ชž็ฟป่จณใƒฌใƒใ‚ธใƒˆใƒชใงใ™ใ€‚็พ็Šถใ€ๆœฌใƒฌใƒใ‚ธใƒˆใƒชใฏ็ฟป่จณไฝœๆฅญ็”จใฎใ‚‚ใฎใจใ—ใฆไธ€ๆ™‚็š„ใซ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ๅฐ†ๆฅ็š„ใซใ€ๆœฌใƒฌใƒใ‚ธใƒˆใƒชใฏๅˆฅๅ ดๆ‰€ใซ็งปๅ‹•ใ•ใ‚Œใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใ€‚ ่ฒข็Œฎใ‚ฌใ‚คใƒ‰ Vite ๆ—ฅๆœฌ่ชž็ฟป่จณใ‚ฌใ‚คใƒ‰ ใ‚’ไธ€่ชญใŠ้ก˜ใ„ใ—ใพใ™๏ผ ใฏใ˜ใ‚ใ‹ใŸ ๆœฌใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฏ V

vite 50 Dec 14, 2022
Offer a translation system to your users! a plugin capable of translating your website, simply and efficiently!

TranslateForMe Offer a translation system to your users, a plugin capable of translating your website, simply and efficiently! View Demo ยท Report Bug

Eduardo Castro 3 Jan 12, 2022
PDF translation add-on for Zotero 6

Zotero PDF Translate This is an add-on for Zotero 6. It provides PDF translation for Zotero's built-in PDF reader. Quick Start Guide Install Download

null 2.1k Jan 8, 2023
Font-end app to test the transformer model translation from Cape Verdian Creole to English

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Roberto Carlos 5 Sep 28, 2022
Simple, universal translation with pure JavaScript.

Simple Translator Simple, client-side translation with pure JavaScript. Table of Contents The problem The solution Installation In the browser Using N

Andreas Remdt 66 Nov 18, 2022
Translate text in images using Vision API, Translation API and Jimp

translate-image-text Translate text in images using Vision API, Translation API Rendered using React and canvas Installation Create a Google Cloud pro

Huy Le 4 Oct 26, 2022
Translate text in images using Vision API, Translation API and React with Canvas

manga-translator Manga translator app using Vision API, Translation API Rendered using React and canvas Installation Create a Google Cloud project, en

Huy Le 4 Oct 26, 2022
๐Ÿง [WIP] Genshin Impact Chat Bot

Genshin Bot Config $ cp config/bot.sample.ts config/bot.ts Development $ yarn $ yarn dev $ open http://localhost:7001/ Npm Scripts Use yarn lint to ch

CanisMinor 2 Dec 20, 2021
[WIP] WebGL API implementation for Deno, built on GLFW using FFI.

Note I'm no longer working on this project because I have just realized macOS does not support OpenGL ES API, and adding Desktop GL backend to this mo

DjDeveloper 14 Jun 11, 2022