Changeset 1240
- Timestamp:
- 4/30/2009 3:24:27 AM (11 months ago)
- Files:
-
- branches/Boostcon2009/DSL/Expression.hs (modified) (2 diffs)
- branches/Boostcon2009/DSL/Functional.hs (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/Boostcon2009/DSL/Expression.hs
r1238 r1240 99 99 x <- lit ct 100 100 return x 101 gen_ex Placeholder = return "_" 101 gen_ex Placeholder = do 102 s <- get 103 put s {postBracket = False} 104 return "_" 105 106 gen_ex (Lambda e _) = return e 102 107 103 108 gen_ex (App fun xs) = do … … 118 123 variables (Var s) = [s] 119 124 variables (App fun xs) = foldr (++) [] $ map variables xs 125 variables (Lambda _ vars) = vars 120 126 variables _ = [] 121 127 122 data MPLExpr a = Var String | Const a | App MPLFun [MPLSubExpr] | Placeholder 128 data MPLExpr a = Var String | Const a | App MPLFun [MPLSubExpr] | Placeholder | Lambda String [String] 123 129 deriving(Show, Eq) 124 130 branches/Boostcon2009/DSL/Functional.hs
r1238 r1240 10 10 11 11 instance (Builtin a, Builtin b) => Bind1able (MPLExpr a -> MPLExpr b) (MPLExpr (Fun (a -> b))) where 12 bind1 f = Const $ Fun $ generated12 bind1 f = Lambda generated [] 13 13 where 14 generated = evalState (gen_ex (f Placeholder)) (GenState 0 0 "" False False) ++ " " 14 generated = evalState (gen_ex expr) (GenState 0 0 "" False False) ++ " " 15 expr = (f Placeholder) 15 16 16 17 instance (Builtin a, Builtin b, Builtin c) => Bind2able (MPLExpr a -> MPLExpr b -> MPLExpr c) (MPLExpr (Fun (a -> b -> c))) where 17 bind2 f = Const $ Fun $ generated18 bind2 f = Lambda generated [] 18 19 where 19 generated = evalState (gen_ex (f Placeholder Placeholder)) (GenState 0 0 "" False False) ++ " " 20 generated = evalState (gen_ex expr) (GenState 0 0 "" False False) ++ " " 21 expr = (f Placeholder Placeholder) 20 22 21 23 class Bind2able f2 g2 | g2 -> f2 where … … 29 31 30 32 instance (Builtin a, Builtin b, Builtin c) => Bind1stable (MPLExpr a -> MPLExpr b -> MPLExpr c) (MPLExpr a) (MPLExpr (Fun (b -> c))) where 31 bind1st f x = Const $ Fun $ generated33 bind1st f x = Lambda generated $ variables expr 32 34 where 33 generated = evalState (gen_ex (f x Placeholder)) (GenState 0 0 "" False False) ++ " " 35 generated = evalState (gen_ex expr) (GenState 0 0 "" False False) ++ " " 36 expr = (f x Placeholder) 34 37 35 38 instance Bind1stable (a -> b -> c) a (b -> c) where … … 43 46 44 47 instance (Builtin a, Builtin b, Builtin c) => Bind2ndable (MPLExpr a -> MPLExpr b -> MPLExpr c) (MPLExpr b) (MPLExpr (Fun (b -> c))) where 45 bind2nd f x = Const $ Fun $ generated48 bind2nd f x = Lambda generated $ variables expr 46 49 where 47 generated = evalState (gen_ex (f Placeholder x)) (GenState 0 0 "" False False) ++ " " 50 generated = evalState (gen_ex expr) (GenState 0 0 "" False False) ++ " " 51 expr = (f Placeholder x)
