让我们在 Haskell 中有一些有限的递归数据结构。例如。
data Tree = Node Tree Tree | Nil
我需要能够将此类数据结构从 Haskell 加载到 Python,对其进行更改并将其返回给 Haskell。
有没有一些标准/优雅的方法可以做到这一点而不会带来太多痛苦?例如。使用一些像对象这样的目录?
让我们在 Haskell 中有一些有限的递归数据结构。例如。
data Tree = Node Tree Tree | Nil
我需要能够将此类数据结构从 Haskell 加载到 Python,对其进行更改并将其返回给 Haskell。
有没有一些标准/优雅的方法可以做到这一点而不会带来太多痛苦?例如。使用一些像对象这样的目录?
最简单的选择可能是通过 JSON,因为 Haskell 很容易支持将数据保存为 JSON,而 Python 可以直接将其加载为 dicts。
{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
import GHC.Generics
import Data.Aeson
import Data.Aeson.TH
data Tree = Node Tree Tree | Nil
deriving (Generic, FromJSON, ToJSON)
这会生成相当尴尬的 JSON,但是就像Node (Node Nil Nil) Nil
变成
"tag": "Node",
"contents": [
{
"tag": "Node",
"contents": [
{
"tag": "Nil"
},
{
"tag": "Nil"
}
]
},
{
"tag": "Nil"
}
]
它变得更加紧凑
data TreeNode = Node { lSubtree, rSubtree :: Tree }
deriving (Generic, FromJSON, ToJSON)
type Tree = Maybe TreeNode
等价物Node (Just (Node Nothing Nothing)) Nothing
现在保存为
{
"rSubtree": null,
"lSubtree": {
"rSubtree": null,
"lSubtree": null
}
}