{-# LANGUAGE RecordWildCards #-} module Hpack.Yaml where import Data.Yaml hiding (decodeFile, decodeFileEither) import Data.Yaml.Include decodeYaml :: FromJSON a => FilePath -> IO (Either String a) decodeYaml file = do result <- decodeFileEither file return $ either (Left . errToString) Right result where errToString err = file ++ case err of AesonException e -> ": " ++ e InvalidYaml (Just (YamlException s)) -> ": " ++ s InvalidYaml (Just (YamlParseException{..})) -> ":" ++ show yamlLine ++ ":" ++ show yamlColumn ++ ": " ++ yamlProblem ++ " " ++ yamlContext where YamlMark{..} = yamlProblemMark _ -> ": " ++ show err