【问题标题】:Haskell interdependent datatype tree aestheticsHaskell 相互依赖的数据类型树美学
【发布时间】:2014-03-04 02:06:04
【问题描述】:

我已经制作了一个相互依赖的数据类型树,如下所示。 PT 是“根”数据类型。有些函数应该将较低的数据类型组合到根。这样,为这些函数提供类型签名(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)

【问题讨论】:

    标签: haskell types


    【解决方案1】:

    也许你可以定义一些“智能构造函数”;例如:

    cmdSub = PTCmd . CmdSub
    hp = cmdSub . Hp
    

    【讨论】:

      【解决方案2】:

      如果您负担得起使用 GHC 7.8,那么您应该查看 PatternSynonyms 扩展,因为它很好地解决了您的问题。

      【讨论】:

        猜你喜欢
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 2020-06-12
        相关资源
        最近更新 更多