有没有一种方法可以从haskell数据类型生成dhall模式?

mb1*_*b14 6 haskell dhall

我正在尝试使用dhall重写Haksell应用程序中使用的BIG Yaml配置文件。为此,我使用的json-to-dhall是需要SCHEMA的类型,即重排表达式的类型。问题是实际架构几乎不可能手动编写,因为它涉及很多求和类型(和嵌套求和类型)。我尝试通过将yaml的某些部分手动转换为dhall并运行来生成模式dhall type。这给出了我可以使用的架构jston-to-dhall后来。这适用于简单类型,但是现在我面临着(工会)工会的问题。Dhall需要类型注释来写入我用来生成类型的文件...所以我想知道是否有一种方法(使用工具或修改我的haskell应用程序)将Haskell数据转储到正确的dhall文件或至少从Haskell类型生成模式。

Gab*_*lez 8

是的,您可以从Haskell类型生成Dhall类型。

这是如何执行此操作的示例:

{-# LANGUAGE DeriveGeneric    #-}
{-# LANGUAGE DeriveAnyClass   #-}
{-# LANGUAGE TypeApplications #-}

import Data.Text (Text)
import Dhall (Interpret)
import GHC.Generics (Generic)
import Numeric.Natural (Natural)

import qualified Data.Text.IO as Text.IO
import qualified Dhall
import qualified Dhall.Core

data Mood = Happy | Sad
    deriving (Generic, Interpret)

data Person = Person { age :: Natural, name :: Text, mood :: Mood }
    deriving (Generic, Interpret)

main :: IO ()
main = do
    Text.IO.putStrLn (Dhall.Core.pretty (Dhall.expected (Dhall.auto @Person)))
Run Code Online (Sandbox Code Playgroud)

...输出:

$ runghc ./example.hs
{ age : Natural, name : Text, mood : < Happy | Sad > }
Run Code Online (Sandbox Code Playgroud)