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