@@ -155,16 +155,39 @@ Exponential(θ::T) where {T<:AbstractFloat} = Exponentialθ(θ)
155155# # floats
156156
157157abstract type FloatInterval{T<: AbstractFloat } <: Uniform{T} end
158- abstract type CloseOpen{T<: AbstractFloat } <: FloatInterval{T} end
159158
160- struct CloseOpen01{T<: AbstractFloat } <: CloseOpen{T} end # interval [0,1)
159+ abstract type CloseOpen{ T<: AbstractFloat } <: FloatInterval{T} end
160+ abstract type OpenClose{ T<: AbstractFloat } <: FloatInterval{T} end
161+ abstract type CloseClose{T<: AbstractFloat } <: FloatInterval{T} end
162+ abstract type OpenOpen{ T<: AbstractFloat } <: FloatInterval{T} end
163+
161164struct CloseOpen12{T<: AbstractFloat } <: CloseOpen{T} end # interval [1,2)
162165
166+ struct CloseOpen01{ T<: AbstractFloat } <: CloseOpen{T} end # interval [0,1)
167+ struct OpenClose01{ T<: AbstractFloat } <: OpenClose{T} end # interval (0,1]
168+ struct CloseClose01{T<: AbstractFloat } <: CloseClose{T} end # interval [0,1]
169+ struct OpenOpen01{ T<: AbstractFloat } <: OpenOpen{T} end # interval (0,1)
170+
163171struct CloseOpenAB{T<: AbstractFloat } <: CloseOpen{T} # interval [a,b)
164172 a:: T
165173 b:: T
166174end
167175
176+ struct OpenCloseAB{T<: AbstractFloat } <: OpenClose{T} # interval (a,b]
177+ a:: T
178+ b:: T
179+ end
180+
181+ struct CloseCloseAB{T<: AbstractFloat } <: CloseClose{T} # interval [a,b]
182+ a:: T
183+ b:: T
184+ end
185+
186+ struct OpenOpenAB{T<: AbstractFloat } <: OpenOpen{T} # interval (a,b)
187+ a:: T
188+ b:: T
189+ end
190+
168191const FloatInterval_64 = FloatInterval{Float64}
169192const CloseOpen01_64 = CloseOpen01{Float64}
170193const CloseOpen12_64 = CloseOpen12{Float64}
@@ -175,10 +198,29 @@ CloseOpen12(::Type{T}=Float64) where {T<:AbstractFloat} = CloseOpen12{T}()
175198CloseOpen (:: Type{T} = Float64) where {T<: AbstractFloat } = CloseOpen01 {T} ()
176199CloseOpen (a:: T , b:: T ) where {T<: AbstractFloat } = CloseOpenAB {T} (a, b)
177200
201+ OpenClose (:: Type{T} = Float64) where {T<: AbstractFloat } = OpenClose01 {T} ()
202+ OpenClose (a:: T , b:: T ) where {T<: AbstractFloat } = OpenCloseAB {T} (a, b)
203+
204+ CloseClose (:: Type{T} = Float64) where {T<: AbstractFloat } = CloseClose01 {T} ()
205+ CloseClose (a:: T , b:: T ) where {T<: AbstractFloat } = CloseCloseAB {T} (a, b)
206+
207+ OpenOpen (:: Type{T} = Float64) where {T<: AbstractFloat } = OpenOpen01 {T} ()
208+ OpenOpen (a:: T , b:: T ) where {T<: AbstractFloat } = OpenOpenAB {T} (a, b)
209+
178210# convenience functions
211+
179212CloseOpen (a, b) = CloseOpen (AbstractFloat (a), AbstractFloat (b))
180213CloseOpen (a:: AbstractFloat , b:: AbstractFloat ) = CloseOpen (promote (a, b)... )
181214
215+ OpenClose (a, b) = OpenClose (AbstractFloat (a), AbstractFloat (b))
216+ OpenClose (a:: AbstractFloat , b:: AbstractFloat ) = OpenClose (promote (a, b)... )
217+
218+ CloseClose (a, b) = CloseClose (AbstractFloat (a), AbstractFloat (b))
219+ CloseClose (a:: AbstractFloat , b:: AbstractFloat ) = CloseClose (promote (a, b)... )
220+
221+ OpenOpen (a, b) = OpenOpen (AbstractFloat (a), AbstractFloat (b))
222+ OpenOpen (a:: AbstractFloat , b:: AbstractFloat ) = OpenOpen (promote (a, b)... )
223+
182224# # Bernoulli
183225
184226struct Bernoulli{T<: Number } <: Distribution{T}
0 commit comments