packages feed

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