module Hydrogen.Data ( emptyNode , loadData , merge , Data ) where import Hydrogen.Prelude import Hydrogen.Syntax.Parser import Hydrogen.Data.Parser import Hydrogen.Data.Types import Hydrogen.Util.Parsec hiding (parse) import qualified Data.Map as Map merge :: Data -> Data -> Data merge d1 d2 = case (d1, d2) of (DNode m1 l1, DNode m2 l2) -> DNode (Map.unionWith merge m1 m2) (l1 ++ l2) (_, dx) -> dx emptyNode :: Data emptyNode = DNode Map.empty [] loadData :: FilePath -> IO (Either SomethingBad Data) loadData fp = (parseData <+< parse fp) <$> readFile fp