4 | module Language.TOML.Value
6 | import public Data.SortedMap
21 | | VArray (List Value)
26 | Table = SortedMap Key Value
30 | lookupNested : (key : List String) -> (table : Table) -> Maybe Value
31 | lookupNested [] table = Nothing
32 | lookupNested [x] table = lookup x table
33 | lookupNested (x :: xs) table = do
34 | VTable t <- lookup x table
41 | (VString x) == (VString y) = x == y
42 | (VInteger x) == (VInteger y) = x == y
43 | (VFloat x) == (VFloat y) = x == y
44 | (VBoolean x) == (VBoolean y) = x == y
45 | (VArray xs) == (VArray ys) = assert_total $
xs == ys
46 | (VTable x) == (VTable y) = assert_total $
SortedMap.toList x == SortedMap.toList y
49 | a /= b = not $
(assert_total (==)) a b
54 | show (VString x) = show x
55 | show (VInteger x) = show x
56 | show (VFloat x) = show x
57 | show (VBoolean True) = "true"
58 | show (VBoolean False) = "false"
59 | show (VArray xs) = "["
60 | ++ fastConcat (intersperse ", " $
map (assert_total show) xs)
63 | let kvs = the (List (Key, Value)) $
toList x in
65 | ++ fastConcat (intersperse ", " . flip map kvs $
\(k, v) =>
66 | show k ++ " = " ++ assert_total show v
71 | [Raw] Show Value where
72 | show (VString x) = "string \{show x}"
73 | show (VInteger x) = "integer \{show x}"
74 | show (VFloat x) = "float \{show x}"
75 | show (VBoolean x) = if x then "bool true" else "bool false"
76 | show (VArray xs) = "list [\{concat $ intersperse ", " $ map (assert_total show) xs}]"
78 | let kvs = SortedMap.toList x in
79 | "{\{fastConcat (intersperse ", " . flip map kvs $ \(k, v) =>
80 | show k ++ " = " ++ assert_total show v