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
|