π‘ ν΄λΉ ν¬μ€νΈλ Learn Haskell by building a blog generator λ₯Ό μ 리ν λ΄μ©μ λλ€.
π ν¨μ
Haskell μ ν¨μλ λ€μκ³Ό κ°μ΄ μ μν©λλ€.
<name> <arg> <arg> ... = <expression>
μ΄λ ν¨μ μ΄λ¦μ camelCase λ₯Ό 보νΈμ μΌλ‘ μ¬μ©ν©λλ€.
content
λΌλ μΈμλ₯Ό λ°μ λ¬Έμμ΄μ λ§λ€μ΄μ λ°ννλ ν¨μλ₯Ό ꡬνν΄λ΄
μλ€.
wrapHtml content = "<html><body>" <> content <> "</body></html>"
μ΄μ μ΄ ν¨μμ κ²°κ³Όλ₯Ό μ½μμ μΆλ ₯ν©λλ€.
main = putStrLn (wrapHtml "Hello World!")
μ΄λΌ? μ¬κΈ°μλ κ΄νΈκ° μ¬μ©λμμ΅λλ€.
Haskell μ κΈ°λ³Έμ μΌλ‘ κ΄νΈ μμ΄λ ν¨μ νΈμΆμ΄ κ°λ₯ν©λλ€.
λ€λ§ μμ κ°μ΄ κ΄νΈλ₯Ό λ¬Άμ΄μ νΈμΆνλ©΄ ν΄λΉ ννμμ κ²°κ³Όλ‘ λμΉλ©λλ€.
putStrLn ν¨μκ° νλμ μΈμλ₯Ό λ°κΈ° λλ¬Έμ μμ κ°μ΄ νΈμΆν©λλ€.
π ν©μ± ν¨μ
Haskell
μλ 체μ΄λ μ°μ°μ(.)λ‘ λ ν¨μλ₯Ό ν©μ±ν μ μμ΅λλ€.
(.) :: (b -> c) -> (a -> b) -> a -> c
μλ 체μ΄λ μ°μ°μμ νμ μ λͺ μν κ²μ λλ€.
μ°Έκ³ λ‘ Haskell
μμ νμ
μ μλ¬Έμλ‘ μμ±ν κ²½μ° μ λ€λ¦μ μλ―Έν©λλ€.
(νμ μ λν μμΈν λ΄μ©μ λ€μ ν¬μ€νΈμμ μ§νλ©λλ€.)
μ¬κΈ°μ ->
λ right associative
νκΈ° λλ¬Έμ μλμ κ°μ΄ ννν μ μμ΅λλ€.
(.) :: (b -> c) -> (a -> b) -> (a -> c)
μ ννλ₯Ό 보면 λ ν¨μλ₯Ό μΈμλ‘ νλ μλ‘μ΄ ν¨μλ₯Ό λ°ννλ κ²μΌλ‘ λ³Ό μ μμ΅λλ€.
π‘ μμλ₯Ό ν΅ν΄ ν©μ± κ³Όμ μ΄ν΄λ³΄κΈ°
μμλ₯Ό ν΅ν΄μ λμ λ°©μμ μ΄ν΄λ³΄κ² μ΅λλ€.
λ€μκ³Ό κ°μ νμ μ κ°μ§λ 2κ°μ§ ν¨μκ° μλ€κ³ νκ² μ΅λλ€.
1. Structure :: String -> Structure
2. el "p" :: String -> String
μ΄ λ ν¨μλ₯Ό ν©μ±ν λ€μ ν¨μκ° String -> Structure
νμ
μΈ μ΄μ λ₯Ό
ν¨μ ν©μ± κ³Όμ μ νλμ© μ΄ν΄λ³΄λ©° μμλ³΄κ² μ΅λλ€.
Structure . el "p" :: String -> Structure
λ¨Όμ 체μ΄λ μ°μ°μλ λ€μ μκ·Έλμ²λ₯Ό κ°μ§λλ€.
(.) :: (b -> c) -> (a -> b) -> a -> c
μ¬κΈ°μ (b -> c)
λ Structure
, (a -> b)
λ el "p"
μ λμΉλ©λλ€.
μ΄λ₯Ό ν΅ν΄ μ λ€λ¦ νμ
a, b, c
μ νμ
μ μΆλ‘ ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
Structure :: String -> Structure
=> (b -> c)
=> b = String, c = Structure
el "p" :: String -> String
=> (a -> b)
=> a = String, b = String
μμ ->
λ right associative
νλ€κ³ νμλ κ² κΈ°μ΅νμλμ?
λλ¬Έμ 체μ΄λ μ°μ°μ νμ μ λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€.
(.) :: (b -> c) -> (a -> b) -> (a -> c)
λ ν¨μλ₯Ό μΈμλ‘ λ°μ ν©μ±λ μλ‘μ΄ ν¨μλ (a -> c)
νμ
μ κ°μ§λ©°,
μ°λ¦¬κ° μμμ μΆλ‘ ν νμ
μ λμ
νλ©΄ String -> Structure
κ° λ©λλ€.
'π archive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Haskell Tutorial] Module (0) | 2022.11.28 |
---|---|
[Haskell Tutorial] Type (0) | 2022.11.28 |
[Haskell Tutorial] Hello World! (0) | 2022.11.28 |
[Design Pattern] PUB-SUB ν¨ν΄ (0) | 2022.06.13 |
JWT (JSON Web Token) (0) | 2022.05.23 |
π¬ λκΈ