我已经创建了一个相互依赖的数据类型树,如下所示。 PT是'root'数据类型。有些函数应该将较低的数据类型与根相结合。这样,给这些函数赋予类型签名(a - > b - > ... - > PT),要求我包含大量信息以获得较低的数据类型(PTCmd CmdSub Hp ...)。数据类型树的这种下降是无关紧要的,我不想在结果中包含这些信息。
如果我在PT本身中定义所有较低的数据类型,则数据类型定义难以阅读。
除了在结果中添加毫无价值的信息以及单个巨大的数据类型定义之外,还有另一种方法,最好是少量的眼睛,使我的函数导致根数据类型PT吗?
data PT = PTCmd Command | PTVal V | PTCon C
deriving (Eq, Show)
data Command = CmdSub Sub | ...
deriving (Eq, Show)
data SubCommand = Hp V C | ...
deriving (Eq, Show)
答案 0 :(得分:1)
也许你可以定义一些“智能构造函数”;例如:
cmdSub = PTCmd . CmdSub
hp = cmdSub . Hp
答案 1 :(得分:1)
如果您能负担得起使用GHC 7.8,那么您应该查看PatternSynonyms扩展名,因为它可以很好地解决您的问题。