解决haskell数据记录中的循环依赖关系

2023-12-14

想象一下,我想编写一个处理播客提要的应用程序。为了存储来自此类提要的解析信息,我会编写如下内容:

data Podcast = Podcast {
    podcastTitle :: String, -- ^ title of podcast
    episodes :: [Episode]   -- ^ list of episodes of podcast
    ...                     -- ^ some other fields
} deriving (Show)

data Episode = Episode {
    episodeTitle :: String, -- ^ title of episode
    podcast :: Podcast      -- ^ podcast this episode belongs to
    ...                     -- ^ some other fields
} deriving (Show)

上述数据记录定义反映了数据类型之间常见的 1:n 关系:一个播客有许多剧集,而该剧集属于一个播客。现在我在定义此类播客时遇到问题:请定义一个Podcast我已经需要剧集列表,但要定义Episode我需要的实体Podcast实体。在我看来,在 haskell 中解决这种循环依赖是不可能的......

我还认为上面的代码是我用其他语言编程的遗留物。在上面的风格中,我会用 python 来做,但是这种编程语言有一个状态的概念。在python中我可以首先定义一个Podcast没有剧集的实体,然后初始化所有具有定义的剧集Podcast实体并设置episodes将播客字段添加到剧集列表中。

我的问题:建模播客和剧集之间 1:n 关系的 haskell 方法是什么?

评论中问题的回答:


循环依赖在 Haskell 中实际上非常简单。在一个let声明中,任何绑定的定义都可以引用任何其他绑定。

let pc = Podcast "the name" [ep1, ep2]
    ep1 = Episode "first" pc
    ep2 = Episode "second" pc

懒惰会帮你解决这个问题。

但作为一般规则,DBMS 是此类信息的最佳选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决haskell数据记录中的循环依赖关系 的相关文章

随机推荐

  • Adobe Socket 策略文件服务器问题

    有没有人能够成功实现一项服务来为 FlashPlayer 提供所需的套接字策略文件 我正在运行 Adob e 提供的服务的 Python 实现 http www adobe com devnet flashplayer articles s
  • Jquery 无法理解这个问题

    The alert i onclick 绑定线在 3 个 div 上运行 但所有这些在单击时都会提醒最后设置的值i 我希望我所做的事情是有意义的 这很难解释 它不是警报 1 2 或 3 而是警报 3 3 3 Updates bar prev
  • 是否可以检查所有 Java 8 流元素是否满足给定谓词之一?

    使用流 API 我可以轻松检查所有元素是否满足给定条件 使用allMatch e gt predicate e 方法 我还会检查是否满足多个条件中的任何一个allMatch e gt predicateA e predicateB e pr
  • 蛇吃掉一个方块后如何让更多的敌人出现

    所以我做了一个蛇游戏 但为了让它变得更难 我添加了一个用户必须避免的敌人 红色方块 但我想要它 所以当蛇吃掉它的一种食物时 另一个敌人会随机产生 一个例子是 如果他吃了 5 个食物 那么游戏中将会有 6 个敌人 所以我想知道如何让另一个敌人
  • QT下载大文件错误

    When I try to downloading file up to 50mb example no problem but with a big files give the following error void MainWind
  • kmalloc 中 GFP_USER 标志有什么用?

    据我了解 在GFP USER标志 在调用kmalloc 用于为用户空间分配内存 这是否意味着分配的页面位于用户可以访问的内核空间中 这些页面是否需要mmapp ed 在用户空间中或者用户可以直接访问该地址 如果他们需要mmapp那么有什么区
  • 什么会导致 DOMDocument.load 无法从可访问的 URL 加载 XML?

    doc new DOMDocument if doc gt load http foo com bar xml good else wtf happened I can wget http foo com bar xml从 PHP 代码运行
  • Net Core:Swashbuckle 自动将操作 ID 设置为控制器操作方法

    当为现有的 500 多个控制器和相应的方法创建 Angular API 服务代理时 我们试图覆盖 Swashbuckle Swagger IO CodeGen 命名约定 目前正在将 Net Core 3 API 与 Angular Type
  • 如何知道Android解码器MediaCodec.createDecoderByType(type)是硬件解码器还是软件解码器?

    有没有办法确定使用 MediaCodec createDecoderByType type 接收的解码器是硬件解码器还是软件解码器 没有真正正式的标志来指示编解码器是硬件编解码器还是软件编解码器 但实际上 您可以这样做 MediaCodec
  • 读取 servlet 中的 JSON 值[重复]

    这个问题在这里已经有答案了 我将 jQuery AJAX POST 发布到 servlet 数据采用 JSON 字符串的形式 我不确定数据是否已发布 另外 我想通过从 json 对象获取登录名和密码来验证登录名和密码 这是代码片段
  • 发送请求并获取响应

    我的服务器上运行着一个 php 代码 我称之为 Web 服务 它处理发送整数值中的数据 我怎样才能得到它 这是我的请求 url NSString requestURL NSString stringWithFormat u p platfo
  • Bot 框架模拟器不工作

    我上周开始学习机器人框架 我决定从返回您的输入及其字符数的默认机器人项目开始 但不幸的是 我无法在机器人模拟器中测试机器人应用程序 它不能只发送我的输入 每当我转发输入时 它都会显示 无法发送 我的端点网址是http localhost 3
  • MYSQL中日期字段的格式化方法

    All 我需要在 MYSQL 中检索某种特定格式的日期 例如 它应该返回月 年 10 2009 我的MYSQL版本是5 1 谢谢 斯里尼瓦桑 日期格式功能 DATE FORMAT col m Y
  • jQuery 不会解析带有名为 option 的节点的 xml

    我使用 jQuery 来解析一些 XML 如下所示 function enumOptions xml xml find animal each function alert this text enumOptions
  • Matplotlib - imshow twiny() 问题

    我试图在 matplotlib imshow 图中有两个相互依赖的 x 轴 我将底部 x 轴作为半径的平方 而我希望顶部仅作为半径 到目前为止我已经尝试过 ax8 ax7 twiny ax8 sharex ax7 fmtr FuncForm
  • SecTrustEvaluate() 是否在应用程序钥匙串中查找根证书?

    文档说 如果验证叶证书所需的所有证书均未包含在信任管理对象中 则 SecTrustEvaluate 会在钥匙串搜索列表 请参阅 SecTrustSetKeychains 和系统的锚证书存储中 请参阅 SecTrustSetAnchorCer
  • 不要在服务器端代码中使用 System.out.println

    我听说使用System out println用于日志记录是一种非常糟糕的做法 这可能会迫使服务器失败 我不使用这种方法 但我很想知道为什么 System out println 在后端代码中使用时会产生如此垃圾的东西 System out
  • 如何在 Keras 中创建自定义回调?

    我有兴趣在拟合我的 keras 模型时创建回调 更详细地说 我希望每次纪元结束时都会收到来自机器人电报的带有 val acc 的消息 我知道你可以添加一个callback list作为参数classifier fit 但许多回调是由 ker
  • MATLAB - 根据向量的排序方式对矩阵进行排序[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 MATLAB 中根据一列对二维数组进行排序 将一个矩阵与另一个矩阵排序 我有一个包含 429 个值的向量 A 和一个包含 429x200 个值的矩阵 B A 和 B 中的行共享相同的索引 我的
  • 解决haskell数据记录中的循环依赖关系

    想象一下 我想编写一个处理播客提要的应用程序 为了存储来自此类提要的解析信息 我会编写如下内容 data Podcast Podcast podcastTitle String title of podcast episodes Episo