packages feed

newtype-deriving 0.1.2 → 0.1.3

raw patch · 4 files changed

+115/−78 lines, 4 filesdep −eitherdep −newtype-derivingdep ~basedep ~base-preludedep ~monad-controlPVP ok

version bump matches the API change (PVP)

Dependencies removed: either, newtype-deriving

Dependency ranges changed: base, base-prelude, monad-control, transformers, transformers-base

API changes (from Hackage documentation)

Files

− demo/Main.hs
@@ -1,31 +0,0 @@-{-# LANGUAGE UndecidableInstances, TypeFamilies, FlexibleInstances,-             TemplateHaskell, GeneralizedNewtypeDeriving,-             MultiParamTypeClasses #-}-module Main where--import Prelude ()-import BasePrelude-import NewtypeDeriving-import Control.Monad.Base-import Control.Monad.Trans.Control-import Control.Monad.Trans.Class-import Control.Monad.Trans.Either-import Control.Monad.Trans.Maybe-import Control.Monad.Trans.State-import Control.Monad.Trans.Reader-import Control.Monad.Trans.Writer---main =-  return ()---newtype T m a =-  T (ReaderT Int (StateT Char (WriterT [Int] (EitherT String (MaybeT m)))) a)-  deriving (Functor, Applicative, Monad)--monadTransInstance ''T-monadTransControlInstance ''T-monadBaseTransformerInstance ''T-monadBaseControlTransformerInstance ''T-
library/NewtypeDeriving/Rendering.hs view
@@ -5,7 +5,7 @@ import Control.Monad.Trans.Control import Control.Monad.Trans.Class import NewtypeDeriving.TH-import Language.Haskell.TH+import Language.Haskell.TH hiding (classP)   monadTransInstance @@ -24,17 +24,49 @@     liftExp =       foldl' composeExp (ConE conName) $ replicate layersCount (VarE 'lift) +-- |+-- Produces a declaration in the spirit of the following:+-- @+-- instance MonadBase b m => MonadBase b ($(pure transformerT) m) where+--   liftBase =+--     $(conE conName) . liftBase+-- @ monadBaseTransformerInstance   :: Type   -> Name   -> Dec-monadBaseTransformerInstance transformerType conName =-  head $ purifyQ $-  [d|-    instance MonadBase b m => MonadBase b ($(pure transformerType) m) where-      liftBase =-        $(conE conName) . liftBase-  |]+monadBaseTransformerInstance transformerT conName =+  InstanceD cxt type_ decs+  where+    baseMonadName =+      mkName "b"+    mainMonadName =+      mkName "m"+    baseMonadT =+      VarT baseMonadName+    mainMonadT =+      VarT mainMonadName+    cxt =+      [pred]+      where+        pred =+          classP ''MonadBase [baseMonadT, mainMonadT]+    type_ =+      foldl1 AppT [ConT ''MonadBase, baseMonadT, AppT transformerT mainMonadT]+    decs =+      [liftBaseD]+      where+        liftBaseD =+          FunD 'liftBase [clause]+          where+            clause =+              Clause [] body []+              where+                body =+                  NormalB exp+                  where+                    exp =+                      composeExp (ConE conName) (VarE 'liftBase)  monadTransControlInstance    :: Type   -- ^ Type of Newtype@@ -79,17 +111,72 @@     stType =       foldl' (flip AppT) (VarT stArgName) $ map (AppT (ConT ''StT)) layers +-- |+-- Produces a declaration in the spirit of the following:+-- @+-- instance MonadBaseControl b m => MonadBaseControl b ($(pure transformerT) m) where+--   type StM ($(pure transformerT) m) a = ComposeSt $(pure transformerT) m a+--   liftBaseWith = defaultLiftBaseWith+--   restoreM = defaultRestoreM+-- @ monadBaseControlTransformerInstance   :: Type   -> Dec-monadBaseControlTransformerInstance t =-  head $ purifyQ $-  [d|-    instance MonadBaseControl b m => MonadBaseControl b ($(pure t) m) where-      type StM ($(pure t) m) a = ComposeSt $(pure t) m a-      liftBaseWith = defaultLiftBaseWith-      restoreM = defaultRestoreM-  |]+monadBaseControlTransformerInstance transformerT =+  InstanceD cxt type_ decs+  where+    baseMonadName =+      mkName "b"+    mainMonadName =+      mkName "m"+    resultName =+      mkName "a"+    baseMonadT =+      VarT baseMonadName+    mainMonadT =+      VarT mainMonadName+    resultT =+      VarT resultName+    cxt =+      [pred]+      where+        pred =+          classP ''MonadBaseControl [baseMonadT, mainMonadT]+    type_ =+      AppT (AppT (ConT ''MonadBaseControl) baseMonadT) (AppT transformerT mainMonadT)+    decs =+      [stMD, liftBaseWithD, restoreMD]+      where+        stMD =+          TySynInstD ''StM eqn+          where+            eqn =+              TySynEqn [AppT transformerT mainMonadT, resultT] rhsT+              where+                rhsT =+                  foldl1 AppT [ConT ''ComposeSt, transformerT, mainMonadT, resultT]+        liftBaseWithD =+          FunD 'liftBaseWith [clause]+          where+            clause =+              Clause [] body []+              where+                body =+                  NormalB exp+                  where+                    exp =+                      VarE 'defaultLiftBaseWith+        restoreMD =+          FunD 'restoreM [clause]+          where+            clause =+              Clause [] body []+              where+                body =+                  NormalB exp+                  where+                    exp =+                      VarE 'defaultRestoreM  composeExp :: Exp -> Exp -> Exp composeExp a b =
library/NewtypeDeriving/TH.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module NewtypeDeriving.TH where  import BasePrelude@@ -9,3 +10,13 @@  tryToReify :: Name -> Q (Maybe Info) tryToReify n = recover (return Nothing) (fmap Just $ reify n) ++{-# INLINE classP #-}+classP :: Name -> [Type] -> Pred+#if MIN_VERSION_template_haskell(2,10,0)+classP n tl =+  foldl AppT (ConT n) tl+#else+classP =+  ClassP+#endif
newtype-deriving.cabal view
@@ -1,7 +1,7 @@ name:   newtype-deriving version:-  0.1.2+  0.1.3 synopsis:   Instance derivers for newtype wrappers description:@@ -64,33 +64,3 @@     transformers >= 0.3 && < 0.5,     base-prelude >= 0.1.3 && < 0.2,     base >= 4.7 && < 4.9----- Well, it's not a benchmark actually, --- but in Cabal there's no better way to specify an executable, --- which is not intended for distribution.-benchmark demo-  type: -    exitcode-stdio-1.0-  hs-source-dirs:-    demo-  main-is:-    Main.hs-  ghc-options:-    -O2-    -threaded-    "-with-rtsopts=-N"-    -funbox-strict-fields-    -ddump-splices-  default-language:-    Haskell2010-  build-depends:-    newtype-deriving,-    either,-    monad-control,-    transformers-base,-    transformers,-    base-prelude,-    base--