module Sound.MED.Basic.Pretty where

pretty :: String -> String
pretty :: String -> String
pretty = Int -> String -> String
pretty' Int
0

pretty' :: Int -> String -> String
pretty' :: Int -> String -> String
pretty' Int
_     []     = String
"\n"
pretty' Int
level (Char
c:String
cs) = case Char
c of
  Char
' ' -> Int -> String -> String
pretty' Int
level String
cs
  Char
'=' -> String
" = " forall a. [a] -> [a] -> [a]
++ Int -> String -> String
pretty' Int
level String
cs
  Char
'{' -> String
"{\n" forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
+Int
1) forall a. [a] -> [a] -> [a]
++        Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
+Int
1) String
cs
  Char
'}' -> String
"\n"  forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
-Int
1) forall a. [a] -> [a] -> [a]
++ String
"}" forall a. [a] -> [a] -> [a]
++ Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
-Int
1) String
cs
  Char
'[' -> String
"[\n" forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
+Int
1) forall a. [a] -> [a] -> [a]
++        Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
+Int
1) String
cs
  Char
']' -> String
"\n"  forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
-Int
1) forall a. [a] -> [a] -> [a]
++ String
"]" forall a. [a] -> [a] -> [a]
++ Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
-Int
1) String
cs
  Char
'(' -> String
"(\n" forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
+Int
1) forall a. [a] -> [a] -> [a]
++        Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
+Int
1) String
cs
  Char
')' -> String
"\n"  forall a. [a] -> [a] -> [a]
++ Int -> String
indent (Int
levelforall a. Num a => a -> a -> a
-Int
1) forall a. [a] -> [a] -> [a]
++ String
")" forall a. [a] -> [a] -> [a]
++ Int -> String -> String
pretty' (Int
levelforall a. Num a => a -> a -> a
-Int
1) String
cs
  Char
',' -> String
",\n" forall a. [a] -> [a] -> [a]
++ Int -> String
indent Int
level forall a. [a] -> [a] -> [a]
++ Int -> String -> String
pretty' Int
level String
cs
  Char
_ -> Char
c forall a. a -> [a] -> [a]
: Int -> String -> String
pretty' Int
level String
cs

indent :: Int -> String
indent :: Int -> String
indent Int
level = forall a. Int -> a -> [a]
replicate (Int
levelforall a. Num a => a -> a -> a
*Int
4) Char
' '