packages feed

data-effects-th 0.1.2.0 → 0.2.0.0

raw patch · 8 files changed

+193/−165 lines, 8 filesdep ~basedep ~containersdep ~data-defaultPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, containers, data-default, data-effects-core, lens, mtl, tasty, template-haskell, th-abstraction

API changes (from Hackage documentation)

- Data.Effect.TH: [_doesGenerateLiftInsPatternSynonyms] :: EffectClassConf -> Bool
- Data.Effect.TH: [_doesGenerateLiftInsTypeSynonym] :: EffectClassConf -> Bool
- Data.Effect.TH: [_warnFirstOrderInSigCls] :: EffectConf -> Bool
- Data.Effect.TH: class Default a
- Data.Effect.TH: def :: Default a => a
- Data.Effect.TH: doesGenerateLiftInsPatternSynonyms :: Lens' EffectClassConf Bool
- Data.Effect.TH: doesGenerateLiftInsTypeSynonym :: Lens' EffectClassConf Bool
- Data.Effect.TH: generateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH: generateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH: noGenerateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH: noGenerateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH: suppressFirstOrderInSignatureClassWarning :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH: warnFirstOrderInSigCls :: Lens' EffectConf Bool
- Data.Effect.TH.Internal: [_doesGenerateLiftInsPatternSynonyms] :: EffectClassConf -> Bool
- Data.Effect.TH.Internal: [_doesGenerateLiftInsTypeSynonym] :: EffectClassConf -> Bool
- Data.Effect.TH.Internal: [_warnFirstOrderInSigCls] :: EffectConf -> Bool
- Data.Effect.TH.Internal: doesGenerateLiftInsPatternSynonyms :: Lens' EffectClassConf Bool
- Data.Effect.TH.Internal: doesGenerateLiftInsTypeSynonym :: Lens' EffectClassConf Bool
- Data.Effect.TH.Internal: genLiftInsPatternSynonyms :: EffClsInfo -> Q [Dec]
- Data.Effect.TH.Internal: genLiftInsTypeSynonym :: EffClsInfo -> Dec
- Data.Effect.TH.Internal: generateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH.Internal: generateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH.Internal: noGenerateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH.Internal: noGenerateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH.Internal: suppressFirstOrderInSignatureClassWarning :: MakeEffectConf -> MakeEffectConf
- Data.Effect.TH.Internal: warnFirstOrderInSigCls :: Lens' EffectConf Bool
+ Data.Effect.Key.TH: makeKeyedEffect_ :: [Name] -> [Name] -> Q [Dec]
+ Data.Effect.TH: [_doesGenerateLiftFOEPatternSynonyms] :: EffectClassConf -> Bool
+ Data.Effect.TH: [_doesGenerateLiftFOETypeSynonym] :: EffectClassConf -> Bool
+ Data.Effect.TH: [_warnFirstOrderInHOE] :: EffectConf -> Bool
+ Data.Effect.TH: doesGenerateLiftFOEPatternSynonyms :: Lens' EffectClassConf Bool
+ Data.Effect.TH: doesGenerateLiftFOETypeSynonym :: Lens' EffectClassConf Bool
+ Data.Effect.TH: generateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH: generateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH: makeEffectH_ :: [Name] -> Q [Dec]
+ Data.Effect.TH: makeEffect_ :: [Name] -> [Name] -> Q [Dec]
+ Data.Effect.TH: noGenerateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH: noGenerateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH: suppressFirstOrderInHigherOrderEffectWarning :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH: warnFirstOrderInHOE :: Lens' EffectConf Bool
+ Data.Effect.TH.Internal: [_doesGenerateLiftFOEPatternSynonyms] :: EffectClassConf -> Bool
+ Data.Effect.TH.Internal: [_doesGenerateLiftFOETypeSynonym] :: EffectClassConf -> Bool
+ Data.Effect.TH.Internal: [_warnFirstOrderInHOE] :: EffectConf -> Bool
+ Data.Effect.TH.Internal: doesGenerateLiftFOEPatternSynonyms :: Lens' EffectClassConf Bool
+ Data.Effect.TH.Internal: doesGenerateLiftFOETypeSynonym :: Lens' EffectClassConf Bool
+ Data.Effect.TH.Internal: genLiftFOEPatternSynonyms :: EffClsInfo -> Q [Dec]
+ Data.Effect.TH.Internal: genLiftFOETypeSynonym :: EffClsInfo -> Dec
+ Data.Effect.TH.Internal: generateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH.Internal: generateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH.Internal: noGenerateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH.Internal: noGenerateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH.Internal: suppressFirstOrderInHigherOrderEffectWarning :: MakeEffectConf -> MakeEffectConf
+ Data.Effect.TH.Internal: warnFirstOrderInHOE :: Lens' EffectConf Bool

Files

