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/

Attachment: 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

Reply via email to