2017-09-17 3 views
2

Gibt es eine Möglichkeit in elm (0.18), eine Reihe von Fallausdrücken zu gruppieren, die dasselbe tun?Gruppieren von Fallausdrücken in Ulme (0.18)

Zum Beispiel:

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" 

Antwort

4

Nein, aber Sie können Ihre Arten Refactoring wie folgt:

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" 

Oder noch besser ...

type Character 
    = Dwaft Dwarf 
    | Hero Hero 
    | Villain Villain 

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

type Hero 
    = SnowWhite 

type Villain 
    = Queen 

Dann woudn't Sie brauche die getKindOfCharacter Funktion, weil der Character Typ die gleichen Informationen zur Verfügung stellen würde.

let 
    hero : Character 
    hero = Hero SnowWhite 

    villain : Character 
    villain = Villain Queen 

    dwarf : Character 
    dwarf = Dwarf Dopey 
in 
    ...