gpt4 book ai didi

haskell - haskell中具有循环依赖的数据结构

转载 作者:行者123 更新时间:2023-12-04 00:44:52 26 4
gpt4 key购买 nike

我正在尝试使用 parsec 在 haskell 中实现简单的解析器图书馆(用于学习目的)。所以我写了一堆数据结构和相关函数,如下所示:

data SourceElement 
= StatementSourceElement Statement
| FunctionSourceElement FunctionName FunctionBody

data Statement
= IfStatement Expr Statement Statement
| WhileStatement Expr Statement

data FunctionBody = FunctionBody [SourceElement]

parseSourceElement :: Parser SourceElement
parseSourceElement = ...

parseFunctionBody :: Parser FunctionBody
parseFunctionBody = ...

它工作正常。现在我想把这些东西分成两个模块来分隔 FunctionBodyStatement数据结构(由于可读性问题)。但我不能!原因是 SourceElement 之间的循环依赖。和 FunctionBody .

那么,有没有办法解决这个问题呢?

最佳答案

我打破依赖循环的典型方法是参数化一些东西。在这种情况下,您的 Function模块可能会为您的语言执行函数解析器,但以这样一种方式表示,无论该语言的其余部分如何,它都可以这样做。因此:

module Function where 

data FunctionBody e = FunctionBody [e]

parseFunctionBody :: Parser e -> Parser (FunctionBody e)


module AST where

data SourceElement
= StatementSourceElement Statement
| FunctionSourceElement FunctionName (FunctionBody SourceElement)

因此相互递归被抽象为简单的递归+参数化。我认为参数化至少与将不同的东西分成不同的文件一样重要,所以一个强制另一个是很好的(也有点烦人)。

关于haskell - haskell中具有循环依赖的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788676/

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