[Haskell] data: union ν¨ν΄
κ΄λ ¨ ν¬μ€νΈ
https://blog.naver.com/sssang97/221768461037
data νμ μ μΈμ ꡬ쑰체 κ°μ μ νμ μ μ μΈνλ μ©λλ‘ μΈ μλ μμ§λ§, union νμ μ μ μΈνλλ° μ¬μ©ν μλ μλ€. Rustλ₯Ό κ²½νν΄λ³Έ μ μ΄ μλ€λ©΄, enumμ κΈ°λ₯μ κ·Έλλ‘ κ°μ Έκ°λ€κ³ μ΄ν΄νλ©΄ λλ€.
enum μ μΈ
νμ
μ |λ₯Ό μ³μ λμ΄νλ κ²λ§μΌλ‘λ κΈ°λ³Έμ μΈ ννμ enumμ μ μν μ μλ€.
μλ μμ λ μμμ νννλ Color enumμ μ μν μλ€.

κ·ΈλΌ κ·Έλ₯ μ΄λ κ² μμμ enum κ°μ ν λΉν΄μ μ¨λ¨Ήμ μ μλ€.

ν¨ν΄λ§€μΉμλ νλμ λ°λ₯Έ λΆκΈ°λ₯Ό μ¬μ©ν μ μλ€.


κ·Όλ° μ λ κ²λ§ νλ©΄ λκ° κ° λλ²κΉ μ΄ μ μλλκΉ, derivingμ ν΅ν΄μ λ¬Έμμ΄ λ³ν κΈ°λ₯μ μ 곡ν΄λ³΄μ.
μ λ¬λ©΄ μ΄ enumμ λν΄μλ Show νμ
ν΄λμ€κ° ꡬ체νλλ€.

μ μΆλ ₯λλ€.
μ μν Enum
μμ§κΉμ§λ Enumμ μ΄λ¦λ§ μκ³ μ΄λ ν κ°μ΄ λΆμ¬λμ§ μμλ€. Redλ κ·Έλ₯ RedμΌ λΏμ΄λ€.
νμ§λ§ Enumμ λ§μ usecaseμμλ μ΄κ±Έ μ€μ§μ μΈ μ μκ° λ±μΌλ‘ λ³νν΄μΌ ν κ²½μ°κ° λ§λ€.
κ·Έλ°κ±Έ μνλ€λ©΄ μ§μ Enumμ ꡬνν΄λ λλλ°, deriving Enumμ μ°λ©΄ μμλλ‘ μ μκ°μ μλλΆμ¬ν΄μ€λ€.

μ΄λ κ². fromEnumμΌλ‘ enum->μ μν λ³νμ, toEnumμΌλ‘ μ μν->enum λ³νμ μνν μ μλ€.
νμ΄νλ enum νλ
μμμλ enum νλλ€μ νμ
μμ΄ κ·Έλ₯ μ΄λ¦ λμ΄λ§ νμ§λ§, νμ
μ μ§μ λΆμ¬ν΄μ λ€νμ μΈ ννμ λ°μ΄ν° ꡬ쑰λ₯Ό μ μΈν μλ μλ€.
μλλ Int κ°μ΄κ±°λ String κ°μ κ°μ§ μ μλ enumμ μ μνλ μμλ€.
κ°μ μ§μ μ λ¬νλ©΄μ μμ±ν μ μκ³ , ν¨ν΄λ§€μΉμ ν΅ν΄ μ€μ λ΄λΆ κ°μ κΊΌλ΄μμ μ¬μ©ν μ μλ€.
μ λλ¦
data νμ
μ μΈμλ νμ
μΈμλ₯Ό ν΅ν΄ μ λλ¦ κΈ°λ₯μ λΆμ¬ν μ μλ€.
λνμ μΌλ‘, monad νμ
μΈ Maybe κ°μ κ²μ΄ μ λλ¦ dataλ‘ κ΅¬νλ κ²μ΄λ€.
μ΄ κ²½μ° Maybeλ μ무κ²λ μλ Nothing μνμ΄κ±°λ, μ€μ λ‘ κ°μ΄ μλ Just μνμ¬μΌ νλ€.
κ·Έλ¦¬κ³ JustμΌ κ²½μ°μλ ꡬ체νλ νμ
νλΌλ―Έν° aμ κ°μ λ΄λΆμ μΌλ‘ λ€κ³ μλλ€. κ·Έκ² λ€λ€.