2017-09-17 21 views
2

同じことをする一連のcase式をグループ化する方法はありますか?例えばelm(0.18)のcase式のグループ化

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 
    ... 
関連する問題