2017-09-17 2 views
2

의 대소 문자 표현 그룹화 동일한 작업을 수행하는 일련의 사례 표현을 함께 그룹화하는 방법은 elm (0.18)입니까? 예를 들어elm (0.18)

:

type Character 
    = Sleepy 
    | Happy 
    | Grumpy 
    | Dopey 
    | Sneezy 
    | Bashful 
    | Doc 
    | SnowWhite 
    | Queen 


getKindOfCharacter : Character -> String 
getKindOfCharacter character = 
    case character of 
    (Sleepy | Happy | Grumpy | Dopey | Sneezy | Bashful | Doc) -> 
     "Dwarf" 
    SnowWhite -> 
     "Hero" 
    Queen -> 
     "Villain" 

답변

4

아니,하지만 다음과 같이 당신이 당신의 유형을 리팩토링 할 수도

type Character 
    = Dwaft Dwarf 
    | SnowWhite 
    | Queen 

type Dwarf 
    = Sleepy 
    | Happy 
    | Grumpy 
    | Dopey 
    | Sneezy 
    | Bashful 
    | Doc 

getKindOfCharacter : Character -> String 
getKindOfCharacter character = 
    case character of 
    Dwarf _ -> 
     "Dwarf" 
    SnowWhite -> 
     "Hero" 
    Queen -> 
     "Villain" 

또는 더 나은 ... 그리고

type Character 
    = Dwaft Dwarf 
    | Hero Hero 
    | Villain Villain 

type Dwarf 
    = Sleepy 
    | Happy 
    | Grumpy 
    | Dopey 
    | Sneezy 
    | Bashful 
    | Doc 

type Hero 
    = SnowWhite 

type Villain 
    = Queen 

당신이 woudn't Character 유형이 동일한 정보를 제공하므로 getKindOfCharacter 기능이 필요합니다.

let 
    hero : Character 
    hero = Hero SnowWhite 

    villain : Character 
    villain = Villain Queen 

    dwarf : Character 
    dwarf = Dwarf Dopey 
in 
    ...