Is the Nat (Min ...)
equalOrGreater than a Nat or
less?
factorial : Nat (ArgIn min max maybeN) -> Nat (Min Nat1)
factorial =
Nat.lowerMin nat0
>> MinNat.isAtLeast nat1
{ min = nat0 }
{ less = \_ -> nat1 |> MinNat.value
, equalOrGreater =
\atLeast1 ->
atLeast1
|> Nat.mul
(factorial
(atLeast1 |> MinNat.subN nat1)
)
}Is the Nat (Min ...)
equalOrLess than a Nat or
greater?
goToU18Party : { age : Nat (ArgIn min Nat17 maybeN) } -> List Snack
tryToGoToU18Party =
Nat.lowerMin nat0
>> MinNat.isAtMost nat17
{ min = nat0 }
{ equalOrLess = \age -> Just (goToU18Party { age = age })
, greater = Nothing
}Subtract an exact Nat (ArgN ...).
atLeast7 |> MinNat.subN nat2
--> : Nat (Min Nat5)Add a Nat (ArgIn ...). The second argument is the minimum added value.
atLeast5 |> MinNat.add atLeast2 nat2
--> : Nat (Min Nat7)Subtract a Nat (ArgIn ...). The second argument is the maximum of the subtracted Nat (ArgIn ...).
atLeast6 |> MinNat.sub between0And5 nat5
--> : Nat (Min Nat1)If you have don't the maximum subtracted value at hand, use subLossy.
Add a fixed Nat (ArgN ...) value.
atLeast70 |> InNat.addN nat7
--> : Nat (Min Nat77)Convert a Nat (ArgIn min ...) to a Nat (Min min).
between3And10 |> MinNat.value
--> : Nat (Min Nat4)There is only 1 situation you should use this.
To make these the same type.
[ atLeast1, between1And10 ]Elm complains:
But all the previous elements in the list are:
Nat (Min Nat1)
[ atLeast1
, between1And10 |> MinNat.value
]A Codec to serialize Nats with a lower bound.
import Serialize
serializeNaturalNumber :
Serialize.Codec
String
(Nat (Min Nat0))
serializeNaturalNumber =
MinNat.serialize nat0
encode : Nat (ArgIn min max maybeN) -> Bytes
encode =
MinNat.value
>> Serialize.encodeToBytes serializeNaturalNumber
decode :
Bytes
-> Result (Serialize.Error String) (Nat (Min Nat0))
decode =
Serialize.decodeFromBytes serializeNaturalNumber
Compare the
Nat (Min ...)to aNat (ArgN ...). Is itgreater,lessorequal?minensures that theNat (ArgN ...)is greater than the minimum.