ptera-th 0.5.0.0 → 0.6.0.0
raw patch · 2 files changed
+19/−8 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Language.Parser.Ptera.TH: (<::>) :: TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH: (<:>) :: TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH.Syntax: (<::>) :: TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH.Syntax: (<::>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH.Syntax: (<:>) :: TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
+ Language.Parser.Ptera.TH.Syntax: (<:>) :: T ctx => T a => TypedExpr rules tokens elem us -> (HTExpList us -> Q (TExp a)) -> AltM ctx rules tokens elem a
- Language.Parser.Ptera.TH.Syntax: semAct :: (HTExpList us -> Q (TExp a)) -> T TTypeQ us -> SemActM ctx us a
+ Language.Parser.Ptera.TH.Syntax: semAct :: T ctx => T a => (HTExpList us -> Q (TExp a)) -> T TTypeQ us -> SemActM ctx us a
- Language.Parser.Ptera.TH.Syntax: semActM :: (HTExpList us -> Q (TExp (ActionTask ctx a))) -> T TTypeQ us -> SemActM ctx us a
+ Language.Parser.Ptera.TH.Syntax: semActM :: forall ctx us a. T ctx => T a => (HTExpList us -> Q (TExp (ActionTask ctx a))) -> T TTypeQ us -> SemActM ctx us a
Files
- ptera-th.cabal +1/−1
- src/Language/Parser/Ptera/TH/Syntax.hs +18/−7
ptera-th.cabal view
@@ -2,7 +2,7 @@ build-type: Custom name: ptera-th-version: 0.5.0.0+version: 0.6.0.0 license: Apache-2.0 OR MPL-2.0 license-file: LICENSE copyright: (c) 2021 Mizunashi Mana
src/Language/Parser/Ptera/TH/Syntax.hs view
@@ -104,14 +104,19 @@ (<:>)- :: TypedExpr rules tokens elem us -> (HTExpList us -> TH.Q (TH.TExp a))+ :: LiftType.T ctx+ => LiftType.T a+ => TypedExpr rules tokens elem us+ -> (HTExpList us -> TH.Q (TH.TExp a)) -> AltM ctx rules tokens elem a e <:> act = unTypedExpr e SafeGrammar.<:> semAct act do getTypesOfExpr e infixl 4 <:> (<::>)- :: TypedExpr rules tokens elem us+ :: LiftType.T ctx+ => LiftType.T a+ => TypedExpr rules tokens elem us -> (HTExpList us -> TH.Q (TH.TExp (ActionTask ctx a))) -> AltM ctx rules tokens elem a e <::> act = unTypedExpr e SafeGrammar.<:> semActM act do getTypesOfExpr e@@ -181,24 +186,28 @@ type SemAct = SemActM () -semActM- :: (HTExpList us -> TH.Q (TH.TExp (Syntax.ActionTask ctx a)))+semActM :: forall ctx us a+ . LiftType.T ctx+ => LiftType.T a+ => (HTExpList us -> TH.Q (TH.TExp (ActionTask ctx a))) -> HFList.T TTypeQ us -> SemActM ctx us a semActM f xs0 = UnsafeSemActM go where go = do (ns, args) <- actArgs xs0 l <- TH.newName "pteraTHSemActArgs"+ let tqA = LiftType.liftType do Proxy @a+ let tqCtx = LiftType.liftType do Proxy @ctx let lp = pure do TH.VarP l let le = pure do TH.VarE l let lp0 = pure do TH.ListP [TH.VarP n | n <- ns] [e|\ $(lp) -> case $(le) of $(lp0) ->- $(TH.unType <$> f args)+ $(TH.unType <$> f args) :: ActionTask $(tqCtx) $(tqA) _ -> error "unreachable: unexpected arguments" |] - actArgs :: HFList.T TTypeQ us -> TH.Q ([TH.Name], HTExpList us)+ actArgs :: HFList.T TTypeQ args -> TH.Q ([TH.Name], HTExpList args) actArgs = \case HFList.HFNil -> pure ([], HNil)@@ -211,6 +220,8 @@ pure (n:ns, arg :* args) semAct- :: (HTExpList us -> TH.Q (TH.TExp a))+ :: LiftType.T ctx+ => LiftType.T a+ => (HTExpList us -> TH.Q (TH.TExp a)) -> HFList.T TTypeQ us -> SemActM ctx us a semAct f = semActM do \us -> [||pteraTHActionTaskPure $$(f us)||]