Haskell:
Praca z YAML
Jak to zrobić:
Haskell nie posiada wbudowanego wsparcia dla przetwarzania YAML, ale można używać bibliotek stron trzecich, takich jak yaml
i aeson
, do parsowania i generowania danych YAML. Oto, jak możesz zacząć:
Czytanie YAML
Najpierw dodaj pakiet yaml
do zależności swojego projektu. Następnie możesz użyć poniższego przykładu, aby przeanalizować prosty dokument YAML:
{-# LANGUAGE OverloadedStrings #-}
import Data.YAML
import Data.ByteString (ByteString)
import Control.Monad.IO.Class (liftIO)
-- Przykładowe dane YAML
yamlData :: ByteString
yamlData = "
name: John Doe
age: 30
"
-- Zdefiniuj strukturę danych, która pasuje do dokumentu YAML
data Person = Person
{ name :: String
, age :: Int
} deriving (Show)
instance FromYAML Person where
parseYAML = withMap "Person" $ \m -> Person
<$> m .: "name"
<*> m .: "age"
main :: IO ()
main = do
let parsed = decode1 yamlData :: Either (Pos,String) Person
case parsed of
Left err -> putStrLn $ "Błąd parsowania YAML: " ++ show err
Right person -> print person
Przykładowe wyjście dla powyższego kodu może wyglądać tak:
Person {name = "John Doe", age = 30}
Pisanie YAML
Aby wygenerować YAML z struktur danych Haskell, możesz użyć funkcji kodujących pakietu yaml
, jak pokazano poniżej:
{-# LANGUAGE OverloadedStrings #-}
import Data.YAML
import Data.ByteString.Lazy.Char8 (unpack)
-- Korzystając ze struktury danych Person z poprzedniego przykładu
person :: Person
person = Person "Jane Doe" 25
main :: IO ()
main = do
let yamlData = encode1 person
putStrLn $ unpack yamlData
Wyjście tego programu będzie ciągiem sformatowanym w YAML:
name: Jane Doe
age: 25
Te przykłady powinny posłużyć jako punkt wyjścia do pracy z YAML w Haskellu. W zależności od Twoich potrzeb, możesz chcieć zbadać bardziej zaawansowane funkcje i opcje oferowane przez te biblioteki.