2020-05-18 15:59:07 +03:00
|
|
|
module Text.Quantity
|
|
|
|
|
2021-08-06 12:03:13 +03:00
|
|
|
%default total
|
|
|
|
|
2020-05-18 15:59:07 +03:00
|
|
|
public export
|
|
|
|
record Quantity where
|
|
|
|
constructor Qty
|
|
|
|
min : Nat
|
|
|
|
max : Maybe Nat
|
|
|
|
|
|
|
|
public export
|
|
|
|
Show Quantity where
|
|
|
|
show (Qty Z Nothing) = "*"
|
|
|
|
show (Qty Z (Just (S Z))) = "?"
|
|
|
|
show (Qty (S Z) Nothing) = "+"
|
|
|
|
show (Qty min max) = "{" ++ show min ++ showMax ++ "}"
|
|
|
|
where
|
|
|
|
showMax : String
|
|
|
|
showMax = case max of
|
|
|
|
Nothing => ","
|
|
|
|
Just max' => if min == max'
|
|
|
|
then ""
|
|
|
|
else "," ++ show max'
|
|
|
|
|
|
|
|
public export
|
|
|
|
between : Nat -> Nat -> Quantity
|
|
|
|
between min max = Qty min (Just max)
|
|
|
|
|
|
|
|
public export
|
|
|
|
atLeast : Nat -> Quantity
|
|
|
|
atLeast min = Qty min Nothing
|
|
|
|
|
|
|
|
public export
|
|
|
|
atMost : Nat -> Quantity
|
|
|
|
atMost max = Qty 0 (Just max)
|
|
|
|
|
|
|
|
public export
|
|
|
|
exactly : Nat -> Quantity
|
|
|
|
exactly n = Qty n (Just n)
|
|
|
|
|
|
|
|
public export
|
|
|
|
inOrder : Quantity -> Bool
|
|
|
|
inOrder (Qty min Nothing) = True
|
|
|
|
inOrder (Qty min (Just max)) = min <= max
|