| 50 | | toYaml 0 _ = return $ YamlStr "<deep recursion>" -- fail? make this configurable? |
| 51 | | toYaml _ VUndef = return YamlNil |
| 52 | | --toYaml (VNum num) = return $ YamlStr -- better handled by pretty? |
| 53 | | toYaml _ (VStr str) = return $ YamlStr (encodeUTF8 str) |
| 54 | | toYaml (d+1) v@(VRef r) = do -- stolen from Pugs.Prim prettyVal. Can these be refactored together? |
| 55 | | v' <- readRef r |
| 56 | | t <- evalValType v |
| 57 | | trace ("toYaml VRef: " ++ (show v) ++ " type=" ++ (show t)) $ return () |
| 58 | | (ifValTypeIsa v "Hash" |
| 59 | | (case r of |
| 60 | | -- "My brain just exploded. I can't handle pattern bindings for existentially-quantified constructors." |
| 61 | | -- let (MkRef (IHash hv)) = r |
| 62 | | -- XXX golfme for readability! |
| 63 | | MkRef (IHash hv) -> do |
| 64 | | h <- hash_fetch hv |
| 65 | | let assocs = Map.toList h |
| 66 | | yamlmap <- flip mapM assocs (\(ka, va) -> do |
| 67 | | ka' <- toYaml d (VStr ka) |
| 68 | | va' <- toYaml d va |
| 69 | | return (ka', va')) |
| 70 | | return $ YamlMap Nothing yamlmap |
| 71 | | _ -> error ("unexpected node: " ++ show v) |
| 72 | | ) |
| 73 | | (do nodes <- toYaml d v' |
| 74 | | (ifValTypeIsa v "Array" |
| 75 | | (return $ nodes) --(return $ YamlMap Nothing [(YamlStr "<ref>", nodes)])) -- XXX |
| 76 | | (return $ case v' of |
| 77 | | VObject _ -> nodes |
| 78 | | _ -> YamlMap Nothing [(YamlStr "<ref>", nodes)] -- XXX |
| 79 | | )))) |
| | 50 | toYaml 0 _ = return $ YamlStr "<deep recursion>" -- fail? make this configurable? |
| | 51 | toYaml _ VUndef = return YamlNil |
| | 52 | toYaml _ (VStr str) = return $ YamlStr (encodeUTF8 str) |
| | 53 | toYaml (d+1) v@(VRef r) = do |
| | 54 | t <- evalValType v |
| | 55 | ifValTypeIsa v "Hash" (hashToYaml d r) $ do |
| | 56 | v' <- readRef r |
| | 57 | nodes <- toYaml d v' |
| | 58 | ifValTypeIsa v "Array" (return nodes) $ case v' of |
| | 59 | VObject _ -> return nodes |
| | 60 | _ -> return (YamlMap Nothing [(YamlStr "<ref>", nodes)]) |