π νμ μΆλ‘
Haskell
μ νμ
μΆλ‘ μ΄ κ°λ₯νμ§λ§ λ³΄ν΅ λͺ
μμ μΌλ‘ νμ
μ λͺ
μνλ κ²μ΄
λ―Έλμ λμ λ€λ₯Έ μ΄λ€μ μν΄ λ λμ μ νμ λλ€.
νμ
μ μλ³μ μμ ::
μ ν¨κ» λͺ
μν©λλ€.
title_ :: String -> String
μ νμ
μ String
μ μΈμλ‘ λ°μ String
μ λ°ννλ ν¨μλ₯Ό μλ―Ένλ κ²μ΄μ£ .
π Haskell μ ν¨μλ μΌκΈ ν΄λμ€λ€.
μ¬μ€ μμ λͺ¨λ μμ μμ 2κ° μ΄μμ μΈμλ₯Ό λ°λ ν¨μλ€μ μ μνμ§λ§
μ¬μ€ Haskell
μμ λͺ¨λ ν¨μλ νλμ μΈμλ₯Ό λ°λλ‘ λμ΄μμ΅λλ€.
makeHtml :: String -> String -> String
μ΄μ μ μμ±ν makeHtml
μ λκ°μ String μΈμλ₯Ό λ°μ νλμ String μ λ°ννλλ‘ λμ΄μμλλ°,
μ¬μ€ μ΄λ λ€μκ³Ό κ°μ΄ ν¨μλ₯Ό λ°ννλ
ν¨μ νμ
μΌλ‘ λ³νλ©λλ€.
makeHtml :: String -> (String -> String)
Haskell
μμ λͺ¨λ ν¨μλ μΌκΈ ν΄λμ€
μ
λλ€.
λλ¬Έμ κ°μΌλ‘ λ€λ£° μ μκ³ , ν¨μλ₯Ό λ°ννλ ν¨μλ₯Ό μ μν μ μμ£ .
μ΄λ₯Ό νν κ³ μ°¨ ν¨μ
λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
Haskell
μλ λ€λ₯Έ ν¨μν μΈμ΄μ λ§μ°¬κ°μ§λ‘ μ΅λͺ
ν¨μ(λλ€ν¨μ)
λ₯Ό μ μν μ μμ΅λλ€.
λ§ κ·Έλλ‘ μ΄λ¦μ΄ μλ ν¨μμ΄λ©°, λ€μκ³Ό κ°μ΄ μμ±ν©λλ€.
\<argument> -> <expression>
1κ³Ό 2λ₯Ό μΈμλ‘ λ°μ λνλ three
ν¨μλ λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€.
three = (\num1 -> \num2 -> num1 + num2) 1 2
λλ λ€μκ³Ό κ°μ΄ μΆμ½νμ¬ ννν μ μμ΅λλ€.
three = (\num1 num2 -> num1 + num2) 1 2
μ΄λ₯Ό μ°λ¦¬κ° λ§λ makeHtml
μ μ μ©νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
makeHtml = (\title body -> html_ (head_ (title_ title) <> body_ body)) "Hello World!" "This is body"
π μλ‘μ΄ νμ μ μνκΈ°
Haskell
μμλ newtype
κ³Ό type
μ ν΅ν΄μ μλ‘μ΄ νμ
μ λΆμ¬ν μ μμ΅λλ€.
newtype
newtype
μ κΈ°μ‘΄μ νμ
μ μλ‘μ΄ μ΄λ¦μ λΆμ¬ν΄μ€λλ€.
λ¬Έλ²μ λ€μκ³Ό κ°μ΅λλ€.
newtype <type-name> = <constructor> <existing-type>
{- example -}
newtype Html = Html String
μ¬κΈ°μ μμ±μ(constructor)λ μ°λ¦¬κ° μ μν newtype μ μμ±νλ ν¨μλΌκ³ μκ°ν΄λ λ©λλ€.
보νΈμ μΌλ‘ μμ±μμ΄λ¦κ³Ό νμ μ΄λ¦μ λμΌνκ² μ μνμ§λ§ λ¬λΌλ μ¬μ€ μκ΄μμ΅λλ€.
μ μμλ Htmlμ΄λΌλ μλ‘μ΄ νμ
μ Stringμ ννμμΌλ‘ μ¬μ©νλ Html μμ±μλ‘ λ§λ€μ΄μ§λ€
λ κ²μ μλ―Έν©λλ€.
(Html "hello"
μ λμλ κ²μ
λλ€.)
μ¬κΈ°μ μμ±ν νμ μ΄ μ무리 String μ λ°ννλλΌλ, μ΄μ μ μ°λ¦¬κ° νκ² μ²λΌ append μ°μ°μ μνν μ μμ΅λλ€.
"hello" <> Html "world" // β type error!
μ΄λ Html νμ μ΄ μμ°ν String νμ κ³Όλ λ€λ₯΄κΈ° λλ¬ΈμΈλ°,
μ΄λ₯Ό ν΅ν΄ μ°λ¦¬λ νμ
κ°μ μΊ‘μν
λ₯Ό ꡬνν μ μκ² λ©λλ€.
newtype μΆμΆνκΈ°
newtype μ΄ κ°μΈκ³ μλ type μ μ¬μ©νκΈ° μν΄μλ λ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
1οΈβ£ switch ννμ + ν¨ν΄ 맀μΉ
μ¬μ©νκΈ°
switch ννμ
μ μ΄μ©νλ©΄ case λ¬Έμ ν¨ν΄ 맀μΉμ ν΅ν΄ νμ
μ μΆμΆν μ μμ΅λλ€.
case <expression> of
<pattern> -> <unpacked-type>
μ¬κΈ°μ expression
μ μΆμΆμ μνλ λμμ΄κ³ , pattern
μ ꡬ체μ μΈ νμ
ννμ
λλ€.
μμλ₯Ό ν΅ν΄ μ¬μ©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€.
λ§μ½ λ€μκ³Ό κ°μ Structure
νμ
μ΄ μλ€κ³ νλ€λ©΄,
newtype Structure = Structure String
μλμ κ°μ΄ μΆμΆμ΄ κ°λ₯ν©λλ€.
getStructureString :: Structure -> String
getStructureString struct =
case struct of
Structure str -> str
2οΈβ£ ν¨μμ μΈμμμ ν¨ν΄ 맀μΉ
μ¬μ©νκΈ°
λ³λμ μΆμΆ ν¨μλ₯Ό μ μΈνλ λμ , ν΄λΉ νμ μ μ¬μ©νλ €λ ν¨μμ μΈμμμ ν¨ν΄ 맀μΉμ νλ λ°©λ²λ μμ΅λλ€.
func <pattern> = <expression>
μ΄ λ°©λ²μΌλ‘ getStructureString
λ₯Ό μ μνλ©΄ λ€μκ³Ό κ°μ΅λλ€.
getStructureString :: Structure -> String
getStructureString (Structure str) = str
type
Haskell
μ type μ κ·Έλ₯ type alias μ
λλ€.
λ³λμ νμ μμ±μκ° μμΌλ©°, νΉμ νμ μ λ³μΉμ μ ν΄μ£Όλ μ©λμ λλ€.
μ΄λ₯Ό ν΅ν΄ νΉμ μν©μμ μ’ λ λͺ μμ μΈ νμ΄νμ΄ κ°λ₯ν΄μ§λλ€.
type <type-name> = <existing-type>
{- example -}
type Title = String
'π archive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Haskell Tutorial] High Order Function (0) | 2022.12.31 |
---|---|
[Haskell Tutorial] Module (0) | 2022.11.28 |
[Haskell Tutorial] Function & Chaining (0) | 2022.11.28 |
[Haskell Tutorial] Hello World! (0) | 2022.11.28 |
[Design Pattern] PUB-SUB ν¨ν΄ (0) | 2022.06.13 |
π¬ λκΈ