-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJVariable.hs
28 lines (24 loc) · 852 Bytes
/
JVariable.hs
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
module JVariable where
import Data.Map (Map)
data JVariable
= VInteger Int
| VStaticField String String
| VString String
| VBoolean Bool
| VObjectRef Int -- ^ the object is on the heap
| VObject (Map String JVariable) -- String should be replaced
| VNull
deriving (Show, Eq)
instance Ord JVariable where
compare v1 v2 = case (v1,v2) of
(VBoolean v1, VBoolean v2) -> v1 `compare` v2
(VInteger v1, VInteger v2) -> v1 `compare` v2
instance Num JVariable where
(+) v1 v2 = case (v1,v2) of
(VInteger v1, VInteger v2) -> VInteger $ v1 + v2
(*) v1 v2 = case (v1,v2) of
(VInteger v1, VInteger v2) -> VInteger $ v1 * v2
negate (VInteger v1) = (VInteger $ -v1)
abs (VInteger v) = VInteger $ abs v
signum (VInteger v) = VInteger $ signum v
fromInteger i = VInteger . fromInteger $ i