gpt4 book ai didi

haskell - 如何重构 Haskell 数据类型中的重复字段名称?

转载 作者:行者123 更新时间:2023-12-04 23:35:19 25 4
gpt4 key购买 nike

我正在尝试编写一个数据结构来描述我的简历中的项目,只是为了了解 Haskell 及其数据类型。这是我到目前为止所拥有的:

data Update = Talk { date :: Date,
pubTitle :: Text,
url :: URI,
venue :: Text
}
| Publication { date :: Date,
pubTitle :: Text,
venue :: Venue,
pubType :: PublicationType
}
| Award { date :: Date,
award :: Text,
awardedBy :: Link
}
| News { date :: Date, desc :: Markdown }
deriving Show


data PublicationType = Tutorial | Article | Chapter | Abstract

这显然行不通,因为 Haskell 认为我有多个 date 声明。等等。我见过 this question答案建议使用扩展名,但我尝试添加 {-# LANGUAGE DuplicateRecordFields #-}到我的文件顶部,它似乎没有帮助 - 我遇到了同样的错误。

我怀疑有办法以某种方式重构这些记录,不是吗?或者也许我应该做一些完全不同的事情来传达这种数据结构。

最佳答案

您可以采取的一种方法是排除重复:

data Update = Update Date Event                                                 

data Event = News Markdown
| Award Text Link
| Artifact { title :: Text
, venue :: Venue
, artifact :: Accomplishment
}

data Accomplishment = Talk URI
| Publication PublicationType

在这里,我对 Artifact 构造函数使用了记录语法,但我不相信这是最好的方法。它创建的部分访问器非常糟糕;我只是使用它,因为否则不清楚 Text 字段的含义。您可以通过在 Text 周围定义 newtype 或类型别名来使用非记录语法来解决这个问题;或者您可以添加一个包含相同内容的命名 Artifact 类型,而 Artifact 构造函数只包含一个 Artifact。

关于haskell - 如何重构 Haskell 数据类型中的重复字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59721961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com