Да, вы можете генерировать тип Dhall из типа Haskell.
Вот пример того, как это сделать:
{-# 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)))
... который выводит:
$ runghc ./example.hs
{ age : Natural, name : Text, mood : < Happy | Sad > }