0
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}

import Dhall

data Example = Example { foo :: Natural, bar :: Vector Double }
    deriving (Generic, Show)

instance Interpret Example

main :: IO ()
main = do
  putStrLn "Hello, Haskell!"
  x <- input auto "./example.dhall"
  print (x :: Example)

在上面的例子中,我怎样才能把 an 编码Example成一个 dhall 值,所以本质上是一个 type 的函数Example -> String?似乎在黑线鳕中找不到任何关于打印/编码的参考。

4

1 回答 1

1

这就是如何将 Haskell 值打印为等效的 Dhall 表达式的方法:

{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE DeriveAnyClass    #-}
{-# LANGUAGE OverloadedStrings #-}

import Dhall (FromDhall, Natural, ToDhall, Vector)
import Dhall.Pretty (CharacterSet(..))
import GHC.Generics (Generic)

import qualified Data.Text.Prettyprint.Doc.Render.Text as Prettyprint.Text
import qualified Dhall
import qualified Dhall.Pretty
import qualified Dhall.Core

data Example = Example { foo :: Natural, bar :: Vector Double }
    deriving (FromDhall, Generic, Show, ToDhall)

main :: IO ()
main = do
  x <- Dhall.input Dhall.auto "./example.dhall"

  let expression = Dhall.embed Dhall.inject (x :: Example)

  let doc = Dhall.Pretty.prettyCharacterSet Unicode expression

  Prettyprint.Text.putDoc doc
于 2020-08-15T17:54:38.490 回答