hpack-dhall-0.1.0: src/Hpack/Dhall.hs
{-# 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 qualified Data.Text as T
import Data.Text.Encoding (encodeUtf8)
import Text.Trifecta.Delta (Delta(..))
import qualified Dhall.Parser
import qualified Dhall.Import
import qualified Dhall.TypeCheck
import qualified Dhall.JSON
import qualified Hpack
packageConfig :: FilePath
packageConfig = "package.dhall"
readDhall :: FilePath -> IO (Either String Value)
readDhall 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 (Directed (encodeUtf8 $ T.pack file) 0 0 0 0)
liftResult = ExceptT . return . first show
main :: IO ()
main = Hpack.mainWith packageConfig readDhall