dhall-1.26.0: src/Dhall/Hash.hs
{-# LANGUAGE OverloadedStrings #-}
-- | This module contains the implementation of the @dhall hash@ subcommand
module Dhall.Hash
( -- * Hash
hash
) where
import Dhall.Parser (exprFromText)
import Dhall.Import (hashExpressionToCode)
import qualified Control.Monad.Trans.State.Strict as State
import qualified Control.Exception
import qualified Dhall.Core
import qualified Dhall.Import
import qualified Dhall.TypeCheck
import qualified Data.Text.IO
-- | Implementation of the @dhall hash@ subcommand
hash :: IO ()
hash = do
inText <- Data.Text.IO.getContents
parsedExpression <- case exprFromText "(stdin)" inText of
Left exception -> Control.Exception.throwIO exception
Right parsedExpression -> return parsedExpression
let status = Dhall.Import.emptyStatus "."
resolvedExpression <- State.evalStateT (Dhall.Import.loadWith parsedExpression) status
case Dhall.TypeCheck.typeOf resolvedExpression of
Left exception -> Control.Exception.throwIO exception
Right _ -> return ()
let normalizedExpression =
Dhall.Core.alphaNormalize (Dhall.Core.normalize resolvedExpression)
Data.Text.IO.putStrLn (hashExpressionToCode normalizedExpression)