[
    {
        "name": "Interval",
        "comment": "\n\n@docs Interval\n\n\n# Constructors\n\n@docs singleton, fromEndpoints, from, containingValues, aggregate, hull, intersection\n\n\n# Properties\n\n@docs endpoints, minValue, maxValue, midpoint, width\n\n\n# Interpolation\n\n@docs interpolate\n\n\n# Arithmetic\n\n@docs sin, cos\n\n\n# Queries\n\n@docs contains, intersects, isContainedIn\n\n",
        "unions": [
            {
                "name": "Interval",
                "comment": " Represents a finite, bounded interval with a minimum and maximum value, for\nexample the interval from 3 to 5.\n",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [],
        "values": [
            {
                "name": "aggregate",
                "comment": " Construct an interval containing all of the intervals in the given list. If\nthe list is empty, returns `Nothing`.\n\n    Interval.aggregate\n        [ Interval.singleton 2\n        , Interval.from 3 4\n        ]\n    --> Just (Interval.from 2 4)\n\n    Interval.aggregate []\n    --> Nothing\n\n",
                "type": "List Interval -> Maybe Interval"
            },
            {
                "name": "containingValues",
                "comment": " Construct an interval containing all values in the given list. If the list\nis empty, returns `Nothing`.\n\n    Interval.containingValues [ 2, 1, 3 ]\n    --> Just (Interval.from 1 3)\n\n    Interval.containingValues [ -3 ]\n    --> Just (Interval.singleton -3)\n\n    Interval.containingValues []\n    --> Nothing\n\n",
                "type": "List Float -> Maybe Interval"
            },
            {
                "name": "contains",
                "comment": " Check if an interval contains a given value.\n\n    Interval.contains 0 (Interval.from -1 3)\n    --> True\n\n    Interval.contains 5 (Interval.from -1 3)\n    --> False\n\nThe minimum and maximum values of an interval are considered to be contained in\nthe interval, although if you are relying on this then there is a good chance\nyour code is vulnerable to numerical roundoff!\n\n    Interval.contains 3 (Interval.from -1 3)\n    --> True\n\n",
                "type": "Float -> Interval -> Bool"
            },
            {
                "name": "cos",
                "comment": " Get the image of cos(x) applied on the interval.\n\n    Interval.cos (Interval.from 0 (degrees 45))\n    --> Interval.from 0.7071 1\n\n    Interval.cos (Interval.from 0 pi)\n    --> Interval.from -1 1\n\n",
                "type": "Interval -> Interval"
            },
            {
                "name": "endpoints",
                "comment": " Get the endpoints of an interval (its minimum and maximum values) as a\ntuple. The first value will always be less than or equal to the second.\n\n    ( minValue, maxValue ) =\n        Interval.endpoints someInterval\n\nFor any interval,\n\n    Interval.endpoints interval\n\nis equivalent to (but more efficient than)\n\n    ( Interval.minValue interval\n    , Interval.maxValue interval\n    )\n\n",
                "type": "Interval -> ( Float, Float )"
            },
            {
                "name": "from",
                "comment": " Construct an interval containing the two given values (which can be provided\nin either order).\n\n    Interval.endpoints (Interval.from 2 5)\n    --> ( 2, 5 )\n\n    Interval.endpoints (Interval.from 5 2)\n    --> ( 2, 5 )\n\n",
                "type": "Float -> Float -> Interval"
            },
            {
                "name": "fromEndpoints",
                "comment": " Construct an interval from its endpoints (the minimum and maximum values of\nthe interval).\n\n    rgbRange =\n        Interval.fromEndpoints ( 0, 255 )\n\n    alphaRange =\n        Interval.fromEndpoints ( 0, 1 )\n\nThe two values should be given in order but will be swapped if\nnecessary to ensure a valid interval is returned:\n\n    Interval.endpoints (Interval.fromEndpoints ( 3, 2 ))\n    --> ( 2, 3 )\n\n",
                "type": "( Float, Float ) -> Interval"
            },
            {
                "name": "hull",
                "comment": " Construct an interval containing both of the given intervals.\n\n    firstInterval =\n        Interval.from 1 2\n\n    secondInterval =\n        Interval.from 3 6\n\n    Interval.hull firstInterval secondInterval\n    --> Interval.from 1 6\n\n",
                "type": "Interval -> Interval -> Interval"
            },
            {
                "name": "interpolate",
                "comment": " Interpolate between an interval's endpoints; a value of 0.0 corresponds to\nthe minimum value of the interval, a value of 0.5 corresponds to its midpoint\nand a value of 1.0 corresponds to its maximum value. Values less than 0.0 or\ngreater than 1.0 can be used to extrapolate.\n\n    Interval.interpolate (Interval.from -1 5) 0\n    --> -1\n\n    Interval.interpolate (Interval.from -1 5) 0.75\n    --> 3.5\n\n    Interval.interpolate (Interval.from -1 5) -0.5\n    --> -4\n\nNote that the interpolation is in fact from the minimum value to the maximum,\n_not_ \"from the first `Interval.from` argument to the second\":\n\n    Interval.interpolate (Interval.from 0 10) 0.2\n    --> 2\n\n    Interval.interpolate (Interval.from 10 0) 0.2\n    --> 2 -- not 8!\n\n",
                "type": "Interval -> Float -> Float"
            },
            {
                "name": "intersection",
                "comment": " Attempt to construct an interval containing all the values common to both\ngiven intervals. If the intervals do not intersect, returns `Nothing`.\n\n    Interval.intersection\n        (Interval.from 1 3)\n        (Interval.from 2 5)\n    --> Just (Interval.from 2 3)\n\n    Interval.intersection\n        (Interval.from 1 3)\n        (Interval.from 4 7)\n    --> Nothing\n\nIf the two intervals just touch, a singleton interval will be returned:\n\n    Interval.intersection\n        (Interval.from 1 3)\n        (Interval.from 3 5)\n    --> Just (Interval.singleton 3)\n\n",
                "type": "Interval -> Interval -> Maybe Interval"
            },
            {
                "name": "intersects",
                "comment": " Check if two intervals touch or overlap (have any values in common).\n\n    Interval.from -5 5\n        |> Interval.intersects (Interval.from 0 10)\n    --> True\n\n    Interval.from -5 5\n        |> Interval.intersects (Interval.from 10 20)\n    --> False\n\nIntervals that just touch each other are considered to intersect (this is\nconsistent with `intersection` which will return a zero-width interval for the\nintersection of two just-touching intervals):\n\n    Interval.from -5 5\n        |> Interval.intersects (Interval.from 5 10)\n    --> True\n\nAs with `contains`, though, if you are relying on this then there is a good\nchance your code is vulnerable to numerical roundoff!\n\n",
                "type": "Interval -> Interval -> Bool"
            },
            {
                "name": "isContainedIn",
                "comment": " Check if the second interval is fully contained in the first.\n\n    Interval.from -5 5\n        |> Interval.isContainedIn (Interval.from 0 10)\n    --> False\n\n    Interval.from -5 5\n        |> Interval.isContainedIn (Interval.from -10 10)\n    --> True\n\nBe careful with the argument order! If not using the `|>` operator, the second\nexample would be written as:\n\n    Interval.isContainedIn (Interval.from -10 10)\n        (Interval.from -5 5)\n    --> True\n\n",
                "type": "Interval -> Interval -> Bool"
            },
            {
                "name": "maxValue",
                "comment": " Get the maximum value of an interval.\n\n    Interval.maxValue (Interval.from 1 3)\n    --> 3\n\n",
                "type": "Interval -> Float"
            },
            {
                "name": "midpoint",
                "comment": " Get the midpoint of an interval.\n\n    Interval.midpoint (Interval.from 1 5)\n    --> 3\n\n",
                "type": "Interval -> Float"
            },
            {
                "name": "minValue",
                "comment": " Get the minimum value of an interval.\n\n    Interval.minValue (Interval.from 1 3)\n    --> 1\n\n",
                "type": "Interval -> Float"
            },
            {
                "name": "sin",
                "comment": " Get the image of sin(x) applied on the interval.\n\n    Interval.sin (Interval.from 0 (degrees 45))\n    --> Interval.from 0 0.7071\n\n    Interval.sin (Interval.from 0 pi)\n    --> Interval.from 0 1\n\n",
                "type": "Interval -> Interval"
            },
            {
                "name": "singleton",
                "comment": " Construct a zero-width interval containing a single value.\n\n    Interval.singleton 3\n    --> Interval.fromEndpoints ( 3, 3 )\n\n",
                "type": "Float -> Interval"
            },
            {
                "name": "width",
                "comment": " Get the width of an interval.\n\n    Interval.width (Interval.from 1 5)\n    --> 4\n\n",
                "type": "Interval -> Float"
            }
        ],
        "binops": []
    }
]