Hi, Am Dienstag, den 16.01.2018, 11:08 -0500 schrieb Joachim Breitner: > in a GHC plugin, I want to synthesize simple data structures, and > insert them into the code. What is the most idiomatic way of writing a > function, say, > > foo :: Maybe String -> CoreExpr > > or > > foo :: Maybe String -> CoreM CoreExpr > > so that the resulting CoreExpr describes the input. Abstractly > speaking, I could imagine creating the Core AST by hand (but I’d have > to figure out how to resolve the names of the constructors), or somehow > invoking the renamer, type-checker and desugarer from within CoreM.
I ended up writing this: dcExpr :: TH.Name -> CoreM CoreExpr dcExpr thn = do Just name <- thNameToGhcName thn dc <- lookupDataCon name pure $ Var (dataConWrapId dc) resultToExpr :: Result -> CoreM CoreExpr resultToExpr (Success s) = App <$> dcExpr 'Success <*> mkStringExpr s resultToExpr (Failure s) = App <$> dcExpr 'Failure <*> mkStringExpr s which seems to work fine. Cheers, Joachim -- Joachim Breitner m...@joachim-breitner.de http://www.joachim-breitner.de/
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users