hpack-dhall-0.2.0: src/Hpack/Dhall.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
module Hpack.Dhall where
import Control.Monad.Trans.Except
import Control.Monad.IO.Class
import Data.Bifunctor
import Data.Aeson
import qualified Data.Text.Lazy.IO as LT
import System.Environment
import qualified Dhall.Parser
import qualified Dhall.Import
import qualified Dhall.TypeCheck
import qualified Dhall.JSON
import qualified Hpack
packageConfig :: FilePath
packageConfig = "package.dhall"
decodeDhall :: FilePath -> IO (Either String Value)
decodeDhall file = runExceptT $ do
expr <- readInput >>= parseExpr >>= liftIO . Dhall.Import.load
_ <- liftResult $ Dhall.TypeCheck.typeOf expr
liftResult $ Dhall.JSON.dhallToJSON expr
where
readInput = liftIO (LT.readFile file)
parseExpr = liftResult . Dhall.Parser.exprFromText file
liftResult = ExceptT . return . first show
main :: IO ()
main = do
getArgs >>= Hpack.getOptions packageConfig >>= \ case
Just (verbose, options) -> Hpack.hpack verbose (Hpack.setDecode decodeDhall options)
Nothing -> return ()