smart-math-0.1: Mathematical smart constructors
Safe HaskellNone
LanguageHaskell2010

Numeric.Data.Interval.Internal

Description

Provides types for enforcing minimum and maximum bounds.

Since: 0.1

Synopsis

Types

data IntervalBound Source #

Interval bound.

Since: 0.1

Constructors

Open Nat

Open bound.

Closed Nat

Closed bound.

None

No bound.

Instances

Instances details
Generic IntervalBound Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Associated Types

type Rep IntervalBound

Since: smart-math-0.1

Instance details

Defined in Numeric.Data.Interval.Internal

type Rep IntervalBound = D1 ('MetaData "IntervalBound" "Numeric.Data.Interval.Internal" "smart-math-0.1-inplace" 'False) (C1 ('MetaCons "Open" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Nat)) :+: (C1 ('MetaCons "Closed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Nat)) :+: C1 ('MetaCons "None" 'PrefixI 'False) (U1 :: Type -> Type)))
Show IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

NFData IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

rnf :: IntervalBound -> () #

Eq IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Ord IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

SingKind IntervalBound Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Associated Types

type Demote IntervalBound 
Instance details

Defined in Numeric.Data.Interval.Internal

SingI 'None Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Methods

sing :: Sing 'None Source #

Lift IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

lift :: Quote m => IntervalBound -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => IntervalBound -> Code m IntervalBound #

KnownNat k => SingI ('Closed k :: IntervalBound) Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Methods

sing :: Sing ('Closed k) Source #

KnownNat k => SingI ('Open k :: IntervalBound) Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Methods

sing :: Sing ('Open k) Source #

type Rep IntervalBound Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

type Rep IntervalBound = D1 ('MetaData "IntervalBound" "Numeric.Data.Interval.Internal" "smart-math-0.1-inplace" 'False) (C1 ('MetaCons "Open" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Nat)) :+: (C1 ('MetaCons "Closed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Nat)) :+: C1 ('MetaCons "None" 'PrefixI 'False) (U1 :: Type -> Type)))
type Demote IntervalBound Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

type Sing Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

newtype Interval (l :: IntervalBound) (r :: IntervalBound) a Source #

Represents an interval. Can be (open|closed) bounded (left|right).

Examples

Expand
>>> import Data.Text.Display (display)
>>> import Data.Text qualified as T
>>> let x = unsafeInterval @(Open 10) @(Closed 100) 50
>>> putStrLn $ T.unpack $ display x
50 ∈ (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

Instances details
HasField "unInterval" (Interval l r a) a Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

getField :: Interval l r a -> a #

(k ~ A_Getter, a ~ n, b ~ n) => LabelOptic "unInterval" k (Interval l r a) (Interval l r a) a b Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

labelOptic :: Optic k NoIx (Interval l r a) (Interval l r a) a b Source #

Lift a => Lift (Interval l r a :: Type) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

lift :: Quote m => Interval l r a -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => Interval l r a -> Code m (Interval l r a) #

MetricSpace a => MetricSpace (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

diffR :: Interval l r a -> Interval l r a -> Double Source #

(FromInteger a, Ord a, SingI l, SingI r, Show a) => FromInteger (Interval l r a) Source #

WARNING: Partial

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

fromZ :: Integer -> Interval l r a Source #

(FromRational a, Ord a, SingI l, SingI r, Show a) => FromRational (Interval l r a) Source #

WARNING: Partial

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

fromQ :: Rational -> Interval l r a Source #

(FromReal a, Ord a, SingI l, SingI r, Show a) => FromReal (Interval l r a) Source #

WARNING: Partial

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

fromR :: Double -> Interval l r a Source #

ToInteger a => ToInteger (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

toZ :: Interval l r a -> Integer Source #

ToRational a => ToRational (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

toQ :: Interval l r a -> Rational Source #

ToReal a => ToReal (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

toR :: Interval l r a -> Double Source #

Generic (Interval l r a) Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Associated Types

type Rep (Interval l r a)

Since: smart-math-0.1

Instance details

Defined in Numeric.Data.Interval.Internal

type Rep (Interval l r a) = D1 ('MetaData "Interval" "Numeric.Data.Interval.Internal" "smart-math-0.1-inplace" 'True) (C1 ('MetaCons "UnsafeInterval" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Interval l r a -> Rep (Interval l r a) x #

to :: Rep (Interval l r a) x -> Interval l r a #

(Show a, SingI l, SingI r) => Show (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

showsPrec :: Int -> Interval l r a -> ShowS #

show :: Interval l r a -> String #

showList :: [Interval l r a] -> ShowS #

NFData a => NFData (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

rnf :: Interval l r a -> () #

Eq a => Eq (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

(==) :: Interval l r a -> Interval l r a -> Bool #

(/=) :: Interval l r a -> Interval l r a -> Bool #

Ord a => Ord (Interval l r a) Source #

Since: 0.1

Instance details

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 #

max :: Interval l r a -> Interval l r a -> Interval l r a #

min :: Interval l r a -> Interval l r a -> Interval l r a #

(Show a, SingI l, SingI r) => Display (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

type Rep (Interval l r a) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

type Rep (Interval l r a) = D1 ('MetaData "Interval" "Numeric.Data.Interval.Internal" "smart-math-0.1-inplace" 'True) (C1 ('MetaCons "UnsafeInterval" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Creation

mkInterval :: forall (l :: IntervalBound) (r :: IntervalBound) a. (FromInteger a, Ord a, SingI l, SingI r) => a -> Maybe (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

Expand
>>> mkInterval @(Open 10) @(Closed 100) 50
Just (UnsafeInterval (Open 10) (Closed 100) 50)
>>> mkInterval @(Open 10) @(Closed 100) 100
Just (UnsafeInterval (Open 10) (Closed 100) 100)
>>> mkInterval @(Open 10) @(Closed 100) 10
Nothing
>>> mkInterval @(Open 10) @(Closed 100) 101
Nothing

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

Expand
>>> unsafeInterval @(Open 10) @(Closed 100) 50
UnsafeInterval (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

Instances details
Show (SIntervalBound d) Source # 
Instance details

Defined in Numeric.Data.Interval.Internal

Misc

errMsg :: forall (l :: IntervalBound) (r :: IntervalBound) a. (Show a, SingI l, SingI r) => a -> Builder -> String Source #

Since: 0.1