2017-09-17 4 views
2

Existe-t-il un moyen pour orm (0.18) de regrouper une série d'expressions de cas qui font la même chose?Expressions de cas groupées dans elm (0.18)

Par exemple:

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" 

Répondre

4

Non, mais vous pouvez factoriser vos types comme suit:

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" 

Ou mieux encore ...

type Character 
    = Dwaft Dwarf 
    | Hero Hero 
    | Villain Villain 

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

type Hero 
    = SnowWhite 

type Villain 
    = Queen 

Ensuite, vous woudn't besoin de la fonction getKindOfCharacter car le type Character fournirait la même information.

let 
    hero : Character 
    hero = Hero SnowWhite 

    villain : Character 
    villain = Villain Queen 

    dwarf : Character 
    dwarf = Dwarf Dopey 
in 
    ...