Haskell Constructor Type Pattern Matching

Viewed 1094

I have a simple type and function below, but seems a lot of boilerplate there, so wonder is there a better way to do it. My real question I guess is if I know the input is of type Ability, so any one of the Str/Dex etc, what is the easiest way to extract the Integer from it without pattern match each one of them?

data Ability = StrAbi Integer
         | DexAbi Integer
         | ConAbi Integer
         | IntAbi Integer
         | WisAbi Integer
         | ChaAbi Integer
         deriving (Show)

data Modifier = Modifier Integer deriving (Show)

setModifier :: Ability -> (Ability, Modifier)
setModifier abi@(StrAbi s) = (abi, Modifier $ modifier' s)
setModifier abi@(DexAbi s) = (abi, Modifier $ modifier' s)
setModifier abi@(ConAbi s) = (abi, Modifier $ modifier' s)
setModifier abi@(IntAbi s) = (abi, Modifier $ modifier' s)
setModifier abi@(WisAbi s) = (abi, Modifier $ modifier' s)
setModifier abi@(ChaAbi s) = (abi, Modifier $ modifier' s)

Thanks, //

3 Answers
Related