如何在 Haskell 中组合这些类似的功能?
getGroup [] acc = reverse acc
getGroup ((Letter x):letfs) acc = getGroup letfs ((Letter x):acc)
getGroup ((Group x):letfs) acc = getGroup letfs ((Group (makeList x)):acc)
getGroup ((Star x):letfs) acc = getGroup letfs ((Star (makeList x)):acc)
getGroup ((Plus x):letfs) acc = getGroup letfs ((Plus (makeList x)):acc)
getGroup ((Ques x):letfs) acc = getGroup letfs ((Ques (makeList x)):acc)
Letter、Group、Star、Plus 和 Ques 都是数据类型定义的一部分。
data MyData a
= Operand a
| Letter a
| Star [RegEx a]
| Plus [RegEx a]
| Ques [RegEx a]
| Pipe [RegEx a] [RegEx a]
| Group [RegEx a]
deriving Show
由于它们的相似性,我想知道是否有更好的方法来编写这些函数。大多数情况下,我希望将 Group、Star、Plus 和 Ques 的功能结合起来,因为它们是相同的,但如果有一种方法可以将它们全部结合起来,那就更好了。