[{"name":"PairDict","comment":" \n@docs PairDict, Pair\n\n\n## create\n@docs empty, fromDict, fromList\n\n## access\n@docs rightOf, leftOf\n\n## properties\n@docs size\n\n## in\n@docs insert, union\n\n## out\n@docs removeLeft, removeRight\n\n## transform\n@docs lefts, rights, swapLeftRight, foldr, foldl, map, toDict\n","unions":[{"name":"PairDict","comment":" Want to look up value-pairs from the left or the right?\n\n## Example: cased letters\n    casedLetters=\n      empty\n      |>insert { left= 'a', right= 'A' }\n      |>insert { left= 'b', right= 'B' }\n      |>insert { left= 'c', right= 'C' }\n\n    upperCase char=\n      rightOf char casedLetters\n","args":["left","right"],"cases":[]}],"aliases":[{"name":"Pair","comment":" `left` & `right` as a value-pair\n","args":["comparableLeft","comparableRight"],"type":"{ left : comparableLeft, right : comparableRight }"}],"values":[{"name":"empty","comment":" start with an empty `PairDict`\n\n    empty --fromList []\n","type":"PairDict.PairDict left right"},{"name":"foldl","comment":" Reduce the left-right `Pair`s from lowest left to highest left\n\n    brackets=\n      fromList\n        [ ( '(', ')' )\n        , ( '{', '}' )\n        ]\n    openingAndClosing=\n      brackets\n      |>foldl\n          (\\{ left, right } acc->\n            acc ++[ String.fromList [ left, right ] ]\n          )\n          []\n      --[ \"()\", \"{}\" ]\n","type":"(PairDict.Pair comparableLeft comparableRight -> result -> result) -> result -> PairDict.PairDict comparableLeft comparableRight -> result"},{"name":"foldr","comment":" Reduce the left-right `Pair`s from highest left to lowest left\n\n    brackets=\n      fromList\n        [ ( '(', ')' )\n        , ( '{', '}' )\n        ]\n    openingAndClosing=\n      foldl\n        (\\{ left, right } acc->\n          String.fromList [ left, right ]\n        )\n        []\n      --[ \"{}\", \"()\" ]\n","type":"(PairDict.Pair comparableLeft comparableRight -> result -> result) -> result -> PairDict.PairDict comparableLeft comparableRight -> result"},{"name":"fromDict","comment":" Create a `PairDict` conveniently from `Pair`-`Tuple`s. `left` is the first, `right` is the second.\nIf right or left values are given multiple times, the value **first** in the `List` is **prefered**.\n    \n    lowerToUpperLetters=\n      Dict.empty\n      |>Dict.insert 'a' 'A'\n      |>Dict.insert 'b' 'B'\n\n    lowerUpperLetters= fromDict lowerToUpperLetters\n","type":"Dict.Dict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight"},{"name":"fromList","comment":" Create a `PairDict` conveniently from `Tuple`s. `left` is the first, `right` is the second.\nIf right or left values are given multiple times, the value **first** in the `List` is **prefered**.\n    \n    fromList\n      [ ( 'b', 'B' ) --+ { left= 'b', right= 'B' }\n      , ( 'a', 'A' ) --+ { left= 'a', right= 'A' }\n      , ( 'b', 'C' ) --ignored, as the left value already exists\n      , ( 'c', 'A' ) --ignored, as the right value already exists\n      , ( 'c', 'C' ) --+ { left= 'c', right= 'C' }\n      ]\n","type":"List.List ( comparableLeft, comparableRight ) -> PairDict.PairDict comparableLeft comparableRight"},{"name":"insert","comment":" Put in a left-right-`Pair`\nIf either value is already present, the **dict is unchanged**.\n\n    empty\n    |>insert { left= \"(\", right= \")\" }\n    |>insert { right= \"fire\", left= \"water\" }\n    --fromList\n    --  [ ( \"(\", \")\" ) ( \"water\", \"fire\" ) ]\n","type":"PairDict.Pair comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight"},{"name":"leftOf","comment":" `Just` the right value if the left value is present in the `PairDict`, else `Nothing`\n\n    casedLetters=\n      empty\n      |>insert { left= 'a', right= 'A' }\n      |>insert { left= 'b', right= 'B' }\n      |>insert { left= 'c', right= 'C' }\n\n    upperCase char=\n      rightOf char casedLetters\n","type":"comparableRight -> PairDict.PairDict comparableLeft comparableRight -> Maybe.Maybe comparableLeft"},{"name":"lefts","comment":" values on the left\n\n    brackets=\n      fromList [ ( '(', ')' ), ( '{', '}' ) ]\n    opening= lefts brackets\n","type":"PairDict.PairDict left right -> List.List left"},{"name":"map","comment":" map pairs\n\n    digitNames=\n      fromList\n        [ ( 0, \"zero\" )\n        , ( 1, \"one\" )\n        ]\n    mathSymbolNames=\n      digitNames\n      |>map\n          (\\{left,right}->\n            { left= String.fromInt left\n            , right= right\n            }\n          )\n      |>insert { left= \"+\", right= \"plus\" }\n","type":"(PairDict.Pair comparableLeft comparableRight -> PairDict.Pair comparableResultLeft comparableResultRight) -> PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableResultLeft comparableResultRight"},{"name":"removeLeft","comment":" remove left-right pair.\nIf **`left` does not exist**, the `PairDict` is **unchanged**\n\n    empty\n    |>insert \"(\" \")\"\n    |>removeLeft \"(\"\n    --empty\n","type":"comparableLeft -> PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight"},{"name":"removeRight","comment":" remove left-right pair.\nIf `right` does not exist, the `PairDict` is unchanged\n\n    empty\n    |>insert \"(\" \")\"\n    |>removeRight \")\"\n    --empty\n","type":"comparableRight -> PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight"},{"name":"rightOf","comment":" `Just` the right value if the left value is present in the `PairDict`, else `Nothing`\n\n    casedLetters=\n      empty\n      |>insert { left= 'a', right= 'A' }\n      |>insert { left= 'b', right= 'B' }\n\n    lowerCase char=\n      Dict.leftOf char casedLetters\n","type":"comparableLeft -> PairDict.PairDict comparableLeft comparableRight -> Maybe.Maybe comparableRight"},{"name":"rights","comment":" values on the right\n\n    brackets=\n      fromList [ ( '(', ')' ), ( '{', '}' ) ]\n    closing= rights brackets\n","type":"PairDict.PairDict left right -> List.List right"},{"name":"size","comment":" How many pairs there are.\n\n    size empty --0\n    \n    size\n      (fromList\n        (List.range 0 41 |>List.map (\\i-> ( i, i )))\n      )\n    --42\n","type":"PairDict.PairDict comparableLeft comparableRight -> Basics.Int"},{"name":"swapLeftRight","comment":" What has been left → right, right → left.\n\n    upperToLower=\n      fromList\n        [ ( 'A', 'a' ), ( 'B', 'b' ) ]\n    lowerToUpper=\n      upperToLower |>swapLeftRight\n","type":"PairDict.PairDict left right -> PairDict.PairDict right left"},{"name":"toDict","comment":" convert to a `Dict`, which you can access only from the left\n\n    casedLetters=\n      fromList\n        [ ( 'A', 'a' ), ( 'B', 'b' ) ]\n    lowerFromUpper=\n      casedLetters |>toDict\n","type":"PairDict.PairDict left right -> Dict.Dict left right"},{"name":"union","comment":" Merge 2 `PairDict`s.\nIf a value on the left or right is present, prefer the second dict.\n\n    numberOperatorNames=\n      fromList\n        [ ( '+', \"plus\" )\n        , ( '-', \"minus\" )\n        ]\n    boolOperatorNames=\n      fromList\n        [ ( '∧', \"and\" )\n        , ( '∨', \"or\" )\n        ]\n    operatorNames=\n      union numberOperatorNames boolOperatorNames\n","type":"PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight -> PairDict.PairDict comparableLeft comparableRight"}],"binops":[]}]