[{"name":"InNat","comment":" A natural number within a minimum & maximum.\n\n@docs InNat\n\n\n## add information\n\n\n### clamp\n\n@docs intInRange, atLeast, atMost\n\n\n### compare\n\n@docs is, isInRange, isIntInRange, isAtLeast, isAtMost\n\n\n## modify\n\n@docs addN, subN, add, sub, div, remainderBy\n\nIf you want other operations like multiply, use [dropMax][InNat#dropMax].\n\n\n## drop information\n\n@docs n, toInt, lowerMin, maxIs, dropMax\n\n\n## more\n\n@docs random, range\n\n","unions":[],"aliases":[{"name":"InNat","comment":" A natural number somewhere within a minimum & maximum.\n\n       ↓ minimum    ↓ maximum\n    ⨯ [✓ ✓ ✓ ✓ ✓ ✓ ✓] ⨯ ⨯ ⨯...\n\nNote: maximum >= minimum for every existing `InNat`:\n\n    percent : InNat minimum Nat100\n\n→ `minimum <= Nat100`\n\n","args":["minimum","maximum"],"type":"Internal.InNat minimum maximum"}],"values":[{"name":"add","comment":" Add a `InNat`.\n\n    InNat.n nat3\n        |> InNat.add between1And12 nat1 nat12\n    --> of type InNat Nat4 (Nat15Plus a)\n\n","type":"InNat.InNat addedMin addedMax -> NNat.NNat (N.Type.N addedMin N.Type.Is (N.Type.Difference min N.Type.To sumMin)) -> NNat.NNat (N.Type.N addedMax N.Type.Is (N.Type.Difference max N.Type.To sumMax)) -> InNat.InNat min max -> InNat.InNat sumMin sumMax"},{"name":"addN","comment":" Add a fixed `NNat` value.\n\n    InNat.n nat70\n        |> InNat.addN ( nat7, nat7 )\n    --> is of type InNat Nat77 (Nat77Plus a)\n\n","type":"( NNat.NNat (N.Type.N added N.Type.Is (N.Type.Difference min N.Type.To sumMin)), NNat.NNat (N.Type.N added N.Type.Is (N.Type.Difference max N.Type.To sumMax)) ) -> InNat.InNat min max -> InNat.InNat sumMin sumMax"},{"name":"atLeast","comment":" If the `InNat` is less than a number, return that number instead.\n\n    InNat.n nat5\n        |> InNat.atLeast nat10 { min = nat5 }\n    --> InNat 10\n\n    InNat.n nat15\n        |> InNat.lowerMin nat5\n        |> InNat.atLeast nat10 { min = nat5 }\n    --> InNat 15\n\n","type":"NNat.NNat (N.Type.N newMin N.Type.Is difference) -> { min : NNat.NNat (N.Type.N oldMin N.Type.Is (N.Type.Difference oldMinusNewMin N.Type.To newMin)) } -> InNat.InNat oldMin max -> InNat.InNat newMin max"},{"name":"atMost","comment":" **Cap** the `InNat` to at most a number.\n\n    InNat.n nat5\n        |> InNat.atMost nat10 { min = nat5 }\n    --> InNat 5\n\n    InNat.n nat15\n        |> InNat.lowerMin nat5\n        |> InNat.atMost nat10 { min = nat5 }\n    --> InNat 10\n\n`min` ensures that that number is at least the minimum.\n\n","type":"NNat.NNat (N.Type.N newMax N.Type.Is (N.Type.Difference a N.Type.To newMaxPlusA)) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference newRange N.Type.To newMax)) } -> InNat.InNat min oldMax -> InNat.InNat min newMaxPlusA"},{"name":"div","comment":" Divide (`//`) by a `MinNat`. `div 0` is impossible.\n\n    InNat.n nat7 |> InNat.div (MinNat.n nat3)\n    --> InNat 2 of type InNat Nat0 (Nat7Plus a)\n\n","type":"Internal.MinNat (N.Nat.Type.Nat1Plus dMinMinus1) -> InNat.InNat min max -> InNat.InNat N.Nat.Type.Nat0 max"},{"name":"dropMax","comment":" Convert a `InNat` to a `MinNat`.\n\n    squareAInNat =\n        MinNat.dropMax >> MinNat.toPower (MinNat.n nat2)\n\n","type":"InNat.InNat min max -> Internal.MinNat min"},{"name":"intInRange","comment":" A `InNat` from an `Int`, **clamped** between a `minimum` & `maximum`.\n\n  - if the `Int < minimum`, `minimum` is returned\n  - if the `Int > maximum`, `maximum` is returned\n\n```\n9 |> InNat.intInRange nat3 nat12 --> InNat 9\n\n0 |> InNat.intInRange nat3 nat12 --> InNat 3\n\n99 |> InNat.intInRange nat3 nat12 --> InNat 12\n```\n\nIf you want to handle the cases `< minimum` & `> maximum` explicitly, use [`isIntInRange`][InNat#isIntInRange]\n\n","type":"NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference range N.Type.To max)) -> NNat.NNat (N.Type.N max N.Type.Is (N.Type.Difference a N.Type.To maxPlusA)) -> Basics.Int -> InNat.InNat min maxPlusA"},{"name":"is","comment":" Compare the `InNat` to a `NNat`. Is it greater, less or equal to that `NNat`?\n\n`min` ensures that the `NNat` is bigger than the minimum.\n\n    justIfGreater4 =\n        InNat.minIs nat0\n            >> is ( nat4, nat4 )\n                { min = nat0 }\n                { greater = Just\n                , less = \\_ -> Nothing\n                , equal = \\() -> Nothing\n                }\n\n\n    justIfGreater4 (InNat.n nat5)\n    --> Just (InNat 5)\n\n    justIfGreater4 (InNat.n nat3)\n    --> Nothing\n\n","type":"( NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus greaterRange) N.Type.To max)), NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference a N.Type.To (N.Nat.Type.Nat1Plus triedPlusAMinus1))) ) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus lessRange) N.Type.To tried)) } -> { equal : () -> result, less : InNat.InNat min triedPlusAMinus1 -> result, greater : InNat.InNat (N.Nat.Type.Nat2Plus triedMinus1) max -> result } -> InNat.InNat min max -> result"},{"name":"isAtLeast","comment":" Is the `InNat`\n\n  - `equalOrGreater` than a `NNat` or\n\n  - `less`?\n\n```\nvote : { a | age : InNat (Nat18Plus orOlder) max } -> Vote\n\ntryToVote =\n    InNat.lowerMin nat0\n        >> InNat.isAtLeast ( nat18, nat18 )\n            { min = nat0 }\n            { less = Nothing --😓\n            , equalOrGreater = Just << vote\n            }\n```\n\n","type":"( NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference a N.Type.To (N.Nat.Type.Nat1Plus triedMinus1PlusA))), NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference atLeastRange N.Type.To max)) ) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus lessRange) N.Type.To tried)) } -> { less : InNat.InNat min triedMinus1PlusA -> result, equalOrGreater : InNat.InNat tried max -> result } -> InNat.InNat min max -> result"},{"name":"isAtMost","comment":" Is the `InNat`\n\n  - `equalOrLess` than a `NNat` or\n\n  - `greater`?\n\n```\ngoToU18Party : { a | age : InNat min Nat17 } -> Snacks\n\ntryToGoToU18Party =\n    InNat.lowerMin nat0\n        >> InNat.isAtMost ( nat17, nat17 )\n            { min = nat0 }\n            { equalOrLess = Just << goToU18Party\n            , greater = Nothing\n            }\n```\n\n","type":"( NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference a N.Type.To triedPlusA)), NNat.NNat (N.Type.N tried N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus greaterRange) N.Type.To max)) ) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference atMostRange N.Type.To tried)) } -> { equalOrLess : InNat.InNat min triedPlusA -> result, greater : InNat.InNat tried max -> result } -> InNat.InNat min max -> result"},{"name":"isInRange","comment":" Compared to a range `first` to `last`, is the `InNat`\n\n  - `inRange`\n\n  - `greater` than the `last` or\n\n  - `less` than the `first`?\n\n```\njustIfBetween3And10 =\n    InNat.lowerMin nat0\n        >> InNat.isInRange\n            { first = ( nat3, nat3 ), last = ( nat10, nat10 ) }\n            { min : nat0 }\n            { less = \\_ -> Nothing\n            , greater = \\_ -> Nothing\n            , inRange = Just\n            }\n\njustIfBetween3And10 (InNat.n nat9)\n--> Just (InNat 9)\n\njustIfBetween3And10 (InNat.n nat123)\n--> Nothing\n```\n\n","type":"{ first : ( NNat.NNat (N.Type.N first N.Type.Is (N.Type.Difference range N.Type.To last)), NNat.NNat (N.Type.N first N.Type.Is (N.Type.Difference a N.Type.To (N.Nat.Type.Nat1Plus firstMinus1PlusA))) ), last : ( NNat.NNat (N.Type.N last N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus greaterRange) N.Type.To max)), NNat.NNat (N.Type.N last N.Type.Is (N.Type.Difference a N.Type.To lastPlusA)) ) } -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus lessRange) N.Type.To first)) } -> { inRange : InNat.InNat first lastPlusA -> result, less : InNat.InNat min firstMinus1PlusA -> result, greater : InNat.InNat (N.Nat.Type.Nat1Plus last) max -> result } -> InNat.InNat min max -> result"},{"name":"isIntInRange","comment":" An `Int` compared to a range from `first` to `last`.\n\n    rejectOrAcceptUserInt =\n        isIntInRange { first = nat1, last = nat100 }\n            { less = Err \"must be >= 1\"\n            , more = Err \"must be <= 100\"\n            , inRange = Ok\n            }\n\n    rejectOrAcceptUserInt (InNat.n nat0)\n    --> Err \"must be >= 1\"\n\n","type":"{ first : NNat.NNat (N.Type.N first N.Type.Is (N.Type.Difference range N.Type.To last)), last : NNat.NNat (N.Type.N last N.Type.Is (N.Type.Difference a N.Type.To lastPlusA)) } -> { less : () -> result, greater : Internal.MinNat (N.Nat.Type.Nat1Plus last) -> result, inRange : InNat.InNat first lastPlusA -> result } -> Basics.Int -> result"},{"name":"lowerMin","comment":" Set the minimum lower.\n\n    [ InNat.n nat3, InNat.n nat4 ]\n\nElm complains:\n\n> But all the previous elements in the list are: `InNat Nat3 ...`\n\n    [ InNat.n nat3\n    , InNat.n nat4 |> InNat.lowerMin nat3\n    ]\n\n","type":"NNat.NNat (N.Type.N lowerMin N.Type.Is (N.Type.Difference currentMinusAlsoValidmin N.Type.To min)) -> InNat.InNat min max -> InNat.InNat lowerMin max"},{"name":"maxIs","comment":" Set the maximum higher.\n\nYou should design type annotations as general as possible.\n\n    onlyAtMost18 : InNat min Nat18\n\n    onlyAtMost18 between3And8 --fine\n\nBut once you implement `onlyAtMost18`, you might use the value in `onlyAtMost19`.\n\n    onlyAtMost18 value =\n        -- onlyAtMost19 value --error :(\n        onlyAtMost19\n            (value |> InNat.maxIs nat18 {- works :) -})\n\n","type":"NNat.NNat (N.Type.N max N.Type.Is (N.Type.Difference a N.Type.To maxPlusA)) -> InNat.InNat min max -> InNat.InNat min maxPlusA"},{"name":"n","comment":" A `InNat` from an exact `NNat n`.\n\nThe minimum is `n`, the maximum `>= n`.\n\n","type":"NNat.NNat (N.Type.N n N.Type.Is (N.Type.Difference a N.Type.To nPlusA)) -> InNat.InNat n nPlusA"},{"name":"random","comment":" Generate a random `InNat` in a range.\n","type":"NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference range N.Type.To max)) -> NNat.NNat (N.Type.N max N.Type.Is (N.Type.Difference a N.Type.To maxPlusA)) -> Random.Generator (InNat.InNat min maxPlusA)"},{"name":"range","comment":" `InNat`s from a first to a last value.\n\n    from3To10 =\n        InNat.range (nat3 |> InNat.n) (nat10 |> InNat.n)\n\n","type":"InNat.InNat firstMin lastMin -> InNat.InNat lastMin lastMax -> List.List (InNat.InNat firstMin lastMax)"},{"name":"remainderBy","comment":" The remainder after division. `remainderBy 0` is impossible.\n\n    InNat.n nat7 |> InNat.remainderBy (MinNat.n nat3)\n    --> InNat Nat0 (Nat7Plus a)\n\n","type":"Internal.MinNat (N.Nat.Type.Nat1Plus dMinMinus1) -> InNat.InNat min max -> InNat.InNat N.Nat.Type.Nat0 max"},{"name":"sub","comment":" Subtract a `InNat`.\n\n    InNat.n nat6\n        |> InNat.sub between1And5 nat1 nat5\n    --> is of type InNat Nat1 (Nat5Plus a)\n\n","type":"InNat.InNat subtractedMin subtractedMax -> NNat.NNat (N.Type.N subtractedMin N.Type.Is (N.Type.Difference differenceMax N.Type.To max)) -> NNat.NNat (N.Type.N subtractedMax N.Type.Is (N.Type.Difference differenceMin N.Type.To min)) -> InNat.InNat min max -> InNat.InNat differenceMin differenceMax"},{"name":"subN","comment":" Subtract a fixed `NNat` value.\n\n    InNat.n nat7\n        |> InNat.subN ( nat7, nat7 )\n    --> InNat.n nat0\n\n","type":"( NNat.NNat (N.Type.N subtracted N.Type.Is (N.Type.Difference differenceMin N.Type.To min)), NNat.NNat (N.Type.N subtracted N.Type.Is (N.Type.Difference differenceMax N.Type.To max)) ) -> InNat.InNat min max -> InNat.InNat differenceMin differenceMax"},{"name":"toInt","comment":" Convert the value in a `InNat` to an `Int`.\n","type":"InNat.InNat min max -> Basics.Int"}],"binops":[]},{"name":"MinNat","comment":" A Nat which is at least some minimum.\n\n@docs MinNat\n\n\n## add information\n\n@docs atMost, abs, intAtLeast\n\n\n### compare\n\n@docs isIntAtLeast, is, isAtLeast, isAtMost, theGreater, theSmaller\n\n\n## drop information\n\n@docs toInt, n, lowerMin\n\n\n## modify\n\n@docs addN, subN, add, subIn, mul, div, remainderBy, toPower\n\n\n## extra\n\n@docs range\n\n","unions":[],"aliases":[{"name":"MinNat","comment":" `NatFrom min` meaning a natural number which is at least `min`.\n\n       ↓ minimum\n    ⨯ [✓ ✓ ✓ ✓ ✓ ✓ ✓...\n\nAny natural number\n\n    MinNat Nat0\n\nA number, bigger than 4\n\n    MinNat Nat5\n\n","args":["min"],"type":"Internal.MinNat min"}],"values":[{"name":"abs","comment":" The absolute value of an `Int`, which is at least `Nat0`.\n\n    MinNat.abs 16 --> MinNat 16\n\n    MinNat.abs -4 --> MinNat 4\n\nReally only use this if you want the absolute value.\n\n    badLength list =\n        List.length >> MinNat.abs\n\n    goodLength =\n        List.foldl\n            (\\_ -> MinNat.addN nat1 >> MinNat.lowerMin nat0)\n            (MinNat.n nat0)\n\nIf something like this isn't possible, use `[MinNat.intAtLeast][MinNat#intAtLeast] nat0`!\n\n","type":"Basics.Int -> MinNat.MinNat N.Nat.Type.Nat0"},{"name":"add","comment":" Add a `MinNat`. The second argument is the minimum if the added `MinNat`.\n\n    (nat5 |> MinNat.n)\n        |> MinNat.add atLeast2 nat2\n\n","type":"MinNat.MinNat addedMin -> NNat.NNat (N.Type.N addedMin N.Type.Is (N.Type.Difference min N.Type.To summin)) -> MinNat.MinNat min -> MinNat.MinNat summin"},{"name":"addN","comment":" Add an exact `NNat`.\n\n    (nat5 |> MinNat.n)\n        |> MinNat.addN nat2\n    --> MinNat 7\n\n","type":"NNat.NNat (N.Type.N n N.Type.Is (N.Type.Difference min N.Type.To minPlusN)) -> MinNat.MinNat min -> MinNat.MinNat minPlusN"},{"name":"atMost","comment":" **Cap** the `MinNat` to at most a upper limit.\n","type":"NNat.NNat (N.Type.N max N.Type.Is (N.Type.Difference a N.Type.To maxPlusA)) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference range N.Type.To max)) } -> MinNat.MinNat min -> InNat.InNat min maxPlusA"},{"name":"div","comment":" Divide (`//`) by a `MinNat`. `div 0` is impossible.\n\n    MinNat.n nat7 |> MinNat.div (MinNat.n nat3)\n    --> MinNat 2 of type MinNat Nat0\n\n","type":"MinNat.MinNat (N.Nat.Type.Nat1Plus minMinus1) -> MinNat.MinNat min -> MinNat.MinNat N.Nat.Type.Nat0"},{"name":"intAtLeast","comment":" A `MinNat` from an `Int`; if the `Int < minimum`, `minimum` is returned.\n\n    9 |> MinNat.intAtLeast nat3 --> MinNat 9\n\n    0 |> MinNat.intAtLeast nat3 --> MinNat 3\n\nYou can also use this if you know an `Int` must be at least `minimum`.\n\nBut avoid it if you can do better, like\n\n    goodLength =\n        List.foldl\n            (\\_ -> MinNat.addN nat1 >> MinNat.lowerMin nat0)\n            (MinNat.n nat0)\n\nIf you want to handle the case `< minimum` yourself, use [`MinNat.isIntAtLeast`][MinNat#isIntAtLeast].\n\n","type":"NNat.NNat (N.Type.N n N.Type.Is difference) -> Basics.Int -> MinNat.MinNat n"},{"name":"is","comment":" Compared to an exact `NNat`.\n","type":"NNat.NNat (N.Type.N (N.Nat.Type.Nat1Plus triedMinus1) N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus aMinus1) N.Type.To (N.Nat.Type.Nat1Plus triedMinus1PlusA))) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference lessRange N.Type.To triedMinus1)) } -> { equal : () -> result, less : InNat.InNat min triedMinus1PlusA -> result, greater : MinNat.MinNat (N.Nat.Type.Nat2Plus triedMinus1) -> result } -> MinNat.MinNat min -> result"},{"name":"isAtLeast","comment":" Is the `MinNat`\n\n  - `equalOrGreater` than a `NNat` or\n\n  - `less`?\n\n```\nfactorialHelp : MinNat min -> MinNat Nat1\nfactorialHelp =\n    MinNat.lowerMin nat0\n        >> MinNat.isAtLeast nat1\n            { min = nat0 }\n            { less = \\_ -> MinNat.n nat1\n            , equalOrGreater =\n                \\oneOrGreater ->\n                    oneOrGreater\n                        |> MinNat.mul\n                            (factorialHelp\n                                (oneOrGreater |> MinNat.subN nat1)\n                            )\n            }\n```\n\n","type":"NNat.NNat (N.Type.N triedMin N.Type.Is (N.Type.Difference a N.Type.To (N.Nat.Type.Nat1Plus triedMinMinus1PlusA))) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference (N.Nat.Type.Nat1Plus lessRange) N.Type.To triedMin)) } -> { less : InNat.InNat min triedMinMinus1PlusA -> result, equalOrGreater : MinNat.MinNat triedMin -> result } -> MinNat.MinNat min -> result"},{"name":"isAtMost","comment":" Is the `MinNat`\n\n  - `equalOrLess` than a `NNat` or\n\n  - `greater`?\n\n","type":"NNat.NNat (N.Type.N atMostMin N.Type.Is (N.Type.Difference a N.Type.To atMostMinPlusA)) -> { min : NNat.NNat (N.Type.N min N.Type.Is (N.Type.Difference minToAtMostMin N.Type.To atMostMin)) } -> { equalOrLess : InNat.InNat min atMostMinPlusA -> result, greater : MinNat.MinNat atMostMin -> result } -> MinNat.MinNat min -> result"},{"name":"isIntAtLeast","comment":" If the `Int >= a minimum`, `Just the MinNat`, else `Nothing`.\n\n    4 |> MinNat.isIntAtLeast nat5 --> Nothing\n\n    1234 |> MinNat.isIntAtLeast nat5 --> Just (NatIn 1234)\n\n","type":"NNat.NNat (N.Type.N min N.Type.Is difference) -> Basics.Int -> Maybe.Maybe (MinNat.MinNat n)"},{"name":"lowerMin","comment":" Set the minimum lower.\n","type":"NNat.NNat (N.Type.N alsoValidmin N.Type.Is (N.Type.Difference currentMinusAlsoValidmin N.Type.To min)) -> MinNat.MinNat min -> MinNat.MinNat alsoValidmin"},{"name":"mul","comment":" Multiply by a `MinNat` >= 1.\nWe can't compute the highest possiblenew minimum,\nwe only know that if `a >= 1  →  x * a >= x`\n\n    five |> MinNat.mul two\n    --> MinNat 10, but the type is MinNat Nat5\n\n    two |> MinNat.mul five\n    --> MinNat 10, but the type is MinNat Nat2\n\n    two = nat2 |> MinNat.n\n\n    five = nat5 |> MinNat.n\n\n","type":"MinNat.MinNat (N.Nat.Type.Nat1Plus multipliedMinMinus1) -> MinNat.MinNat min -> MinNat.MinNat min"},{"name":"n","comment":" Convert an exact `NNat n` to a `MinNat n (n + a)`.\n\n    MinNat.n nat4\n    --> is of type MinNat Nat4 (Nat4Plus a)\n\n","type":"NNat.NNat (N.Type.N n N.Type.Is difference) -> MinNat.MinNat n"},{"name":"range","comment":" `MinNat`s from a first `InNat` to a last `MinNat`.\n","type":"InNat.InNat firstMin lastMin -> MinNat.MinNat lastMin -> List.List (MinNat.MinNat firstMin)"},{"name":"remainderBy","comment":" The remainder after division. `remainderBy 0` is impossible.\n\n    MinNat.n nat7 |> MinNat.remainderBy (MinNat.n nat3)\n    --> MinNat Nat0\n\n","type":"MinNat.MinNat (N.Nat.Type.Nat1Plus dMinMinus1) -> MinNat.MinNat min -> MinNat.MinNat N.Nat.Type.Nat0"},{"name":"subIn","comment":" Subtract a `InNat`. The second argument is the maximum if the subtracted `InNat`.\n\n    (nat5 |> MinNat.n)\n        |> MinNat.subIn inNat0To5 itsMaximum\n\n","type":"InNat.InNat subtractedMin subtractedMax -> NNat.NNat (N.Type.N subtractedMax N.Type.Is (N.Type.Difference differenceMin N.Type.To min)) -> MinNat.MinNat min -> MinNat.MinNat differenceMin"},{"name":"subN","comment":" Subtract an exact `NNat`.\n\n    (nat7 |> MinNat.n)\n        |> MinNat.subN nat2\n    --> MinNat 5\n\n","type":"NNat.NNat (N.Type.N n N.Type.Is (N.Type.Difference minMinusN N.Type.To min)) -> MinNat.MinNat min -> MinNat.MinNat minMinusN"},{"name":"theGreater","comment":" The greater of 2 `MinNat`s. Works just like [Basics.max][Basics#max].\n\n    MinNat.theGreater\n        (nat3 |> MinNat.n)\n        (nat4 |> MinNat.n |> MinNat.lowerMin nat3)\n    --> MinNat 4\n\n","type":"MinNat.MinNat min -> MinNat.MinNat min -> MinNat.MinNat min"},{"name":"theSmaller","comment":" The smaller of 2 `MinNat`s. Works just like [Basics.min][Basics#min].\n\n    MinNat.theSmaller\n        (nat3 |> MinNat.n)\n        (nat4 |> MinNat.n |> MinNat.lowerMin nat3)\n    --> MinNat 3\n\n","type":"MinNat.MinNat min -> MinNat.MinNat min -> MinNat.MinNat min"},{"name":"toInt","comment":" Convert a `MinNat` to an `Int`.\n\n    MinNat.n nat4 |> MinNat.toInt --> 4\n\n    compare a b =\n        compare (MinNat.toInt a) (MinNat.toInt b)\n\n","type":"MinNat.MinNat min -> Basics.Int"},{"name":"toPower","comment":" The `MinNat ^ a MinNat`.\nWe can't compute the highest possible new minimum,\nwe only know that if `a >= 1  →  x ^ a >= x`\n\n    five |> MinNat.toPower two\n    --> MinNat 25, but the type is MinNat Nat5\n\n    two |> MinNat.mul five\n    --> MinNat 25, but the type is MinNat Nat2\n\n    two = nat2 |> MinNat.n\n\n    five = nat5 |> MinNat.n\n\n","type":"MinNat.MinNat (N.Nat.Type.Nat1Plus minMinus1) -> MinNat.MinNat min -> MinNat.MinNat min"}],"binops":[]}]