Changeset 8675 for src/Pugs/Prim/Yaml.hs

Show
Ignore:
Timestamp:
01/15/06 08:26:19 (3 years ago)
Author:
audreyt
Message:

* DriFT.YAML: Dumping Haskell structures as YAML.
* ./pugs -CPIL1-YAML etc works.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim/Yaml.hs

    r8652 r8675  
    6969 
    7070strNode :: String -> YamlNode 
    71 strNode str = emptyYamlNode{el = YamlStr str } 
     71strNode = mkNode . YamlStr 
    7272 
    7373toYaml :: (?d :: Int) => Val -> Eval YamlNode 
    7474toYaml _ | ?d == 0  = return $ strNode "<deep recursion>" -- fail? make this configurable? 
    75 toYaml VUndef       = return emptyYamlNode 
     75toYaml VUndef       = return $ mkNode YamlNil 
    7676toYaml (VBool x)    = return $ boolToYaml x 
    7777toYaml (VStr str)   = return $ strNode (encodeUTF8 str) 
     
    8181        v'      <- readRef r 
    8282        nodes   <- toYaml v' 
    83         ifValTypeIsa v "Array" (return nodes) $ case v' of 
    84             VObject _   -> return nodes 
    85             _           -> return emptyYamlNode{el = YamlMap [(strNode "<ref>", nodes)]} 
     83        ifValTypeIsa v "Array" (return nodes) . return $ case v' of 
     84            VObject _   -> nodes 
     85            _           -> mkNode $ YamlMap [(strNode "<ref>", nodes)] 
    8686toYaml (VList nodes) = let ?d = pred ?d in do 
    8787    n <- mapM toYaml nodes 
    88     return $ emptyYamlNode{el=YamlSeq n} -- golfme! 
     88    return $ mkNode (YamlSeq n) 
    8989    -- fmap YamlSeq$ mapM toYaml nodes 
    9090toYaml v@(VObject obj) = let ?d = pred ?d in do 
     
    9898toYaml (VRule MkRulePGE{rxRule=rule, rxGlobal=global, rxStringify=stringify, rxAdverbs=adverbs}) = let ?d = pred ?d in do 
    9999    adverbs' <- toYaml adverbs 
    100     return emptyYamlNode{el = YamlMap 
    101                             [ (strNode "rule", strNode rule) 
    102                             , (strNode "global", boolToYaml global) 
    103                             , (strNode "stringify", boolToYaml stringify) 
    104                             , (strNode "adverbs", adverbs') 
    105                             ] , tag = Just "tag:pugs:Rule"} 
     100    return . mkTagNode "tag:pugs:Rule" $ YamlMap 
     101        [ (strNode "rule", strNode rule) 
     102        , (strNode "global", boolToYaml global) 
     103        , (strNode "stringify", boolToYaml stringify) 
     104        , (strNode "adverbs", adverbs') 
     105        ] 
    106106toYaml v = return $ strNode $ (encodeUTF8 . pretty) v 
    107  
    108107 
    109108hashToYaml :: (?d :: Int) => VRef -> Eval YamlNode 
     
    115114        va' <- toYaml va 
    116115        return (ka', va') 
    117     return $ emptyYamlNode{el=YamlMap yamlmap} 
     116    return $ mkNode (YamlMap yamlmap) 
    118117hashToYaml r = error ("unexpected node: " ++ show r) 
    119118