私は単純な型と機能を持っていますが、そこには定型文がたくさんあるようです。私の本当の疑問は、もし入力が能力のタイプであることを知っていれば、Str/Dexのどれかのどれか、パターンマッチなしでIntegerを抽出する最も簡単な方法は何ですか?Haskellコンストラクタ型パターンマッチング
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 [email protected](StrAbi s) = (abi, Modifier $ modifier' s)
setModifier [email protected](DexAbi s) = (abi, Modifier $ modifier' s)
setModifier [email protected](ConAbi s) = (abi, Modifier $ modifier' s)
setModifier [email protected](IntAbi s) = (abi, Modifier $ modifier' s)
setModifier [email protected](WisAbi s) = (abi, Modifier $ modifier' s)
setModifier [email protected](ChaAbi s) = (abi, Modifier $ modifier' s)
おかげで、 //
あなたは 'Functor'をも導き出すことができ。 – Reactormonk
あなたはAbilityタイプをマップすることを意味していますか? – pip
もう一つのオプションは 'm = modifier 'sです。ブロックの終わりに。それを 'where a = ability 'と組み合わせて、少なくともあなたは一度だけ書く必要があるユーティリティ関数に定型文を移動します。 – Davislor