Spirit and Karma

 

Changeset 1240

Show
Ignore:
Timestamp:
4/30/2009 3:24:27 AM (11 months ago)
Author:
dan_marsden
Message:

binder support with variable handling bug fixed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/Boostcon2009/DSL/Expression.hs

    r1238 r1240  
    9999                     x <- lit ct    
    100100                     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 
    102107 
    103108 gen_ex (App fun xs) = do 
     
    118123 variables (Var s)      = [s] 
    119124 variables (App fun xs) = foldr (++) [] $ map variables xs 
     125 variables (Lambda _ vars) = vars 
    120126 variables _    = [] 
    121127 
    122 data MPLExpr a = Var String | Const a | App MPLFun [MPLSubExpr] | Placeholder 
     128data MPLExpr a = Var String | Const a | App MPLFun [MPLSubExpr] | Placeholder | Lambda String [String] 
    123129 deriving(Show, Eq) 
    124130 
  • branches/Boostcon2009/DSL/Functional.hs

    r1238 r1240  
    1010 
    1111instance (Builtin a, Builtin b) => Bind1able (MPLExpr a -> MPLExpr b) (MPLExpr (Fun (a -> b))) where 
    12  bind1 f = Const $ Fun $ generated 
     12 bind1 f = Lambda generated [] 
    1313  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) 
    1516 
    1617instance (Builtin a, Builtin b, Builtin c) => Bind2able (MPLExpr a -> MPLExpr b -> MPLExpr c) (MPLExpr (Fun (a -> b -> c))) where 
    17  bind2 f = Const $ Fun $ generated 
     18 bind2 f = Lambda generated [] 
    1819  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) 
    2022 
    2123class Bind2able f2 g2 | g2 -> f2 where 
     
    2931 
    3032instance (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 $ generated 
     33 bind1st f x = Lambda generated $ variables expr 
    3234  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) 
    3437 
    3538instance Bind1stable (a -> b -> c) a (b -> c) where 
     
    4346 
    4447instance (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 $ generated 
     48 bind2nd f x = Lambda generated $ variables expr 
    4649  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)