I have a call myFun @m @d
. And now I want to code it for my template Haskell. I try
let myFunCall = AppTypeE (VarE $ mkName "myFun") (AppT (VarT $ mkName "m") (VarT $ mkName "d"))
But it's invalid because I get myFun @(m d)
.
To be honest I have not idea even how to achieve it.
As with any other sort of function application in Haskell, it associates argument by argument. I.e. myFun @m @d
is (myFun @m) @d
. Each of the @
is an AppTypeE
of its own, i.e. you need
AppTypeE (AppTypeE (VarE $ mkName "myFun") ...) ...