[{"name":"NumberSpinner.DecimalNumber","comment":" Since the spinner isn't based on float/double, we need a module that provides us with an \"infinite precision\" numeric type. This module uses elm-decimal for that purpose.\n\n\n# Types\n\n@docs DecimalNumber\n\n\n# Construct\n\n@docs fromFloat, fromInt, fromString, tenToThePowerMinus, tenToThePower, toFloat, toString\n\n\n# Combine\n\n@docs add, mul, subtract\n\n\n# Deconstruct\n\n@docs decimalDigits, integralPart\n\n\n# Compare\n\n@docs gt, lt\n\n","unions":[],"aliases":[{"name":"DecimalNumber","comment":" Type alias for the Decimal library (to make the choice of library opaque at this point)\n","args":[],"type":"Decimal.Decimal"}],"values":[{"name":"add","comment":" Add two decimal numbers\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"decimalDigits","comment":" Return just the decimal digits of the decimal number (as chars, since we don't do any calculations with it, we jut display it)\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> List.List Char.Char"},{"name":"fromFloat","comment":" Convert from a floating point value. This function is a bit weird, since it uses Decimal.fromFloat, which can fail. I don't know when this fails. Hopefully, returning 0 in that case is fine.\n","type":"Basics.Float -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"fromInt","comment":" Convert from integer (meaning have 0 as decimal part)\n","type":"Basics.Int -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"fromString","comment":" Convert from a string\n","type":"String.String -> Maybe.Maybe NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"gt","comment":" Implement \"greater than\"\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> Basics.Bool"},{"name":"integralPart","comment":" For a decimal number, return the integral part (the part before the decimal point). NOTE: This is not infinite precision now, of course. If we have more than 2^32 (or something) as integer, this will fail (and return -1337, somewhat randomly)\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> Basics.Int"},{"name":"lt","comment":" Implement \"less than\"\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> Basics.Bool"},{"name":"mul","comment":" Multiply two decimal numbers\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"subtract","comment":" Subtract two decimal numbers\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"tenToThePower","comment":" Implement 10^i which is used to change integral digits of a number\n","type":"Basics.Int -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"tenToThePowerMinus","comment":" Implement 10^(-i) which is used to change decimal digits of a number\n","type":"Basics.Int -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"toFloat","comment":" Return a floating-point representation of the number. Use with caution, of course. But might be fine to send the number over the wire (where precision can be safely lost - Tango uses floats anyways, for example)\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> Basics.Float"},{"name":"toString","comment":" Convert decimal to string\n","type":"NumberSpinner.DecimalNumber.DecimalNumber -> String.String"}],"binops":[]},{"name":"NumberSpinner.DigitalNumber","comment":" A \"digital number\" (surely a bad term) is a number where you have read/write access to its individual \"digits\" (decimal and integral). This module provides this data type. A digital number has a min and a max value as well (which determines the integral digits of the number), but you have to specify the number of decimal digits, since it cannot be inferred from min/max.\n\n\n# Types\n\n@docs DecimalType, DigitalNumber\n\n\n# Construct\n\n@docs decimalChars, make\n\n\n# Mutate\n\n@docs decreaseDecimalDigit, decreaseIntegerDigit, decreaseSign, increaseSign, increaseIntegerDigit, increaseDecimalDigit, modifyValue, replaceDecimalDigit, replaceIntegerDigit\n\n\n# Deconstruct\n\n@docs getValue, hasDecimals, hasSign, integerChars, isNegative, numberOfDecimalDigits, numberOfIntegerDigits, valueAsFloat\n\n","unions":[{"name":"DigitalNumber","comment":" Represents a decimal number which has bounds on the decimal places and the value contained\n","args":[],"cases":[]}],"aliases":[{"name":"DecimalType","comment":" Type alias for the decimal type used\n","args":[],"type":"NumberSpinner.DecimalNumber.DecimalNumber"}],"values":[{"name":"decimalChars","comment":" Return the decimal characters for the number (as chars, so just for display)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> List.List Char.Char"},{"name":"decreaseDecimalDigit","comment":" Decrease the d'th decimal digit of the number (taking care of under/overflow)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"decreaseIntegerDigit","comment":" Decrease the d'th integer digit of the number (taking care of under/overflow)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"decreaseSign","comment":" Flip the sign (yeah, increase/decrease is weirdly named)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"getValue","comment":" Retrieve just the value of the digital number\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> NumberSpinner.DigitalNumber.DecimalType"},{"name":"hasDecimals","comment":" Check if the number has decimal places at all. If not, we can omit the \".xxx\" and make the input field more narrow.\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Bool"},{"name":"hasSign","comment":" Check if the number has a sign (used to determine if we display a plus/minus in front of it and making that changeable)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Bool"},{"name":"increaseDecimalDigit","comment":" Increase the d'th decimal digit of the number (taking care of under/overflow)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"increaseIntegerDigit","comment":" Increase the d'th integer digit of the number (taking care of under/overflow)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"increaseSign","comment":" Flip the sign (yeah, increase/decrease is weirdly named)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"integerChars","comment":" Return the integral characters for the number (as chars, so just for display)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> List.List Char.Char"},{"name":"isNegative","comment":" Check if the number is currently negative\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Bool"},{"name":"make","comment":" Create a digital number (information hiding here, since we don't expose the type constructor directly)\n","type":"Basics.Int -> NumberSpinner.DigitalNumber.DecimalType -> NumberSpinner.DigitalNumber.DecimalType -> NumberSpinner.DigitalNumber.DecimalType -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"modifyValue","comment":" Helper function to modify the value of a digital number, taking care of not over/underflowing it\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> (NumberSpinner.DigitalNumber.DecimalType -> NumberSpinner.DigitalNumber.DecimalType) -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"numberOfDecimalDigits","comment":" Return the number of decimal digits of the number (which is fixed on construction of the digital number)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int"},{"name":"numberOfIntegerDigits","comment":" Return the number of integral digits of the number (to display the correct number of digits in the UI)\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Int"},{"name":"replaceDecimalDigit","comment":" Replace the whichDigit's integer digit with \"newDigit\" (so converting \"123.45\" to \"123.95\" or something)\n","type":"Basics.Int -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"replaceIntegerDigit","comment":" Replace the whichDigit's integer digit with \"newDigit\" (so converting \"123\" to \"193\" or something)\n","type":"Basics.Int -> Basics.Int -> NumberSpinner.DigitalNumber.DigitalNumber -> NumberSpinner.DigitalNumber.DigitalNumber"},{"name":"valueAsFloat","comment":" Convert the decimal number to the approximate floating point value\n","type":"NumberSpinner.DigitalNumber.DigitalNumber -> Basics.Float"}],"binops":[]},{"name":"NumberSpinner.NumberSpinner","comment":" Provide a component that lets you manipulate decimal numbers digit-wise.\n\n\n# Elm Architecture stuff\n\n@docs Model, Msg, init, update, view, isMutatingMsg\n\n\n# Modify\n\n@docs moveCursorLeft, moveCursorRight, setValue\n\n\n# Deconstruct\n\n@docs getDecimalValue, valueAsFloat\n\n\n# Internal types exposed for testing\n\n@docs CursorPosition, SpinnerBounds\n\n","unions":[{"name":"CursorPosition","comment":" A type signifying where the cursor currently is, and where it can move.\n","args":[],"cases":[["OnSign",["NumberSpinner.NumberSpinner.SpinnerBounds"]],["OnInteger",["NumberSpinner.NumberSpinner.SpinnerBounds","Basics.Int"]],["OnDecimal",["NumberSpinner.NumberSpinner.SpinnerBounds","Basics.Int"]]]},{"name":"Msg","comment":" Elm Architecture Msg type\n","args":[],"cases":[]}],"aliases":[{"name":"Model","comment":" Elm Architecture model structure\n","args":["msg"],"type":"{ number : NumberSpinner.DigitalNumber.DigitalNumber, cursorPosition : NumberSpinner.NumberSpinner.CursorPosition, hasFocus : Basics.Bool, toMsg : NumberSpinner.NumberSpinner.Msg -> msg }"},{"name":"SpinnerBounds","comment":" We use this class for the \"cursor left\" and \"cursor right\" motions in conjunction with the CursorPosition type (see below). We want to define cursor movement without regards to the current number displayed. For movement, we need the left and right bounds, which we store here.\n","args":[],"type":"{ boundsDecimals : Basics.Int, boundsIntegers : Basics.Int, hasSign : Basics.Bool }"}],"values":[{"name":"getDecimalValue","comment":" Get current decimal value of the spinner\n","type":"NumberSpinner.NumberSpinner.Model msg -> NumberSpinner.DecimalNumber.DecimalNumber"},{"name":"init","comment":" Initialize the number spinner with the number of decimal places, the minimum bound, maximum bound, current value and a converter function into your message type. Example\n\n    NumberSpinner.init\n        -- two odecimal places\n        2\n        -- minimum value (inclusive)\n        (Decimal.fromInt 0)\n        -- maximum value (inclusive)\n        (Decimal.fromInt 10)\n        -- current value (inited from a string, which might fail because it's at runtime)\n        (Maybe.withDefault (Decimal.fromInt 0) <| Decimal.fromString \"1.23\")\n        -- convert to my custom SpinnerMessage\n        SpinnerMessage\n\n","type":"Basics.Int -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.DecimalNumber.DecimalNumber -> (NumberSpinner.NumberSpinner.Msg -> msg) -> NumberSpinner.NumberSpinner.Model msg"},{"name":"isMutatingMsg","comment":" Check if the incoming Msg actually mutates the decimal number value, or if it is just moving the cursor around, for example\n","type":"NumberSpinner.NumberSpinner.Msg -> Basics.Bool"},{"name":"moveCursorLeft","comment":" Modify cursor position to move to the left, if possible (skipping \"boundaries\" between sign, integral and decimal places)\n\nThis is exposed mainly for the tests.\n\n","type":"NumberSpinner.NumberSpinner.CursorPosition -> NumberSpinner.NumberSpinner.CursorPosition"},{"name":"moveCursorRight","comment":" Modify cursor position to move to the right, if possible (skipping \"boundaries\" between sign, integral and decimal places)\n\nThis is exposed mainly for the tests.\n\n","type":"NumberSpinner.NumberSpinner.CursorPosition -> NumberSpinner.NumberSpinner.CursorPosition"},{"name":"setValue","comment":" Set current \"digital number\" value of the spinner\n","type":"NumberSpinner.NumberSpinner.Model msg -> NumberSpinner.DecimalNumber.DecimalNumber -> NumberSpinner.NumberSpinner.Model msg"},{"name":"update","comment":" Elm Architecture update function\n","type":"NumberSpinner.NumberSpinner.Msg -> NumberSpinner.NumberSpinner.Model msg -> ( NumberSpinner.NumberSpinner.Model msg, Platform.Cmd.Cmd msg )"},{"name":"valueAsFloat","comment":" Convert the decimal number to the approximate floating point value\n","type":"NumberSpinner.NumberSpinner.Model msg -> Basics.Float"},{"name":"view","comment":" Elm architecture view function\n","type":"NumberSpinner.NumberSpinner.Model msg -> Html.Html msg"}],"binops":[]}]