我正在尝试使用dhall重写一个在Haksell应用程序中使用的大型yaml配置文件。为此,我使用了json-to-dhall,它需要一个属于结果表达式类型的模式。问题是实际的模式几乎不可能手动编写,因为它涉及许多sum类型(以及嵌套的sum类型)。我尝试通过手动将yaml的某些部分转换为dhall来生成模式,然后运行dhall type。这提供了一个模式,稍后我可以在jston-to-dhall中使用它。这适用于简单类型,但现在我面临联合(联合)的问题。Dhall需要类型注释来编写我用来生成类型的文件...所以我想知道是否有一种方法(使用工具或修改我的haskell应用程序)将Haskell数据转储到正确的dhall文件中,或者至少从Haskell类型生成模式。
发布于 2019-07-01 10:08:07
可以,您可以从Haskell类型生成Dhall类型。
下面是一个如何做到这一点的示例:
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE TypeApplications #-}
import Data.Either.Validation (Validation(..))
import Data.Text (Text)
import Dhall (FromDhall)
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, FromDhall)
data Person = Person { age :: Natural, name :: Text, mood :: Mood }
deriving (Generic, FromDhall)
main :: IO ()
main = do
case Dhall.expected (Dhall.auto @Person) of
Success result -> Text.IO.putStrLn (Dhall.Core.pretty result)
Failure errors -> print errors..。以下哪项输出:
$ runghc ./example.hs
{ age : Natural, name : Text, mood : < Happy | Sad > }https://stackoverflow.com/questions/56824404
复制相似问题