В следующем фрагменте первый аргумент foo
, SNat @n
собран вручную:
[e|foo $(appTypeE (conE 'SNat) n')|]
where
n' = litT . numTyLit . fromIntegral $ n
Есть ли конкретный синтаксис TH квазиквотер для этого? То есть Я хотел бы написать что-то вроде
[e|foo (SNat @$n')|]
но это, похоже, анализируется, как если бы я применял инфиксный оператор ($@)
:
> runQ [e|foo (SNat @$n')|]
AppE (VarE foo) (InfixE (Just (ConE SNat)) (UnboundVarE @$) (Just (VarE n')))
Интересно, что квазиквотер [e| |]
, похоже, поддерживает конкретный синтаксис для приложения, не являющегося квазивидимым типом:
> runQ [e|foo (SNat @5)|]
AppE (VarE foo) (AppTypeE (ConE SNat) (LitT (NumTyLit 5)))