我有一些 ADT,每个 ADT 可能包含或不包含另一个 ADT。我需要从较低级别检索数据,并且我正在编写一些非常重复的代码,我确信这些代码可以被消除。我在 Real World Haskell 和“Learn You a Haskell For Great Good”中查看了一些示例代码,但我不太明白。这是一个关于 ADT 被遗漏的无关细节的示例。
T24Report
- projTitle :: Maybe ProjectTitle
- zip :: Maybe String
要从 StreetAddress 中检索邮政编码,我一直这样做:
projNameStr :: T24Report -> String
projNameStr t24 = if isNothing projTitleMaybe
then ""
else (fromMaybe "") $ zip $ fromJust projTitleMaybe
where
projTitleMaybe = projTitle $ project t24
随着对象链的深度增加,代码的重复性也会增加。肯定有更好的办法。想法?参考?我在 StackOverflow 上找不到类似的问题,但我相信它一定在这里......这似乎是一个必须被问到的简单问题。
谢谢,蒂姆