| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Numeric.Data.Interval.Internal
Contents
Description
Provides types for enforcing minimum and maximum bounds.
Since: 0.1
Synopsis
- data IntervalBound
- newtype Interval (l :: IntervalBound) (r :: IntervalBound) a where
- UnsafeInterval a
- pattern MkInterval :: a -> Interval l r a
- mkInterval :: forall (l :: IntervalBound) (r :: IntervalBound) a. (FromInteger a, Ord a, Show a, SingI l, SingI r) => a -> Either String (Interval l r a)
- unsafeInterval :: forall (l :: IntervalBound) (r :: IntervalBound) a. (FromInteger a, HasCallStack, Ord a, SingI l, SingI r, Show a) => a -> Interval l r a
- data SIntervalBound (i :: IntervalBound) where
- SOpen :: forall (n :: Nat). KnownNat n => SIntervalBound ('Open n)
- SClosed :: forall (n :: Nat). KnownNat n => SIntervalBound ('Closed n)
- SNone :: SIntervalBound 'None
- errMsg :: forall (l :: IntervalBound) (r :: IntervalBound) a. (Show a, SingI l, SingI r) => a -> String
Types
data IntervalBound Source #
Interval bound.
Since: 0.1
Instances
newtype Interval (l :: IntervalBound) (r :: IntervalBound) a Source #
Represents an interval. Can be (open|closed) bounded (left|right).
Examples
>>>import Data.Text.Display (display)>>>import Data.Text qualified as T>>>let x = unsafeInterval @(Open 10) @(Closed 100) 50>>>putStrLn $ T.unpack $ display x50 ∈ (10, 100]
>>>let y = unsafeInterval @None @None (-2)>>>putStrLn $ T.unpack $ display y-2 ∈ (-∞, ∞)
Since: 0.1
Constructors
| UnsafeInterval a |
Bundled Patterns
| pattern MkInterval :: a -> Interval l r a |
Instances
| HasField "unInterval" (Interval l r a) a Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal | |||||
| (k ~ A_Getter, a ~ n, b ~ n) => LabelOptic "unInterval" k (Interval l r a) (Interval l r a) a b Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal | |||||
| Lift a => Lift (Interval l r a :: Type) Source # | Since: 0.1 | ||||
| Foldable (Interval l r) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal Methods fold :: Monoid m => Interval l r m -> m # foldMap :: Monoid m => (a -> m) -> Interval l r a -> m # foldMap' :: Monoid m => (a -> m) -> Interval l r a -> m # foldr :: (a -> b -> b) -> b -> Interval l r a -> b # foldr' :: (a -> b -> b) -> b -> Interval l r a -> b # foldl :: (b -> a -> b) -> b -> Interval l r a -> b # foldl' :: (b -> a -> b) -> b -> Interval l r a -> b # foldr1 :: (a -> a -> a) -> Interval l r a -> a # foldl1 :: (a -> a -> a) -> Interval l r a -> a # toList :: Interval l r a -> [a] # null :: Interval l r a -> Bool # length :: Interval l r a -> Int # elem :: Eq a => a -> Interval l r a -> Bool # maximum :: Ord a => Interval l r a -> a # minimum :: Ord a => Interval l r a -> a # | |||||
| MetricSpace a => MetricSpace (Interval l r a) Source # | Since: 0.1 | ||||
| (FromInteger a, Ord a, SingI l, SingI r, Show a) => FromInteger (Interval l r a) Source # | WARNING: Partial Since: 0.1 | ||||
| (FromRational a, Ord a, SingI l, SingI r, Show a) => FromRational (Interval l r a) Source # | WARNING: Partial Since: 0.1 | ||||
| (FromReal a, Ord a, SingI l, SingI r, Show a) => FromReal (Interval l r a) Source # | WARNING: Partial Since: 0.1 | ||||
| ToInteger a => ToInteger (Interval l r a) Source # | Since: 0.1 | ||||
| ToRational a => ToRational (Interval l r a) Source # | Since: 0.1 | ||||
| ToReal a => ToReal (Interval l r a) Source # | Since: 0.1 | ||||
| NFData a => NFData (Interval l r a) Source # | Since: 0.1.0.0 | ||||
Defined in Numeric.Data.Interval.Internal | |||||
| Generic (Interval l r a) Source # | |||||
Defined in Numeric.Data.Interval.Internal Associated Types
| |||||
| (Show a, SingI l, SingI r) => Show (Interval l r a) Source # | Since: 0.1 | ||||
| Eq a => Eq (Interval l r a) Source # | Since: 0.1 | ||||
| Ord a => Ord (Interval l r a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal Methods compare :: Interval l r a -> Interval l r a -> Ordering # (<) :: Interval l r a -> Interval l r a -> Bool # (<=) :: Interval l r a -> Interval l r a -> Bool # (>) :: Interval l r a -> Interval l r a -> Bool # (>=) :: Interval l r a -> Interval l r a -> Bool # | |||||
| Hashable a => Hashable (Interval l r a) Source # | Since: 0.1.0.0 | ||||
| (Show a, SingI l, SingI r) => Display (Interval l r a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal | |||||
| type Rep (Interval l r a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.Interval.Internal | |||||
Creation
mkInterval :: forall (l :: IntervalBound) (r :: IntervalBound) a. (FromInteger a, Ord a, Show a, SingI l, SingI r) => a -> Either String (Interval l r a) Source #
Smart constructor for Interval. Returns Nothing if the given value
is not within the bounds. Note that we do not check that the bounds fit
within the type itself (e.g. consider Interval None (Closed 200) Int8).
Examples
>>>mkInterval @(Open 10) @(Closed 100) 50Right (UnsafeInterval (Open 10) (Closed 100) 50)
>>>mkInterval @(Open 10) @(Closed 100) 100Right (UnsafeInterval (Open 10) (Closed 100) 100)
>>>mkInterval @(Open 10) @(Closed 100) 10Left "Numeric.Data.Interval: Wanted value in (10, 100], received: 10"
>>>mkInterval @(Open 10) @(Closed 100) 101Left "Numeric.Data.Interval: Wanted value in (10, 100], received: 101"
Since: 0.1
unsafeInterval :: forall (l :: IntervalBound) (r :: IntervalBound) a. (FromInteger a, HasCallStack, Ord a, SingI l, SingI r, Show a) => a -> Interval l r a Source #
Variant of mkInterval that throws an error when given a value out of bounds.
WARNING: Partial
Examples
>>>unsafeInterval @(Open 10) @(Closed 100) 50UnsafeInterval (Open 10) (Closed 100) 50
Since: 0.1
Singletons
data SIntervalBound (i :: IntervalBound) where Source #
Singleton for IntervalBound.
Since: 0.1
Constructors
| SOpen :: forall (n :: Nat). KnownNat n => SIntervalBound ('Open n) | |
| SClosed :: forall (n :: Nat). KnownNat n => SIntervalBound ('Closed n) | |
| SNone :: SIntervalBound 'None |
Instances
| Show (SIntervalBound d) Source # | |
Defined in Numeric.Data.Interval.Internal Methods showsPrec :: Int -> SIntervalBound d -> ShowS # show :: SIntervalBound d -> String # showList :: [SIntervalBound d] -> ShowS # | |
Misc
errMsg :: forall (l :: IntervalBound) (r :: IntervalBound) a. (Show a, SingI l, SingI r) => a -> String Source #
Since: 0.1