Maybe String -> CoreExpr in a GHC plugin
Joachim Breitner
mail at joachim-breitner.de
Fri Jan 19 13:57:39 UTC 2018
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
mail at joachim-breitner.de
http://www.joachim-breitner.de/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://mail.haskell.org/pipermail/glasgow-haskell-users/attachments/20180119/79fe5480/attachment.sig>
More information about the Glasgow-haskell-users
mailing list