File: Range.hs

package info (click to toggle)
bali-phy 3.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 10,608 kB
  • sloc: cpp: 67,094; xml: 4,074; perl: 3,715; haskell: 1,861; yacc: 1,067; python: 555; lex: 528; sh: 259; makefile: 20
file content (45 lines) | stat: -rw-r--r-- 2,410 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module Range where

data Range = OpenInterval Double Double | IntegerInterval Int Int | TrueFalseRange | Simplex Int Double | ListRange [Range] | LabelledSimplex [a] Double
 
builtin builtinGetBounds 2 "get_bounds" "Range"
builtin builtinGetIntegerBounds 2 "get_integer_bounds" "Range"
  
realLine = OpenInterval Nothing Nothing

above l = OpenInterval (Just l) Nothing
below u = OpenInterval Nothing (Just u)
between l u = OpenInterval (Just l) (Just u)

integer_above l = IntegerInterval (Just l) Nothing
integer_below u = IntegerInterval Nothing (Just u)
integer_between l u = IntegerInterval (Just l) (Just u)
all_integers = IntegerInterval Nothing Nothing

logTransform (OpenInterval Nothing _) = error "Can't logTransform ranges with negative numbers!"
logTransform (OpenInterval (Just l) Nothing ) = above (log l)
logTransform (OpenInterval (Just l) (Just u)) = between (log l) (log u)

expTransformRange (OpenInterval Nothing Nothing) = above 0.0
expTransformRange (OpenInterval Nothing (Just u)) = between 0.0 (exp u)
expTransformRange (OpenInterval (Just l) Nothing) = above (exp l)
expTransformRange (OpenInterval (Just l) (Just u)) = between (exp l) (exp u)

getBounds (OpenInterval Nothing Nothing)   = builtinGetBounds () ()
getBounds (OpenInterval Nothing (Just u))  = builtinGetBounds () u
getBounds (OpenInterval (Just l) Nothing)  = builtinGetBounds l ()
getBounds (OpenInterval (Just l) (Just u)) = builtinGetBounds l u
getBounds _                                = error "getBounds is undefined if argument is not an OpenInterval!"

getIntegerBounds (IntegerInterval Nothing Nothing)   = builtinGetIntegerBounds () ()
getIntegerBounds (IntegerInterval Nothing (Just u))  = builtinGetIntegerBounds () u
getIntegerBounds (IntegerInterval (Just l) Nothing)  = builtinGetIntegerBounds l ()
getIntegerBounds (IntegerInterval (Just l) (Just u)) = builtinGetIntegerBounds l u
getIntegerBounds _                                = error "getIntegerBounds is undefined if argument is not an IntegerInterval!"

get_integer_bounds (IntegerInterval Nothing Nothing)   = ((),())
get_integer_bounds (IntegerInterval Nothing (Just u))  = ((),u)
get_integer_bounds (IntegerInterval (Just l) Nothing)  = (l,())
get_integer_bounds (IntegerInterval (Just l) (Just u)) = (l, u)
get_integer_bounds _                                   = error "getIntegerBounds is undefined if argument is not an IntegerInterval!"