ChangeLog.md view
@@ -5,5 +5,9 @@ * Initial public release.  ## 0.1.1.0 -- 2024-09-01-* Fix an issue where constraints in the effect constructor were not properly reflected in 'genLiftInsPatternSynonyms'.+* Fix an issue where constraints in the effect constructor were not properly reflected in 'genLiftFOEPatternSynonyms'. * Fixed an issue where the auto-generation would fail when the name of the effect constructor started with a colon (:) operator.++## 0.2.0.0 -- 2024-10-10+* Support for the core version upgrade to 0.2.+    * Support for GHC 9.8.2.
README.md view
@@ -13,10 +13,13 @@ ## Your contributions are welcome! Please see [CONTRIBUTING.md](https://github.com/sayo-hs/data-effects/blob/ef706ef3fa547de01ce6bb5636af911354e53b58/CONTRIBUTING.md). -## Credits-Parts of this project have been adapted or inspired by the following resources:+## Acknowledgements, citations, and related work+The following is a non-exhaustive list of people and works that have had a significant impact, directly or indirectly, on its design and implementation: -* **[compdata](https://github.com/pa-ba/compdata)**-    * **Copyright** (c) 2010--2011 Patrick Bahr, Tom Hvitved-    * **License**: BSD-3-Clause-    * **Modifications**: Used TemplateHaskell code to derive instances of the `HFunctor` type class.+- Casper Bach Poulsen and Cas van der Rest — [Hefty Algebras: Modular Elaboration of Higher-Order Algebraic Effects][casper:hefty]+- Patrick Bahr and Tom Hvitved — [`compdata`: Compositional Data Types][gh:compdata]+- Michael Szvetits — [`effet`][gh:effet]++[casper:hefty]: https://dl.acm.org/doi/10.1145/3571255+[gh:compdata]: https://github.com/pa-ba/compdata+[gh:effet]: https://github.com/typedbyte/effet
data-effects-th.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               data-effects-th-version:            0.1.2.0+version:            0.2.0.0  -- A short (one-line) description of the package. synopsis: Template Haskell utilities for the data-effects library.@@ -16,31 +16,33 @@ bug-reports: https://github.com/sayo-hs/data-effects  -- The license under which the package is released.-license:            MPL-2.0+license:            MPL-2.0 AND BSD-3-Clause license-file:       LICENSE-author:             Yamada Ryo <ymdfield@outlook.jp>-maintainer:         Yamada Ryo <ymdfield@outlook.jp>+author:             Sayo Koyoneda <ymdfield@outlook.jp>+maintainer:         Sayo Koyoneda <ymdfield@outlook.jp>  -- A copyright notice. copyright:-    2023 Yamada Ryo,+    2023-2024 Sayo Koyoneda,     2020 Michael Szvetits,     2010-2011 Patrick Bahr  category: Control, Effect, Template Haskell -extra-source-files:+extra-doc-files:     ChangeLog.md     NOTICE     README.md  tested-with:+    GHC == 9.8.2+    GHC == 9.4.1     GHC == 9.2.8  source-repository head     type: git     location: https://github.com/sayo-hs/data-effects-    tag: v0.1.0+    tag: v0.2.0     subdir: data-effects-th  library@@ -57,14 +59,14 @@     -- LANGUAGE extensions used by modules in this package.     -- other-extensions:     build-depends:-        base                    ^>= 4.16.4.0,-        data-effects-core       ^>= 0.1,-        template-haskell        ^>= 2.18,-        th-abstraction          >= 0.4 && < 0.7,-        lens                    ^>= 5.2.3,-        mtl                     ^>= 2.2.2,+        base                    >= 4.16.4 && < 4.21,+        data-effects-core       ^>= 0.2,+        template-haskell        >= 2.18 && < 2.23,+        th-abstraction          >= 0.4 && < 0.8,+        lens                    >= 5.2.3 && < 5.4,+        mtl                     >= 2.2.2 && < 2.4,         extra                   ^>= 1.7.14,-        containers              ^>= 0.6.5,+        containers              >= 0.6.5 && < 0.8,         either                  ^>= 5.0.2,         text                    >= 2.0 && < 2.2,         data-default            ^>= 0.7.1,@@ -83,7 +85,8 @@         BlockArguments,         FunctionalDependencies,         RecordWildCards,-        DefaultSignatures+        DefaultSignatures,+        PatternSynonyms   test-suite Example@@ -96,7 +99,7 @@         data-effects-th,         base,         data-effects-core,-        tasty       ^>= 1.4,+        tasty       >= 1.4 && < 1.6,         tasty-hunit ^>= 0.10,         data-default,         infinite-list,
src/Data/Effect/HFunctor/TH.hs view
@@ -8,7 +8,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/.  {- |-Copyright   :  (c) 2023 Yamada Ryo+Copyright   :  (c) 2023 Sayo Koyoneda License     :  MPL-2.0 (see the file LICENSE) Maintainer  :  ymdfield@outlook.jp Stability   :  experimental
src/Data/Effect/HFunctor/TH/Internal.hs view
@@ -48,7 +48,7 @@  {- | Copyright   :  (c) 2010-2011 Patrick Bahr, Tom Hvitved-               (c) 2023 Yamada Ryo+               (c) 2023 Sayo Koyoneda License     :  MPL-2.0 (see the file LICENSE) Maintainer  :  ymdfield@outlook.jp Stability   :  experimental
src/Data/Effect/Key/TH.hs view
@@ -7,14 +7,14 @@  module Data.Effect.Key.TH where -import Control.Effect.Key (SendInsBy, SendSigBy)+import Control.Effect.Key (SendFOEBy, SendHOEBy) import Control.Lens ((%~), (<&>), _Just, _head) import Control.Monad (forM_) import Control.Monad.Writer (execWriterT, tell) import Data.Char (toLower) import Data.Default (def) import Data.Effect.Key (type (##>), type (#>))-import Data.Effect.TH (makeEffect')+import Data.Effect.TH (makeEffect', noDeriveHFunctor) import Data.Effect.TH.Internal (     DataInfo,     EffClsInfo (EffClsInfo),@@ -54,6 +54,7 @@     mkName,     nameBase,  )+import Language.Haskell.TH.Datatype.TyVarBndr (pattern BndrReq)  makeKeyedEffect :: [Name] -> [Name] -> Q [Dec] makeKeyedEffect =@@ -62,6 +63,13 @@         genEffectKey {-# INLINE makeKeyedEffect #-} +makeKeyedEffect_ :: [Name] -> [Name] -> Q [Dec]+makeKeyedEffect_ =+    makeEffect'+        (def & noDeriveHFunctor & changeNormalSenderFnNameFormat)+        genEffectKey+{-# INLINE makeKeyedEffect_ #-}+ changeNormalSenderFnNameFormat :: MakeEffectConf -> MakeEffectConf changeNormalSenderFnNameFormat =     alterEffectConf $ normalSenderGenConf . _Just . senderFnName %~ (++ "'_")@@ -93,7 +101,7 @@     tell         [ TySynD             (mkName ecNamePlain)-            (pvs <&> (`PlainTV` ()))+            (pvs <&> (`PlainTV` BndrReq))             (InfixT key keyedOp (foldl AppT (ConT ecName) (map VarT pvs)))         ] @@ -101,8 +109,8 @@         let EffectConf{..} = _confByEffect effName         forM_ _keyedSenderGenConf \conf@SenderFunctionConf{..} -> do             let sendCxt effDataType carrier = case order of-                    FirstOrder -> ConT ''SendInsBy `AppT` key `AppT` effDataType `AppT` carrier-                    HigherOrder -> ConT ''SendSigBy `AppT` key `AppT` effDataType `AppT` carrier+                    FirstOrder -> ConT ''SendFOEBy `AppT` key `AppT` effDataType `AppT` carrier+                    HigherOrder -> ConT ''SendHOEBy `AppT` key `AppT` effDataType `AppT` carrier              genSenderArmor sendCxt id conf{_senderFnName = nameBase effName & _head %~ toLower} con \_f ->                 pure $ Clause [] (NormalB $ VarE (mkName _senderFnName) `AppTypeE` key) []
src/Data/Effect/TH.hs view
@@ -7,7 +7,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/.  {- |-Copyright   :  (c) 2023 Yamada Ryo+Copyright   :  (c) 2023 Sayo Koyoneda License     :  MPL-2.0 (see the file LICENSE) Maintainer  :  ymdfield@outlook.jp Stability   :  experimental@@ -25,13 +25,13 @@     EffectClassConf (..),     confByEffect,     doesDeriveHFunctor,-    doesGenerateLiftInsPatternSynonyms,-    doesGenerateLiftInsTypeSynonym,+    doesGenerateLiftFOEPatternSynonyms,+    doesGenerateLiftFOETypeSynonym,     EffectConf (..),     keyedSenderGenConf,     normalSenderGenConf,     taggedSenderGenConf,-    warnFirstOrderInSigCls,+    warnFirstOrderInHOE,     SenderFunctionConf (..),     senderFnName,     doesGenerateSenderFnSignature,@@ -40,18 +40,19 @@     senderFnConfs,     deriveHFunctor,     noDeriveHFunctor,-    generateLiftInsTypeSynonym,-    noGenerateLiftInsTypeSynonym,-    generateLiftInsPatternSynonyms,-    noGenerateLiftInsPatternSynonyms,+    generateLiftFOETypeSynonym,+    noGenerateLiftFOETypeSynonym,+    generateLiftFOEPatternSynonyms,+    noGenerateLiftFOEPatternSynonyms,     noGenerateNormalSenderFunction,     noGenerateTaggedSenderFunction,     noGenerateKeyedSenderFunction,-    suppressFirstOrderInSignatureClassWarning,+    suppressFirstOrderInHigherOrderEffectWarning,     noGenerateSenderFunctionSignature, ) where -import Control.Monad.Writer (execWriterT, forM_, lift, tell, when)+import Control.Monad (forM_, when)+import Control.Monad.Writer (execWriterT, lift, tell) import Data.Default (Default (def)) import Data.Effect.HFunctor.TH.Internal (deriveHFunctor) import Data.Effect.TH.Internal (@@ -61,15 +62,15 @@         EffectClassConf,         _confByEffect,         _doesDeriveHFunctor,-        _doesGenerateLiftInsPatternSynonyms,-        _doesGenerateLiftInsTypeSynonym+        _doesGenerateLiftFOEPatternSynonyms,+        _doesGenerateLiftFOETypeSynonym     ),     EffectConf (         EffectConf,         _keyedSenderGenConf,         _normalSenderGenConf,         _taggedSenderGenConf,-        _warnFirstOrderInSigCls+        _warnFirstOrderInHOE     ),     EffectOrder (FirstOrder, HigherOrder),     MakeEffectConf (MakeEffectConf, unMakeEffectConf),@@ -83,19 +84,19 @@     alterEffectConf,     confByEffect,     doesDeriveHFunctor,-    doesGenerateLiftInsPatternSynonyms,-    doesGenerateLiftInsTypeSynonym,+    doesGenerateLiftFOEPatternSynonyms,+    doesGenerateLiftFOETypeSynonym,     doesGenerateSenderFnSignature,-    genLiftInsPatternSynonyms,-    genLiftInsTypeSynonym,+    genLiftFOEPatternSynonyms,+    genLiftFOETypeSynonym,     genSenders,-    generateLiftInsPatternSynonyms,-    generateLiftInsTypeSynonym,+    generateLiftFOEPatternSynonyms,+    generateLiftFOETypeSynonym,     keyedSenderGenConf,     noDeriveHFunctor,     noGenerateKeyedSenderFunction,-    noGenerateLiftInsPatternSynonyms,-    noGenerateLiftInsTypeSynonym,+    noGenerateLiftFOEPatternSynonyms,+    noGenerateLiftFOETypeSynonym,     noGenerateNormalSenderFunction,     noGenerateSenderFunctionSignature,     noGenerateTaggedSenderFunction,@@ -106,21 +107,21 @@     senderFnConfs,     senderFnDoc,     senderFnName,-    suppressFirstOrderInSignatureClassWarning,+    suppressFirstOrderInHigherOrderEffectWarning,     taggedSenderGenConf,     unMakeEffectConf,-    warnFirstOrderInSigCls,+    warnFirstOrderInHOE,  ) import Data.Function ((&)) import Data.List (singleton) import Language.Haskell.TH (Dec, Info, Name, Q, Type (TupleT)) -makeEffect' ::-    MakeEffectConf ->-    (EffectOrder -> Info -> DataInfo -> EffClsInfo -> EffectClassConf -> Q [Dec]) ->-    [Name] ->-    [Name] ->-    Q [Dec]+makeEffect'+    :: MakeEffectConf+    -> (EffectOrder -> Info -> DataInfo -> EffClsInfo -> EffectClassConf -> Q [Dec])+    -> [Name]+    -> [Name]+    -> Q [Dec] makeEffect' (MakeEffectConf conf) extTemplate inss sigs = execWriterT do     forM_ inss \ins -> do         (info, dataInfo, effClsInfo) <- reifyEffCls FirstOrder ins & lift@@ -128,11 +129,11 @@          genSenders ecConf effClsInfo & lift >>= tell -        when _doesGenerateLiftInsTypeSynonym do-            genLiftInsTypeSynonym effClsInfo & singleton & tell+        when _doesGenerateLiftFOETypeSynonym do+            genLiftFOETypeSynonym effClsInfo & singleton & tell -        when _doesGenerateLiftInsPatternSynonyms do-            genLiftInsPatternSynonyms effClsInfo & lift >>= tell+        when _doesGenerateLiftFOEPatternSynonyms do+            genLiftFOEPatternSynonyms effClsInfo & lift >>= tell          extTemplate FirstOrder info dataInfo effClsInfo ecConf & lift >>= tell @@ -162,3 +163,11 @@ makeEffectH :: [Name] -> Q [Dec] makeEffectH sigs = makeEffect [] sigs {-# INLINE makeEffectH #-}++makeEffect_ :: [Name] -> [Name] -> Q [Dec]+makeEffect_ = makeEffect' (def & noDeriveHFunctor) noExtTemplate+{-# INLINE makeEffect_ #-}++makeEffectH_ :: [Name] -> Q [Dec]+makeEffectH_ sigs = makeEffect_ [] sigs+{-# INLINE makeEffectH_ #-}
src/Data/Effect/TH/Internal.hs view
@@ -7,7 +7,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/.  {- |-Copyright   :  (c) 2023-2024 Yamada Ryo+Copyright   :  (c) 2023-2024 Sayo Koyoneda                (c) 2010-2011 Patrick Bahr, Tom Hvitved                (c) 2020 Michael Szvetits License     :  MPL-2.0 (see the file LICENSE)@@ -49,12 +49,12 @@  )  import Control.Arrow ((>>>))-import Control.Effect (SendIns, SendSig, sendIns, sendSig)-import Control.Effect.Key (SendInsBy, SendSigBy, sendInsBy, sendSigBy)+import Control.Effect (SendFOE, SendHOE, sendFOE, sendHOE)+import Control.Effect.Key (SendFOEBy, SendHOEBy, sendFOEBy, sendHOEBy) import Control.Monad.Writer (WriterT, execWriterT, lift, tell) import Data.Char (toLower) import Data.Default (Default, def)-import Data.Effect (LiftIns (LiftIns))+import Data.Effect (LiftFOE (LiftFOE)) import Data.Effect.Tag (Tag (Tag), TagH (TagH)) import Data.Either.Extra (mapLeft, maybeToEither) import Data.Either.Validation (Validation, eitherToValidation, validationToEither)@@ -91,6 +91,7 @@     reportWarning,  ) import Language.Haskell.TH qualified as TH+import Language.Haskell.TH.Datatype.TyVarBndr (pattern BndrReq)  data EffClsInfo = EffClsInfo     { ecName :: Name@@ -132,15 +133,15 @@ data EffectClassConf = EffectClassConf     { _confByEffect :: Name -> EffectConf     , _doesDeriveHFunctor :: Bool-    , _doesGenerateLiftInsTypeSynonym :: Bool-    , _doesGenerateLiftInsPatternSynonyms :: Bool+    , _doesGenerateLiftFOETypeSynonym :: Bool+    , _doesGenerateLiftFOEPatternSynonyms :: Bool     }  data EffectConf = EffectConf     { _normalSenderGenConf :: Maybe SenderFunctionConf     , _taggedSenderGenConf :: Maybe SenderFunctionConf     , _keyedSenderGenConf :: Maybe SenderFunctionConf-    , _warnFirstOrderInSigCls :: Bool+    , _warnFirstOrderInHOE :: Bool     }  data SenderFunctionConf = SenderFunctionConf@@ -160,7 +161,7 @@             { _normalSenderGenConf = normal             , _taggedSenderGenConf = tagged             , _keyedSenderGenConf = keyed-            , _warnFirstOrderInSigCls+            , _warnFirstOrderInHOE             }  makeLenses ''EffectClassConf@@ -175,22 +176,22 @@ noDeriveHFunctor = alterEffectClassConf $ doesDeriveHFunctor .~ False {-# INLINE noDeriveHFunctor #-} -generateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf-generateLiftInsTypeSynonym = alterEffectClassConf $ doesGenerateLiftInsTypeSynonym .~ True-{-# INLINE generateLiftInsTypeSynonym #-}+generateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf+generateLiftFOETypeSynonym = alterEffectClassConf $ doesGenerateLiftFOETypeSynonym .~ True+{-# INLINE generateLiftFOETypeSynonym #-} -noGenerateLiftInsTypeSynonym :: MakeEffectConf -> MakeEffectConf-noGenerateLiftInsTypeSynonym = alterEffectClassConf $ doesGenerateLiftInsTypeSynonym .~ False-{-# INLINE noGenerateLiftInsTypeSynonym #-}+noGenerateLiftFOETypeSynonym :: MakeEffectConf -> MakeEffectConf+noGenerateLiftFOETypeSynonym = alterEffectClassConf $ doesGenerateLiftFOETypeSynonym .~ False+{-# INLINE noGenerateLiftFOETypeSynonym #-} -generateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf-generateLiftInsPatternSynonyms = alterEffectClassConf $ doesGenerateLiftInsPatternSynonyms .~ True-{-# INLINE generateLiftInsPatternSynonyms #-}+generateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf+generateLiftFOEPatternSynonyms = alterEffectClassConf $ doesGenerateLiftFOEPatternSynonyms .~ True+{-# INLINE generateLiftFOEPatternSynonyms #-} -noGenerateLiftInsPatternSynonyms :: MakeEffectConf -> MakeEffectConf-noGenerateLiftInsPatternSynonyms =-    alterEffectClassConf $ doesGenerateLiftInsPatternSynonyms .~ False-{-# INLINE noGenerateLiftInsPatternSynonyms #-}+noGenerateLiftFOEPatternSynonyms :: MakeEffectConf -> MakeEffectConf+noGenerateLiftFOEPatternSynonyms =+    alterEffectClassConf $ doesGenerateLiftFOEPatternSynonyms .~ False+{-# INLINE noGenerateLiftFOEPatternSynonyms #-}  noGenerateNormalSenderFunction :: MakeEffectConf -> MakeEffectConf noGenerateNormalSenderFunction = alterEffectConf $ normalSenderGenConf .~ Nothing@@ -204,9 +205,9 @@ noGenerateKeyedSenderFunction = alterEffectConf $ keyedSenderGenConf .~ Nothing {-# INLINE noGenerateKeyedSenderFunction #-} -suppressFirstOrderInSignatureClassWarning :: MakeEffectConf -> MakeEffectConf-suppressFirstOrderInSignatureClassWarning = alterEffectConf $ warnFirstOrderInSigCls .~ False-{-# INLINE suppressFirstOrderInSignatureClassWarning #-}+suppressFirstOrderInHigherOrderEffectWarning :: MakeEffectConf -> MakeEffectConf+suppressFirstOrderInHigherOrderEffectWarning = alterEffectConf $ warnFirstOrderInHOE .~ False+{-# INLINE suppressFirstOrderInHigherOrderEffectWarning #-}  noGenerateSenderFunctionSignature :: MakeEffectConf -> MakeEffectConf noGenerateSenderFunctionSignature =@@ -238,11 +239,11 @@                             Just $ normalSenderFnConf & senderFnName %~ (++ "'")                         , _keyedSenderGenConf =                             Just $ normalSenderFnConf & senderFnName %~ (++ "''")-                        , _warnFirstOrderInSigCls = True+                        , _warnFirstOrderInHOE = True                         }             , _doesDeriveHFunctor = True-            , _doesGenerateLiftInsTypeSynonym = True-            , _doesGenerateLiftInsPatternSynonyms = True+            , _doesGenerateLiftFOETypeSynonym = True+            , _doesGenerateLiftFOEPatternSynonyms = True             }  genSenders :: EffectClassConf -> EffClsInfo -> Q [Dec]@@ -256,90 +257,90 @@         forM_ _taggedSenderGenConf \conf -> genTaggedSender order conf con         forM_ _keyedSenderGenConf \conf -> genKeyedSender order conf con -        -- Check for First Order in Signature Class warning-        when (_warnFirstOrderInSigCls && order == HigherOrder) do+        -- Check for First Order in Higher Order effect warning+        when (_warnFirstOrderInHOE && order == HigherOrder) do             let isHigherOrderEffect = any (tyVarName (fromJust effCarrier) `occurs`) effParamTypes              unless isHigherOrderEffect do                 lift $                     reportWarning $-                        "The first-order effect ‘"+                        "The first-order operation ‘"                             <> nameBase effName-                            <> "’ has been found within the signature class data type ‘"+                            <> "’ has been found within the higher-order effect data type ‘"                             <> nameBase ecName-                            <> "’.\nConsider separating the first-order effect into an instruction class data type."+                            <> "’.\nConsider separating the first-order operation into an first-order effect data type." -genNormalSender ::-    EffectOrder ->-    SenderFunctionConf ->-    EffConInfo ->-    WriterT [Dec] Q ()+genNormalSender+    :: EffectOrder+    -> SenderFunctionConf+    -> EffConInfo+    -> WriterT [Dec] Q () genNormalSender order = genSender order send sendCxt id   where     (send, sendCxt) = case order of         FirstOrder ->-            ( (VarE 'sendIns `AppE`)-            , \effDataType carrier -> ConT ''SendIns `AppT` effDataType `AppT` carrier+            ( (VarE 'sendFOE `AppE`)+            , \effDataType carrier -> ConT ''SendFOE `AppT` effDataType `AppT` carrier             )         HigherOrder ->-            ( (VarE 'sendSig `AppE`)-            , \effDataType carrier -> ConT ''SendSig `AppT` effDataType `AppT` carrier+            ( (VarE 'sendHOE `AppE`)+            , \effDataType carrier -> ConT ''SendHOE `AppT` effDataType `AppT` carrier             ) -genTaggedSender ::-    EffectOrder ->-    SenderFunctionConf ->-    EffConInfo ->-    WriterT [Dec] Q ()+genTaggedSender+    :: EffectOrder+    -> SenderFunctionConf+    -> EffConInfo+    -> WriterT [Dec] Q () genTaggedSender order conf eff = do     nTag <- newName "tag" & lift     let tag = VarT nTag          (send, sendCxt) = case order of             FirstOrder ->-                ( (VarE 'sendIns `AppE`) . (ConE 'Tag `AppTypeE` WildCardT `AppTypeE` tag `AppE`)+                ( (VarE 'sendFOE `AppE`) . (ConE 'Tag `AppTypeE` WildCardT `AppTypeE` tag `AppE`)                 , \effDataType carrier ->-                    ConT ''SendIns `AppT` (ConT ''Tag `AppT` effDataType `AppT` tag) `AppT` carrier+                    ConT ''SendFOE `AppT` (ConT ''Tag `AppT` effDataType `AppT` tag) `AppT` carrier                 )             HigherOrder ->-                ( (VarE 'sendSig `AppE`) . (ConE 'TagH `AppTypeE` WildCardT `AppTypeE` tag `AppE`)+                ( (VarE 'sendHOE `AppE`) . (ConE 'TagH `AppTypeE` WildCardT `AppTypeE` tag `AppE`)                 , \effDataType carrier ->-                    ConT ''SendSig `AppT` (ConT ''TagH `AppT` effDataType `AppT` tag) `AppT` carrier+                    ConT ''SendHOE `AppT` (ConT ''TagH `AppT` effDataType `AppT` tag) `AppT` carrier                 )      genSender order send sendCxt (PlainTV nTag SpecifiedSpec :) conf eff -genKeyedSender ::-    EffectOrder ->-    SenderFunctionConf ->-    EffConInfo ->-    WriterT [Dec] Q ()+genKeyedSender+    :: EffectOrder+    -> SenderFunctionConf+    -> EffConInfo+    -> WriterT [Dec] Q () genKeyedSender order conf eff = do     nKey <- newName "key" & lift     let key = VarT nKey          (send, sendCxt) = case order of             FirstOrder ->-                ( (VarE 'sendInsBy `AppTypeE` key `AppE`)+                ( (VarE 'sendFOEBy `AppTypeE` key `AppE`)                 , \effDataType carrier ->-                    ConT ''SendInsBy `AppT` key `AppT` effDataType `AppT` carrier+                    ConT ''SendFOEBy `AppT` key `AppT` effDataType `AppT` carrier                 )             HigherOrder ->-                ( (VarE 'sendSigBy `AppTypeE` key `AppE`)+                ( (VarE 'sendHOEBy `AppTypeE` key `AppE`)                 , \effDataType carrier ->-                    ConT ''SendSigBy `AppT` key `AppT` effDataType `AppT` carrier+                    ConT ''SendHOEBy `AppT` key `AppT` effDataType `AppT` carrier                 )      genSender order send sendCxt (PlainTV nKey SpecifiedSpec :) conf eff -genSender ::-    EffectOrder ->-    (Exp -> Exp) ->-    (TH.Type -> TH.Type -> TH.Type) ->-    ([TyVarBndrSpec] -> [TyVarBndrSpec]) ->-    SenderFunctionConf ->-    EffConInfo ->-    WriterT [Dec] Q ()+genSender+    :: EffectOrder+    -> (Exp -> Exp)+    -> (TH.Type -> TH.Type -> TH.Type)+    -> ([TyVarBndrSpec] -> [TyVarBndrSpec])+    -> SenderFunctionConf+    -> EffConInfo+    -> WriterT [Dec] Q () genSender order send sendCxt alterFnSigTVs conf@SenderFunctionConf{..} con@EffConInfo{..} = do     genSenderArmor sendCxt alterFnSigTVs conf con \f -> do         args <- replicateM (length effParamTypes) (newName "x")@@ -358,13 +359,13 @@          pure $ Clause (map VarP args) (NormalB body) [] -genSenderArmor ::-    (TH.Type -> TH.Type -> TH.Type) ->-    ([TyVarBndrSpec] -> [TyVarBndrSpec]) ->-    SenderFunctionConf ->-    EffConInfo ->-    (Type -> Q Clause) ->-    WriterT [Dec] Q ()+genSenderArmor+    :: (TH.Type -> TH.Type -> TH.Type)+    -> ([TyVarBndrSpec] -> [TyVarBndrSpec])+    -> SenderFunctionConf+    -> EffConInfo+    -> (Type -> Q Clause)+    -> WriterT [Dec] Q () genSenderArmor sendCxt alterFnSigTVs SenderFunctionConf{..} EffConInfo{..} clause = do     carrier <- maybe ((`PlainTV` ()) <$> newName "f") pure effCarrier & lift @@ -400,7 +401,7 @@     when _doesGenerateSenderFnSignature $ tell [funSig]     tell [funDef, funInline] -arrowChain :: Foldable t => t TH.Type -> TH.Type -> TH.Type+arrowChain :: (Foldable t) => t TH.Type -> TH.Type -> TH.Type arrowChain = flip $ foldr \l r -> ArrowT `AppT` l `AppT` r  -- | A reified information of a datatype.@@ -478,8 +479,8 @@                     , effCxt = conCxt                     }           where-            decomposeGadtReturnType ::-                TH.Type -> Either [T.Text] (TH.Type, Maybe (TyVarBndr ()), TH.Type)+            decomposeGadtReturnType+                :: TH.Type -> Either [T.Text] (TH.Type, Maybe (TyVarBndr ()), TH.Type)             decomposeGadtReturnType =                 unkindType >>> case order of                     FirstOrder ->@@ -487,7 +488,7 @@                             ins `AppT` x -> Right (ins, Nothing, x)                             t ->                                 Left-                                    [ "Unexpected form of GADT return type for the instruction ‘"+                                    [ "Unexpected form of GADT return type for the first-order operation ‘"                                         <> T.pack (nameBase conName)                                         <> "’: "                                         <> T.pack (pprint t)@@ -499,7 +500,7 @@                             Right (sig, Just (PlainTV f ()), x)                         t ->                             Left-                                [ "Unexpected form of GADT return type for the signature ‘"+                                [ "Unexpected form of GADT return type for the higher-order operation ‘"                                     <> T.pack (nameBase conName)                                     <> "’: "                                     <> T.pack (pprint t)@@ -518,15 +519,15 @@             , ecEffs = effCons             } --- ** Generating Synonyms about LiftIns+-- ** Generating Synonyms about LiftFOE  {- |-Generate the pattern synonyms for instruction constructors:+Generate the pattern synonyms for operation constructors: -    @pattern LBaz ... = LiftIns (Baz ...)@+    @pattern LBaz ... = LiftFOE (Baz ...)@ -}-genLiftInsPatternSynonyms :: EffClsInfo -> Q [Dec]-genLiftInsPatternSynonyms EffClsInfo{..} = do+genLiftFOEPatternSynonyms :: EffClsInfo -> Q [Dec]+genLiftFOEPatternSynonyms EffClsInfo{..} = do     patSyns <-         forM ecEffs \EffConInfo{..} -> do             let newConName = mkName $ 'L' : nameBase effName@@ -542,37 +543,37 @@                         -- For some reason, if I don't write constraints in this form, the type is                         -- not inferred properly (why?).                         [t|-                            () =>-                            ( $(pure a) ~ $(pure effResultType)-                            , $(pure $ foldl AppT (TupleT (length effCxt)) effCxt)-                            ) =>-                            $( pure $-                                arrowChain-                                    effParamTypes-                                    ((ConT ''LiftIns `AppT` effDataType) `AppT` f `AppT` a)-                             )+                            ()+                            => ( $(pure a) ~ $(pure effResultType)+                               , $(pure $ foldl AppT (TupleT (length effCxt)) effCxt)+                               )+                            => $( pure $+                                    arrowChain+                                        effParamTypes+                                        ((ConT ''LiftFOE `AppT` effDataType) `AppT` f `AppT` a)+                                )                             |]                     , pure $                         PatSynD                             newConName                             (PrefixPatSyn args)                             ImplBidir-                            (ConP 'LiftIns [] [ConP effName [] (VarP <$> args)])+                            (ConP 'LiftFOE [] [ConP effName [] (VarP <$> args)])                     ]      pure $ concatMap snd patSyns ++ [PragmaD $ CompleteP (fst <$> patSyns) Nothing]  {- |-Generate the type synonym for an instruction class datatype:+Generate the type synonym for an first-order effect datatype: -    @type (LFoobar ...) = LiftIns (Foobar ...)@+    @type (LFoobar ...) = LiftFOE (Foobar ...)@ -}-genLiftInsTypeSynonym :: EffClsInfo -> Dec-genLiftInsTypeSynonym EffClsInfo{..} = do+genLiftFOETypeSynonym :: EffClsInfo -> Dec+genLiftFOETypeSynonym EffClsInfo{..} = do     TySynD         (mkName $ 'L' : nameBase ecName)-        (pvs <&> (`PlainTV` ()))-        (ConT ''LiftIns `AppT` foldl AppT (ConT ecName) (map VarT pvs))+        (pvs <&> (`PlainTV` BndrReq))+        (ConT ''LiftFOE `AppT` foldl AppT (ConT ecName) (map VarT pvs))   where     pvs = tyVarName <$> ecParamVars @@ -710,9 +711,9 @@ analyzeData :: Info -> Maybe DataInfo analyzeData = \case     TyConI (NewtypeD cxt name args _ constr _) ->-        Just $ DataInfo cxt name args (normalizeCon constr)+        Just $ DataInfo cxt name (map ($> ()) args) (normalizeCon constr)     TyConI (DataD cxt name args _ constrs _) ->-        Just $ DataInfo cxt name args (concatMap normalizeCon constrs)+        Just $ DataInfo cxt name (map ($> ()) args) (concatMap normalizeCon constrs)     _ -> Nothing  normalizeCon :: Con -> [ConInfo]