Подтвердить что ты не робот

Чтение YAML в Haskell

Я ищу, чтобы мои настройки программы Haskell считывали из внешнего файла, чтобы избежать повторной компиляции для незначительных изменений. Будучи знакомым с YAML, я думал, что это будет хороший выбор. Теперь я должен собрать две части. Google пока не очень полезен.

Небольшой примерный код, посвященный чтению и деконструированию YAML из файла, будет очень оценен.

4b9b3361

Ответ 1

Если мне интересно, какие пакеты доступны, я перехожу к взлому, просмотрю полный список пакетов, а затем просто поиск по странице для ключевого слова. Это приводит к этим выборам (наряду с несколькими другими менее убедительными):

и обертка вокруг HsSyck, называемая yaml-light: http://hackage.haskell.org/package/yaml-light

Как yaml, так и HsSyck выглядят обновленными относительно недавно и, по-видимому, используются другими широко распространенными пакетами. Вы можете увидеть это, проверив обратные отпечатки:

Из этих двух ямль имеет больше депо, но это потому, что он является частью экосистемы Yesod. Одна библиотека, которая зависит от HsSyck, есть yst, которая, как мне известно, активно поддерживается, поэтому это указывает на то, что HsSyck тоже прекрасен.

Следующим шагом в моем выборе было бы просмотреть документацию обеих библиотек и посмотреть, какая из них была более привлекательной для моих целей.

Из двух, похоже, HsSyck предоставляет больше структуры, но не намного больше, в то время как yaml проходит через json-кодировки, предоставляемые aeson. Это указывает на то, что первое, вероятно, более мощное, а последнее более удобно.

Ответ 2

Простой пример:

Сначала вам нужен файл test.yml:

db: /db.sql
limit: 100

Чтение YAML в Haskell

{-# LANGUAGE DeriveGeneric #-}

import GHC.Generics
import Data.Yaml

data Config = Config { db :: String
                     , limit :: Int
                     } deriving (Show, Generic)

instance FromJSON Config

main :: IO ()
main = do
  file <- decodeFile "test.yml" :: IO (Maybe Config)
  putStrLn (maybe "Error" show file)