1.
ํจ์ํ์์ , ์คํธ๋ฆผ [1,2,3]์
(+1)์ mapํด์ [2,3,4]๋ฅผ ๋ง๋ค๊ณ ,
(+2)๋ฅผ mapํด์ [3,4,5]๋ฅผ ๋ง๋๋ ์์
์,
(+2) โ (+1)๋ฅผ [1,2,3]์ mapํ๋ ๊ฑธ๋ก ํํํ ์ ์์ด์ผ ํ๋ค.
(+1), (+2), ((+2) โ (+1)) ํจ์๋ค์ ๋ชจ๋ Int -> Int ํจ์๋ฅผ ์ํ๋ ๊ณณ์ ๋ฃ์ด ์ค ์ ์๋ ํจ์๋ค์ด๋ค.
์์ ๊ฐ์ด, ์๋ฒฝํ๊ฒ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์์ง๋ง, ๊ฐ์ "๋ฅ"์ ์์
์ ๋ ๋ฒ ํ๋ ๊ฒ์, ํ ๋ฒ ์์
ํ๋ ๊ฒ์ผ๋ก ํํํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค์ด,
์ฒซ ๋ฒ์งธ ์์
์ผ๋ก, "hello"๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๊ณ ,
๋ ๋ฒ์งธ ์์
์ผ๋ก, " world"๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋๋ฐ,
์ด๋ฅผ ํ ๋ฒ์ ์์
์ผ๋ก, "hello world"๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋ ์์
์ผ๋ก ํํํ ์ ์๋ค.
์ฌ๊ธฐ๋ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ํ์ ์ ๋ณด๋ ํ์ ์๊ณ , ์ต์ข
๋ก๊ทธ๋ง ํ์ํ๋ค๋ ์ธ์์ ์ ๋ณด ์ ํ์ด ๋ค์ด๊ฐ ์๋ค. ์ด ์ธ์์ ์ ํ(์ฌ๊ธฐ์ ๋ก๊ทธ ๋ฌธ์์ด์ ํฉ์น๋ ๊ฒ)์ ์๊ธํด์ผ๋ง ๊ฐ๋ฅํ๋ค.
๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ์์
์ m์ด๋ผ ๋ถ๋ฅผ ๋, m a๋ฅผ ๋ฐ๋ ๊ณณ์ m (m a)๋ฅผ ๋๊ธธ ๋ฐฉ๋ฒ์ด ์๊ธด๋ค๋ ๋ป์ด๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด, m (m a)๋ก ํํ๋๋ ์์
์ ์ธ์์ ์ธ ์ ์ฐจ๋ฅผ ๊ฑฐ์ณ m a๋ก ๋ง๋ค์ด๋, ๋ด๊ฐ ํ์ํ ์ ๋ณด๋ ์ฌ๋ผ์ง์ง ์๋๋ค๋ ๋ป์ด๋ค.
2.
๋ฌด์ธ๊ฐ๊ฐ ํ๋์ธ๋ฐ, ์ ์ฌํ ๋ณด๋ฉด ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด๊ฒ ๋ฐ๋ก ๋ชจ๋
ธ์ด๋๋ค. mono๋ ํ๋๋ฅผ ๋ปํ๊ณ , ~oid๋ "์ฒ"ํ๋ ๊ฑธ ๋งํ๋ค. (์. ์ธ๊ฐ์ธ ์ฒ ํ๋ ํด๋จธ๋
ธ์ด๋) ํ๋์ธ์ฒ ํ๋ ๊ฒ ๋ชจ๋
ธ์ด๋๋ค. ์ํ ์ฑ
์ ๋ถ๋ถ์์ ์ดํญ ์ฐ์ฐ, ๊ฒฐํฉ ๋ฒ์น, ํญ๋ฑ์์ด ์์ผ๋ฉด ๋ชจ๋
ธ์ด๋๋ผ๋ ์ค๋ช
์ ํ๋๋ฐ, ๊ทธ๋์ ๋ชจ๋
ธ์ด๋๊ฐ ๋ญ์ ์ฐ๋ ๋ฌผ๊ฑด์ธ์ง๋ ํ์ฐธ ๊ณต๋ถํด์ผ ์ ๊ฒ ๋๋ค.
(์๋๋ ํผ์๋ง์ ์๊ฐ์
๋๋ค.)
๋ชจ๋
ธ์ด๋๋ฅผ ๋ฐ๋ผ ๋ณด๋ ๋ ์ค ํ๋๋ก, "๋ชจ๋ ๋์์ ์ดํญ ์ฐ์ฐ์ผ๋ก ํํ"์ ๋ค ์ ์๋ค.
0์ ํฌํจํ ์์ฐ์๋ค 0,1,2,3,... ๋ค์, + ์ดํญ ์ฐ์ฐ๊ณผ, ์ด ์ฐ์ฐ์ ํญ๋ฑ์ 0์ด ์์ผ๋ฉด, ๋ชจ๋ โ + โ ํ ๊ฐ์ง ๋ชจ์์ผ๋ก ํํํ ์ ์๊ฒ ๋๋ค.
0 -> 0+0
1 -> 0+1
2 -> 0+(1+1) = 1+1
...
๋ชจ๋
ธ์ด๋ ๊ตฌ์กฐ์ด๊ธฐ์, ์ด๋๊ฐ์์ โ + โ ๋ชจ์์ ์ํ๋ค๋ฉด, 0,1,2,3,...์ ๋ชจ๋ ๋ฃ์ด ์ค ์ ์๋ค.
3.
"์ด๋๊ฐ์์ m a๋ฅผ ์ํ๋ค๋ฉด, m a, m (m a), m (m (m a)), ...๋ฅผ ๋ชจ๋ ๋ฃ์ด ์ค ์ ์๋ค."๋ฅผ ์์ ๋น๊ตํ๋ฉฐ ๋ณด์.
์์์ ์๊ธฐํ ์ธ์์ ์ ํ ์์
์ join์ผ๋ก ํํํ๋ฉด,
m (m a) --join--> m a
m (m (m a)) --join--> m (m a) --join--> m a
...
m ๋ฐ๋ณต ์์
์ ๋ชจ๋ โ --join--> โ ๋ชจ์์ผ๋ก ํํํ ์ ์์ ๊ฒ๋ง ๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ, ๋ฑ ํ๋๋ ํํํ์ง ๋ชปํ๋ค. join์ m์ด ๋ ๊ฐ ์๋ ๊ฑธ, ํ๋๋ก ๋ง๋๋ ์์
์ด๋ผ, mํ๋๋ฅผ โ --join--> โ๋ก ํํํ์ง ๋ชปํ๋ค. m์ join์ด ๋ค์ด๊ฐ ๋ชจ์์ผ๋ก ํํํ๋ ค๋ฉด, ์์ฐ์, + ์์ ์ฒ๋ผ 0์ ๋์ํ๋ ๊ฒ์ด ํ์ํ๋ค. mํ๋๋ฅผ, m ๋ ๊ฐ๋ก ๋ง๋ค๋, ์ต์ข
๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋ pure๋ผ๋ ์์
์ ๋ง๋ ๋ค. ์ ๋ก๊ทธ ์์
์ ์๋ก ๋ค๋ฉด, ๋ก๊ทธ๋ก ๋น๋ฌธ์ ""์ ์ถ๊ฐํ๋ ์์
์ pure๋ก ๋ง๋ ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์ผ ๋น๋ก์, ๋ชจ๋ ๋ฐ๋ณต๋ m ์ join์ผ๋ก ํํํ ์ ์๊ฒ ๋๋ค
m a --pure--> m (m a) --join--> m a
m (m a) --join--> m a
m (m (m a)) --join--> m (m a) --join--> m a
...
์ด์ , join์ ์ฐจ๊ฐ ํญ์ ์๋ m a๋ฅผ ์ํ๋ ๊ณณ์ m a๋ m (m (m a))๋ ๋ฃ์ด ์ค ์ ์๊ฒ ๋์๋ค.
"hello"์ " world"๋ฅผ ๋จ๊ธฐ๋ ๋ ๊ฐ์ ์์
ํฉ์ณ, "hello world"๋ฅผ ๋จ๊ธฐ๋ ํ๋์ ์์
์ผ๋ก ํํํ ์ ์๊ฒ ๋์๋ค.
โป ์ง๊ธ ๋์ ๋ช
ํํ ๋ณด์ด์ง ์์ง๋ง, m ๋์ ํฉ์ฑํ๋ ์ฐ์ฐ์ .์ด๋ผ ํ๋ฉด, .๋ง์ผ๋ก ๋ชจ๋
ธ์ด๋ ์ดํญ ์ฐ์ฐ ์ญํ ์ ๋ชปํ์ง๋ง, join์ ๋์์ ๋ฐ๊ณ , id ๋ง์ผ๋ก ํญ๋ฑ์ ์ญํ ์ ๋ชปํ์ง๋ง, pure์ ๋์์ ๋ฐ์ ๋ชจ๋
ธ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฌ๋ค.
๊ฒฐ๋ก .
๋น์ฐํ ๋ชจ๋ ๋ด์ฉ์ด ๋ด๊ฒจ ์์ง ์๊ณ , ๋ชจ๋๋๋ฅผ ๋ฌด์์ ๋ชจ๋
ธ์ด๋๋ก ๋ณด๋ ๋ด์ฉ์ ๋น์ํ์ ์ผ๋ก ํ์ด ๋ดค๋ค. ๋ชจ๋
ธ์ด๋๋ ๋ชจ๋๋ฅผ ํ๋์ ๋ชจ์์ผ๋ก ํํ ํ ์ ์๋ค๋ ๊ฑธ, ๋ณด์ฆํด์ฃผ๋ ๊ฑฐ๋ํ ๊ฐ๋
์ด์ง๋ง, ์
์์ธ ๋์๊ฒ "๊ทธ๋ ๊ฒ ํด๋ ๋๋ค"๋ ์ ๋์ ๋๋๋ง ์๋ค. (๊ฒฐํฉ ๋ฒ์น์ด ๋น ์ก๋๋ฐ, ๋์ค์ ์ฝ๋๋ฅผ ๋ชจ๋ํ ํ๋ ๊ฒ๊ณผ ์ฐ๊ด์ง์ด ๋ณด๋ฉด, ๋ช
ํํ ๋์์ ์ ์ ์๋ค.)
๋ชจ๋๋๋, ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์๊ธด ๊ฒ์, ๋น์ฅ ํ์ํ ์์๋ง ์ ๊ด๋ฆฌํ๋ค๋ฉด "๊ฐ์ ๊ฑธ๋ก ์น์"๋ฅผ ๋ฉ์ง๊ฒ(,์ด๋ ต๊ฒ) ํ์ํํ ์ด๋ก ์ด๋ค.
์ฌ์กฑ.
์ ์ ๋ํ๋ฅผ ๋๋ ๋ณธ ๋ถ๋ค์ ์์๊ฒ ์ง๋ง, ์ ๊ฐ ๋น์ ๊ณต์๋ผ ์ฉ์ด ์ ํ์ด๋ ๊ฐ๋
์ ์๊ฐ ๋งค์ฐ ์ธํฌ๋ฉํด์ ์ธ์์ ์ฐํธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์์ฃผ ๋ง๋ญ๋๋ค. PL ์ ๊ณต์๋ถ๋ค์ฒ๋ผ ๊น์ํ ์ด๋ก ์ ํ๊ณ ์ถ์ ๊ฒ ์๋๋ผ, ํ์ค์ ์ ์ฉํ ์ ์์ ๋งํผ์ ๋๋ง ๊ฐ์ง๊ณ ์ถ์ต๋๋ค. ํ์ค์ ๋ชจ๋ธ๋งํ ๋, "์ธ์์ ์ ๋ณด ์ ํ"์ ํด์ ํ์ํ ์ ๋ณด๋ฅผ ๋จ๊ธธ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์์์ฑ๋ ๋์ ๊ธธ๋ฌ์ผ ๋๋๋ฐ, bind ๋๋ flatmap, return ๋๋ pure๊ฐ ์๋ ๊ตฌ์กฐ๊ฐ ๋ชจ๋๋๋ผ๊ณ ๋ง ๋ฐฐ์ฐ๋ฉด, ์ด๋ฐ ๋์ ๊ฐ์ง๋๋ฐ ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋น์ ๊ณต ์
์๋ถ์ด ๋ณด์
จ๋ค๋ฉด, ์ป์ด ๊ฐ์๋ ์์ด๋์ด๊ฐ ์์์ผ๋ฉด ์ข๊ฒ ๊ณ , ์ ๊ณต์๋ถ์ด ๋ณด์
จ๋ค๋ฉด, ์ธํฌ๋ฉํ ๋ถ๋ถ์ ๋๋ฌด ์ธ์ ์ฐํธ๋ฆฌ์ง ๋ง์๊ณ , ํ๋ฆฐ ๊ฐ๋
์ด ์๋ค๋ฉด, ๋ถ๋๋ฝ๊ฒ ์กฐ์ธ์ ํด์ฃผ์๋ฉด ์ข๊ฒ ์ต๋๋ค.
โป ๋ชจ๋๋ ์ฉ์ด๋ mono์ triad์ ์จ ๊ฒ ์๋๊น ์์ฌํ๋ค๋ ์ค์ด ์์ต๋๋ค.(๊ฒ์ํด ๋ณด๋ฉด ๊ทผ๊ฑฐ๋ ๋ฏธ์ฝํด ๋ณด์
๋๋ค.) ๋ชจ๋๋๋ join, return ๊ทธ๋ฆฌ๊ณ ์์์ ๋ช
์์ ์ธ๊ธ์ ์ํ์ง๋ง, ํํฐ์ fmap, ์ด๋ ๊ฒ ์ธ ๊ฐ triad์ ๋์์ ๋ฐ์ ๋ชจ๋
ธ์ด๋๋ก ๋ง๋ค ์ ์๋ ๊ตฌ์กฐ์
๋๋ค.
โป "์ ๊ตํ" ๋ด์ฉ์ด ์๋์ ๊ฐ์กฐํ๊ณ ์ ์
๊ฒฌ์ด ์๊ธฐ์ง ์๊ธฐ ์ํด, ์ผ๋ถ๋ฌ ์ ๋ชฉ์ ๋ฌ์ง ์๊ณ , ๋ฐ๋ง(ํผ์ฃ๋ง)ํฌ๋ก ์ผ์ต๋๋ค.
์ ๋ชฉ์
- ํจ์ํ
- ๋ชจ๋
ธ์ด๋
- ๋ชจ๋๋
์์ ์
๋๋ค.
Read more โ