lue-bird / elm-morph / N.Morph

Morph for a natural number of type N

alter

in_ : ( N (N.In lowerLimitMin (N.Up lowerLimitMinX_ N.To (N.Add1 lowerLimitMinPlusX_))), N (N.In (N.Up upperLimitMinX_ N.To upperLimitMinPlusX_) upperLimitMax) ) -> MorphIndependently (N (N.In narrowMin_ narrowMax_) -> Result Morph.Error (N (N.In lowerLimitMin upperLimitMax))) (N broadRange -> N broadRange)

Morph the N to a more narrow range

transform

natural : MorphIndependently (Natural -> Result error_ (N (N.Min (N.Up0 minX_)))) (N range_ -> Natural)

Morph from a Natural.

Inverse of Natural.Morph.n

bit : MorphIndependently (Bit -> Result error_ (N (N.In (N.Up0 minX_) (N.Up1 maxX_)))) (N (N.In min_ (N.Up maxTo1_ N.To N1)) -> Bit)

Bit.On0, Bit.In1.

Inverse of Bit.Morph.n

inChar : ( N (N.In lowerLimitMin (N.Up lowerLimitMaxToUpperLimitMin_ N.To upperLimitMin)), N (N.In (N.On upperLimitMin) upperLimitMax) ) -> MorphIndependently (Char -> Result Morph.Error (N (N.In lowerLimitMin upperLimitMax))) (N (N.In narrowMin_ (N.Up narrowMaxTo9_ N.To N9)) -> Char)

Morph a digit in a given range

import Morph
import N exposing (n1, n2, n7, n9)

'5'
    |> Morph.toNarrow (N.Morph.inChar ( n1, n7 ))
    |> Result.map N.toInt
--> Ok 5

'1'
    |> Morph.toNarrow (N.Morph.inChar ( n2, n9 ))
    |> Result.toMaybe
--> Nothing