aboutsummaryrefslogtreecommitdiff
path: root/src/Assignment.hs
blob: 51e619a1e734a9fbd1b4af0275b1d2fa22ff7c6a (plain)
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
module Assignment where

import qualified Expr as E

data Assignment
    = Variable String E.Expr
    | Function String String E.Expr
    deriving (Eq)

name :: Assignment -> String
name (Variable n _) = n
name (Function n _ _) = n

type Context = [Assignment]

update :: Context -> Assignment -> Context
update context a
  | name a `elem` map name context = map replaceIf context
  | otherwise = a:context
  where replaceIf a' = if name a' == name a then a else a'

get :: Context -> String -> Maybe Assignment
get context n = case found of [] -> Nothing
                              [a] -> Just a
    where found = filter (\a -> name a == n) context

instance Show Assignment where
    show (Variable name e) = name ++ " = " ++ show e
    show (Function name arg e) = name ++ "(" ++ arg ++ ") = " ++ show e