[
    {
        "name": "Tagged",
        "comment": "\n\nA module that allows you to \"tag\" a value.\n\n@docs Tagged, tag, retag, untag, map, ap, bind, extend\n",
        "unions": [
            {
                "name": "Tagged",
                "comment": "\nA Type that pairs a `value` with a `tag`.\n\nThe `tag` is ignored at runtime as evidenced by the only value constructor:\n\n```elm\nTagged : value -> Tagged tag value\n```\n",
                "args": [
                    "tag",
                    "value"
                ],
                "cases": [
                    [
                        "Tagged",
                        [
                            "value"
                        ]
                    ]
                ]
            }
        ],
        "aliases": [],
        "values": [
            {
                "name": "ap",
                "comment": "\nUseful for composing functions together infix:\n\n```elm\nfoo =\n  Array.set `map` index `ap` value `ap` arr\n```\n",
                "type": "Tagged tag (oldValue -> newValue) -> Tagged tag oldValue -> Tagged tag newValue"
            },
            {
                "name": "bind",
                "comment": "\nUseful for restricting the tag created in a polymorphic function.\n",
                "type": "(oldValue -> Tagged tag newValue) -> Tagged tag oldValue -> Tagged tag newValue"
            },
            {
                "name": "extend",
                "comment": "\nUseful when you have a function that throws away a tag prematurely,\nbut you still need the tag later.\n",
                "type": "(Tagged tag oldValue -> newValue) -> Tagged tag oldValue -> Tagged tag newValue"
            },
            {
                "name": "map",
                "comment": "\nUseful for composing functions together infix:\n\n```elm\nfoo =\n  Array.set `map` index `ap` value `ap` arr\n```\n",
                "type": "(oldValue -> newValue) -> Tagged tag oldValue -> Tagged tag newValue"
            },
            {
                "name": "retag",
                "comment": "\nExplicitly changes the tag of a value.\n\nForces you to recognize that the value is being interpreted differently from before.\n",
                "type": "Tagged oldTag value -> Tagged newTag value"
            },
            {
                "name": "tag",
                "comment": "\nAn alias for the `Tagged` value constructor.\n",
                "type": "value -> Tagged tag value"
            },
            {
                "name": "untag",
                "comment": "\nWe can remove the tag when we're done making additional compile-time assertions.\n",
                "type": "Tagged tag value -> value"
            }
        ],
        "binops": []
    }
]