Pře*_*tný 0 python haskell cpython haskell-ffi
让我们在 Haskell 中使用一些有限递归数据结构。例如。
data Tree = Node Tree Tree | Nil
Run Code Online (Sandbox Code Playgroud)
我需要能够将这样的数据结构从 Haskell 加载到 Python,更改它并将其返回到 Haskell。
有没有一些标准/优雅的方法可以在没有太多痛苦的情况下做到这一点?例如。使用一些目录之类的对象?
最简单的选择可能是通过 JSON,因为 Haskell 可以轻松支持将数据保存为 JSON,而 Python 可以直接将其加载为字典。
{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
import GHC.Generics
import Data.Aeson
import Data.Aeson.TH
data Tree = Node Tree Tree | Nil
deriving (Generic, FromJSON, ToJSON)
Run Code Online (Sandbox Code Playgroud)
这会生成相当尴尬的 JSON,就像,Node (Node Nil Nil) Nil变成
"tag": "Node",
"contents": [
{
"tag": "Node",
"contents": [
{
"tag": "Nil"
},
{
"tag": "Nil"
}
]
},
{
"tag": "Nil"
}
]
Run Code Online (Sandbox Code Playgroud)
它变得更加紧凑
data TreeNode = Node { lSubtree, rSubtree :: Tree }
deriving (Generic, FromJSON, ToJSON)
type Tree = Maybe TreeNode
Run Code Online (Sandbox Code Playgroud)
其中等效项Node (Just (Node Nothing Nothing)) Nothing现在保存为
{
"rSubtree": null,
"lSubtree": {
"rSubtree": null,
"lSubtree": null
}
}
Run Code Online (Sandbox Code Playgroud)