Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Json.Render (
- render,
- ) where
- import Json.SimpleJson (JsValue(..))
- render :: JsValue -> String
- render JsNull = "null"
- render (JsBool True) = "true"
- render (JsBool False) = "false"
- render (JsNumber x) = show x
- render (JsString x) = show x
- render other = renderWithIndent 0 other
- renderWithIndent :: Int -> JsValue -> String
- renderWithIndent n (JsArray xs) = "[" ++ "\n"
- ++ renderContent (n + 2) xs
- ++ indent n "]"
- where renderContent n = unlines
- . punctuate ","
- . map (indent n . renderWithIndent n)
- renderWithIndent n (JsObject ps) = "{" ++ "\n"
- ++ renderContent (n + 2) ps
- ++ indent n "}"
- where renderContent n = unlines
- . punctuate ","
- . map (indent n . renderPair n)
- renderPair n (k, v) = prefix ++ renderWithIndent n v
- where prefix = show k ++ ": "
- renderWithIndent _ other = render other
- spaces :: Int -> String
- spaces n = replicate n ' '
- tabs :: Int -> String
- tabs = concat . replicate 2 . spaces
- indent :: Int -> String -> String
- indent n s = spaces n ++ s
- punctuate :: String -> [String] -> [String]
- punctuate p [] = []
- punctuate p [x] = [x]
- punctuate p (x:xs) = (x ++ p) : punctuate p xs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement