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

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 #

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)))

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) #

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

WARNING: Partial

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

Methods

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

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

WARNING: Partial

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

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, SingIntervalBound l, SingIntervalBound 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, SingIntervalBound l, SingIntervalBound 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. (Num a, Ord a, SingIntervalBound l, SingIntervalBound 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. (HasCallStack, Num a, Ord a, SingIntervalBound l, SingIntervalBound 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 

class SingIntervalBound (s :: IntervalBound) where Source #

Class for retrieving the singleton witness from the IntervalBound.

Since: 0.1

Methods

singIntervalBound :: SIntervalBound s Source #

Retrieves the singleton witness.

Since: 0.1

Instances

Instances details
SingIntervalBound 'None Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

KnownNat k => SingIntervalBound ('Closed k) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

KnownNat k => SingIntervalBound ('Open k) Source #

Since: 0.1

Instance details

Defined in Numeric.Data.Interval.Internal

withSingIntervalBound :: forall (i :: IntervalBound) r. SIntervalBound i -> (SingIntervalBound i => r) -> r Source #

Singleton "with"-style convenience function. Allows us to run a computation SingIntervalBound i => r without explicitly pattern-matching every time.

Since: 0.1

Misc

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

Since: 0.1