{-# LANGUAGE OverloadedStrings #-}

module Dhall.Hash ( hash ) where

import Dhall.Parser (exprFromText)
import Dhall.Import (hashExpressionToCode, load)

import qualified Control.Exception
import qualified Dhall.TypeCheck
import qualified Data.Text.IO

hash :: IO ()
hash = do
        inText <- Data.Text.IO.getContents

        expr <- case exprFromText "(stdin)" inText of
            Left  err  -> Control.Exception.throwIO err
            Right expr -> return expr

        expr' <- load expr

        _ <- case Dhall.TypeCheck.typeOf expr' of
            Left  err -> Control.Exception.throwIO err
            Right _   -> return ()

        Data.Text.IO.putStrLn (hashExpressionToCode expr')