Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Endpoint
- data Closed (n :: Nat) (m :: Nat)
- type family Bounds (lhs :: Endpoint) (rhs :: Endpoint) :: * where ...
- type Single (n :: Nat) = Bounds (Inclusive n) (Inclusive n)
- type FiniteNat (rhs :: Endpoint) = Bounds (Inclusive 0) rhs
- closed :: forall n m. (n <= m, KnownNat n, KnownNat m) => Integer -> Maybe (Closed n m)
- unsafeClosed :: forall n m. (HasCallStack, n <= m, KnownNat n, KnownNat m) => Integer -> Closed n m
- getClosed :: Closed n m -> Integer
- lowerBound :: Closed n m -> Proxy n
- upperBound :: Closed n m -> Proxy m
- equals :: Closed n m -> Closed o p -> Bool
- cmp :: Closed n m -> Closed o p -> Ordering
- natToClosed :: forall n m x proxy. (n <= x, x <= m, KnownNat x, KnownNat n, KnownNat m) => proxy x -> Closed n m
- weakenUpper :: forall k n m. (n <= m, m <= k) => Closed n m -> Closed n k
- weakenLower :: forall k n m. (n <= m, k <= n) => Closed n m -> Closed k m
- strengthenUpper :: forall k n m. (KnownNat n, KnownNat m, KnownNat k, n <= m, n <= k, k <= m) => Closed n m -> Maybe (Closed n k)
- strengthenLower :: forall k n m. (KnownNat n, KnownNat m, KnownNat k, n <= m, n <= k, k <= m) => Closed n m -> Maybe (Closed k m)
- add :: Closed n m -> Closed o p -> Closed (n + o) (m + p)
- sub :: Closed n m -> Closed o p -> Either (Closed (o - n) (p - m)) (Closed (n - o) (m - p))
- multiply :: Closed n m -> Closed o p -> Closed (n * o) (m * p)
- isValidClosed :: (KnownNat n, KnownNat m) => Closed n m -> Bool
Documentation
Describe whether the endpoint of a Bounds
includes
or excludes its argument
data Closed (n :: Nat) (m :: Nat) Source #
((<=) n m, KnownNat n, KnownNat m) => Bounded (Closed n m) Source # | Generate the lowest and highest inhabitant of a given |
((<=) n m, KnownNat n, KnownNat m) => Enum (Closed n m) Source # | Enumerate values in the range of a given |
Eq (Closed n m) Source # | Test equality on |
((<=) n m, KnownNat n, KnownNat m) => Integral (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => Num (Closed n m) Source # | Bounded arithmetic, e.g. maxBound + 1 == maxBound |
Ord (Closed n m) Source # | Compare |
((<=) n m, KnownNat n, KnownNat m) => Real (Closed n m) Source # | |
Show (Closed n m) Source # | |
Generic (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => Arbitrary (Closed n m) Source # | |
ToJSON (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => FromJSON (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => FromField (Closed n m) Source # | |
ToField (Closed n m) Source # | |
NFData (Closed n m) Source # | |
Hashable (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => PersistFieldSql (Closed n m) Source # | |
((<=) n m, KnownNat n, KnownNat m) => PersistField (Closed n m) Source # | |
type Rep (Closed n m) Source # | |
type family Bounds (lhs :: Endpoint) (rhs :: Endpoint) :: * where ... Source #
Syntactic sugar to express open and half-open intervals using
the Closed
type
type Single (n :: Nat) = Bounds (Inclusive n) (Inclusive n) Source #
Syntactic sugar to express a value that has only one non-bottom
inhabitant using the Closed
type
type FiniteNat (rhs :: Endpoint) = Bounds (Inclusive 0) rhs Source #
Syntactic sugar to express a value whose lower bound is zero
closed :: forall n m. (n <= m, KnownNat n, KnownNat m) => Integer -> Maybe (Closed n m) Source #
Safely create a Closed
value using the specified argument
unsafeClosed :: forall n m. (HasCallStack, n <= m, KnownNat n, KnownNat m) => Integer -> Closed n m Source #
Create a Closed
value throwing an error if the argument is not in range
equals :: Closed n m -> Closed o p -> Bool infix 4 Source #
Test two different types of Closed
values for equality.
natToClosed :: forall n m x proxy. (n <= x, x <= m, KnownNat x, KnownNat n, KnownNat m) => proxy x -> Closed n m Source #
Convert a type-level literal into a Closed
value
weakenUpper :: forall k n m. (n <= m, m <= k) => Closed n m -> Closed n k Source #
Add inhabitants at the end
weakenLower :: forall k n m. (n <= m, k <= n) => Closed n m -> Closed k m Source #
Add inhabitants at the beginning
strengthenUpper :: forall k n m. (KnownNat n, KnownNat m, KnownNat k, n <= m, n <= k, k <= m) => Closed n m -> Maybe (Closed n k) Source #
Remove inhabitants from the end. Returns Nothing
if the input was removed
strengthenLower :: forall k n m. (KnownNat n, KnownNat m, KnownNat k, n <= m, n <= k, k <= m) => Closed n m -> Maybe (Closed k m) Source #
Remove inhabitants from the beginning. Returns Nothing
if the input was removed
add :: Closed n m -> Closed o p -> Closed (n + o) (m + p) Source #
Add two different types of Closed
values
sub :: Closed n m -> Closed o p -> Either (Closed (o - n) (p - m)) (Closed (n - o) (m - p)) Source #
multiply :: Closed n m -> Closed o p -> Closed (n * o) (m * p) Source #
Multiply two different types of Closed
values
isValidClosed :: (KnownNat n, KnownNat m) => Closed n m -> Bool Source #
Verifies that a given Closed
value is valid.
Should always return True
unles you bring the Closed.Internal.Closed
constructor into scope,
or use unsafeCoerce
or other nasty hacks