Often when analysing expressions I want to get all the arguments for a function. The following function decomposes such an application chain. -- Should only be used on expression of form (App e1 e2) getAppChain :: Exp -> (Exp, [Exp]) getAppChain (AppE e1 e2) = let (f, args) = getAppChain e1 in (f, args ++ [e2]) getAppChain e = (e, []) -- The dual of getAppChain mkAppChain :: (Exp, [Exp]) -> Exp mkAppChain (f, args) = foldl1 AppE (f:args) putExpQLn :: ExpQ -> IO () putExpQLn expQ= do exp <- runQ expQ putStrLn (show exp) -- Two very useful functions. -- And these are just good for printing out code. putQ :: Show a => Q a -> IO () putQ xQ = do x <- runQ xQ putStr (show x) putQLn :: Show a => Q a -> IO () putQLn xQ = do putQ xQ putStrLn ""
participants (1)
-
Sean Seefried