首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法从haskell数据类型生成dhall模式?

有没有办法从haskell数据类型生成dhall模式?
EN

Stack Overflow用户
提问于 2019-06-30 19:14:22
回答 1查看 287关注 0票数 6

我正在尝试使用dhall重写一个在Haksell应用程序中使用的大型yaml配置文件。为此,我使用了json-to-dhall,它需要一个属于结果表达式类型的模式。问题是实际的模式几乎不可能手动编写,因为它涉及许多sum类型(以及嵌套的sum类型)。我尝试通过手动将yaml的某些部分转换为dhall来生成模式,然后运行dhall type。这提供了一个模式,稍后我可以在jston-to-dhall中使用它。这适用于简单类型,但现在我面临联合(联合)的问题。Dhall需要类型注释来编写我用来生成类型的文件...所以我想知道是否有一种方法(使用工具或修改我的haskell应用程序)将Haskell数据转储到正确的dhall文件中,或者至少从Haskell类型生成模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-01 10:08:07

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

下面是一个如何做到这一点的示例:

代码语言:javascript
复制
{-# 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

..。以下哪项输出:

代码语言:javascript
复制
$ runghc ./example.hs
{ age : Natural, name : Text, mood : < Happy | Sad > }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56824404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档