我创建了一个相互依赖的数据类型树,如下所示。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)
发布于 2014-03-03 17:35:33
也许您可以定义一些“智能构造函数”;例如:
cmdSub = PTCmd . CmdSub
hp = cmdSub . Hp
发布于 2014-03-03 18:06:05
如果你能负担得起使用GHC7.8,那么你应该看看PatternSynonyms扩展,因为它很好地解决了你的问题。
https://stackoverflow.com/questions/22150717
复制相似问题