【发布时间】:2018-04-28 02:15:25
【问题描述】:
如何在 haskell 中对我称之为“异构图”的模型进行建模,以便在编译时验证图的类型正确性?
为此,异构图是一组节点,每个节点都有一个特定的类型标签,以及一组边,每个边都有一个源类型标签和一个目标类型标签。
我们希望静态地确保在将边添加到图中时,该边的源类型标签与源节点的类型标签以及该边的目标类型标签匹配匹配目标节点的类型标签。但我们不希望以微不足道的方式做到这一点(通过强制整个图只包含具有一个特定类型标签的节点)。
【问题讨论】:
-
“类型”是指编译时类型吗?如果是这样,他们将需要某种运行时残留物。如果类型集易于枚举,则可能是 GADT,如果类型集不易枚举,则可能使用
Typeable。 -
您对在内部使用不安全功能的安全界面感兴趣吗?你的图应该支持哪些操作?并且对节点的类型有什么限制吗?
-
@JoachimBreitner 是的,在内部使用不安全的功能会很好。可键入或可擦除的幻象节点/边缘类型将优于 unsafeCoerce 之类的类型,但如果它是必要且外部安全的,则任何事情都会发生。既然您问了,一旦知道图形的类型正确,将其转换为同质表示可能就足够了。也许在这个意义上检查同质表示的正确性的 TH 拼接可能满足我的所有需求,我会稍微探索一下这条路径。
-
我认为可以有一个实现来存储
Any类型的节点,使用标记类型公开接口,在内部使用unsafeCoerce,也许还有更高级别的类型(如runST)确保不同图形的节点不会混淆。但是先看看你的“梦想界面”会很有帮助。
标签: haskell graph-theory dsl typechecking