Morph
for a natural number of type N
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
natural : MorphIndependently (Natural -> Result error_ (N (N.Min (N.Up0 minX_)))) (N range_ -> Natural)
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.O
↔ n0
, Bit.I
↔ n1
.
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