newtype-zoo 1.1.0.0 → 1.2.0.0
raw patch · 10 files changed
+241/−7 lines, 10 filesdep +comonadPVP ok
version bump matches the API change (PVP)
Dependencies added: comonad
API changes (from Hackage documentation)
+ NewtypeZoo.Active: instance Control.Comonad.Comonad NewtypeZoo.Active.Active
+ NewtypeZoo.Allocated: instance Control.Comonad.Comonad NewtypeZoo.Allocated.Allocated
+ NewtypeZoo.Available: Available :: a -> Available a
+ NewtypeZoo.Available: AvailableIn :: a -> AvailableIn ctx a
+ NewtypeZoo.Available: _theAvailable :: Available x -> x
+ NewtypeZoo.Available: _theAvailableIn :: AvailableIn ctx x -> x
+ NewtypeZoo.Available: instance Control.Comonad.Comonad (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Control.Comonad.Comonad NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Control.Monad.Fix.MonadFix (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Control.Monad.Fix.MonadFix NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Control.Monad.Zip.MonadZip (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Control.Monad.Zip.MonadZip NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Bits.Bits a => Data.Bits.Bits (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Data.Bits.Bits a => Data.Bits.Bits (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Data.Bits.FiniteBits a => Data.Bits.FiniteBits (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Data.Bits.FiniteBits a => Data.Bits.FiniteBits (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Data.Copointed.Copointed (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Copointed.Copointed NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Default.Class.Default a => Data.Default.Class.Default (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Data.Default.Class.Default a => Data.Default.Class.Default (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Data.Foldable.Foldable (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Foldable.Foldable NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Functor.Classes.Eq1 (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Functor.Classes.Eq1 NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Functor.Classes.Ord1 (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Functor.Classes.Ord1 NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Functor.Classes.Read1 (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Functor.Classes.Read1 NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Functor.Classes.Show1 (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Functor.Classes.Show1 NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.Pointed.Pointed (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Pointed.Pointed NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance Data.String.IsString a => Data.String.IsString (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Data.String.IsString a => Data.String.IsString (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Data.Traversable.Traversable (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance Data.Traversable.Traversable NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance GHC.Arr.Ix a => GHC.Arr.Ix (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Arr.Ix a => GHC.Arr.Ix (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Base.Applicative (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance GHC.Base.Applicative NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance GHC.Base.Functor (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance GHC.Base.Functor NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance GHC.Base.Monad (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance GHC.Base.Monad NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance GHC.Base.Monoid a => GHC.Base.Monoid (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Base.Monoid a => GHC.Base.Monoid (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Classes.Eq a => GHC.Classes.Eq (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Classes.Eq a => GHC.Classes.Eq (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Classes.Ord a => GHC.Classes.Ord (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Classes.Ord a => GHC.Classes.Ord (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Enum.Enum a => GHC.Enum.Enum (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Enum.Enum a => GHC.Enum.Enum (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Float.Floating a => GHC.Float.Floating (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Float.Floating a => GHC.Float.Floating (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Generics.Generic (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Generics.Generic (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Generics.Generic1 (NewtypeZoo.Available.AvailableIn ctx)
+ NewtypeZoo.Available: instance GHC.Generics.Generic1 NewtypeZoo.Available.Available
+ NewtypeZoo.Available: instance GHC.Num.Num a => GHC.Num.Num (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Num.Num a => GHC.Num.Num (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Read.Read a => GHC.Read.Read (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Read.Read a => GHC.Read.Read (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Real.Fractional a => GHC.Real.Fractional (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Real.Fractional a => GHC.Real.Fractional (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Real.Integral a => GHC.Real.Integral (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Real.Integral a => GHC.Real.Integral (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Real.Real a => GHC.Real.Real (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Real.Real a => GHC.Real.Real (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance GHC.Show.Show a => GHC.Show.Show (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance GHC.Show.Show a => GHC.Show.Show (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance System.Random.Random a => System.Random.Random (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance System.Random.Random a => System.Random.Random (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NewtypeZoo.Available.Available a)
+ NewtypeZoo.Available: instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NewtypeZoo.Available.AvailableIn ctx a)
+ NewtypeZoo.Available: newtype Available a
+ NewtypeZoo.Available: newtype AvailableIn ctx a
+ NewtypeZoo.Available: theAvailable :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Available a) (f (Available b))
+ NewtypeZoo.Available: theAvailableIn :: forall ctx a b p f. (Profunctor p, Functor f) => p a (f b) -> p (AvailableIn ctx a) (f (AvailableIn ctx b))
+ NewtypeZoo.Broken: instance Control.Comonad.Comonad NewtypeZoo.Broken.Broken
+ NewtypeZoo.Cached: instance Control.Comonad.Comonad NewtypeZoo.Cached.Cached
+ NewtypeZoo.Complete: instance Control.Comonad.Comonad NewtypeZoo.Complete.Complete
+ NewtypeZoo.Consistent: ConsistentTo :: a -> ConsistentTo ctx a
+ NewtypeZoo.Consistent: _theConsistentTo :: ConsistentTo ctx x -> x
+ NewtypeZoo.Consistent: instance Control.Comonad.Comonad (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Control.Comonad.Comonad NewtypeZoo.Consistent.Consistent
+ NewtypeZoo.Consistent: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Control.Monad.Fix.MonadFix (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Control.Monad.Zip.MonadZip (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Bits.Bits a => Data.Bits.Bits (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Data.Bits.FiniteBits a => Data.Bits.FiniteBits (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Data.Copointed.Copointed (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Default.Class.Default a => Data.Default.Class.Default (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Data.Foldable.Foldable (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Functor.Classes.Eq1 (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Functor.Classes.Ord1 (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Functor.Classes.Read1 (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Functor.Classes.Show1 (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.Pointed.Pointed (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance Data.String.IsString a => Data.String.IsString (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Data.Traversable.Traversable (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance GHC.Arr.Ix a => GHC.Arr.Ix (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Base.Applicative (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance GHC.Base.Functor (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance GHC.Base.Monad (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance GHC.Base.Monoid a => GHC.Base.Monoid (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Classes.Eq a => GHC.Classes.Eq (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Classes.Ord a => GHC.Classes.Ord (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Enum.Enum a => GHC.Enum.Enum (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Float.Floating a => GHC.Float.Floating (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Float.RealFloat a => GHC.Float.RealFloat (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Generics.Generic (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Generics.Generic1 (NewtypeZoo.Consistent.ConsistentTo ctx)
+ NewtypeZoo.Consistent: instance GHC.Num.Num a => GHC.Num.Num (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Read.Read a => GHC.Read.Read (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Real.Fractional a => GHC.Real.Fractional (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Real.Integral a => GHC.Real.Integral (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Real.Real a => GHC.Real.Real (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance GHC.Show.Show a => GHC.Show.Show (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance System.Random.Random a => System.Random.Random (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (NewtypeZoo.Consistent.ConsistentTo ctx a)
+ NewtypeZoo.Consistent: newtype ConsistentTo ctx a
+ NewtypeZoo.Consistent: theConsistentTo :: forall ctx a b p f. (Profunctor p, Functor f) => p a (f b) -> p (ConsistentTo ctx a) (f (ConsistentTo ctx b))
Files
- CHANGELOG.md +9/−0
- newtype-zoo.cabal +3/−1
- src/NewtypeZoo.hs +3/−0
- src/NewtypeZoo/Active.hs +5/−1
- src/NewtypeZoo/Allocated.hs +5/−1
- src/NewtypeZoo/Available.hs +141/−0
- src/NewtypeZoo/Broken.hs +5/−1
- src/NewtypeZoo/Cached.hs +2/−1
- src/NewtypeZoo/Complete.hs +2/−1
- src/NewtypeZoo/Consistent.hs +66/−1
CHANGELOG.md view
@@ -1,5 +1,14 @@ # Revision history for newtype-zoo +## 1.2.0.0 -- 2019-09-27++* Add `Available`+* Add experimental two-parameter newtype wrappers:+ * `AvailableIn`+ * `ConsistentTo`+* Add comonad instances to a few wrappers. If this proves valuable,+ all type will get instances in a future release.+ ## 1.1.0.0 -- 2019-09-19 * Add module `NewtypeZoo` which exports all reexports all wrappers.
newtype-zoo.cabal view
@@ -13,7 +13,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 1.1.0.0+version: 1.2.0.0 -- A short (one-line) description of the package. synopsis: Newtype Wrapper Zoo@@ -56,6 +56,7 @@ NewtypeZoo , NewtypeZoo.Active , NewtypeZoo.Allocated+ , NewtypeZoo.Available , NewtypeZoo.Broken , NewtypeZoo.Cached , NewtypeZoo.Complete@@ -115,6 +116,7 @@ -- Other library packages from which modules are imported. build-depends: base ^>=4.12.0.0+ , comonad , data-default , deepseq , pointed
src/NewtypeZoo.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE TypeOperators #-} -- | General Purpose Newtype Wrappers -- -- A zoo of /newtype/ wrappers.@@ -60,5 +62,6 @@ import NewtypeZoo.Complete as X import NewtypeZoo.Cached as X import NewtypeZoo.Broken as X+import NewtypeZoo.Available as X import NewtypeZoo.Allocated as X import NewtypeZoo.Active as X
src/NewtypeZoo/Active.hs view
@@ -5,6 +5,7 @@ , theActive ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -23,6 +24,7 @@ import System.Random (Random) import Test.QuickCheck (Arbitrary) +-- | A wrapper for something that is `Active`. newtype Active a = Active a deriving ( Eq , Ord@@ -64,14 +66,16 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity +-- | An accessor function for something 'Active'. _theActive :: Active x -> x _theActive (Active !x) = x {-# INLINE _theActive #-} +-- | A lens for something 'Active'. theActive :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Active a) (f (Active b)) theActive = dimap _theActive (fmap Active) {-# INLINE theActive #-}
src/NewtypeZoo/Allocated.hs view
@@ -5,6 +5,7 @@ , theAllocated ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -23,6 +24,7 @@ import System.Random (Random) import Test.QuickCheck (Arbitrary) +-- | A wrapper for something that is `Allocated`. newtype Allocated a = Allocated a deriving ( Eq , Ord@@ -64,14 +66,16 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity +-- | An accessor function for something 'Allocated'. _theAllocated :: Allocated x -> x _theAllocated (Allocated !x) = x {-# INLINE _theAllocated #-} +-- | A lens for something 'Allocated'. theAllocated :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Allocated a) (f (Allocated b)) theAllocated = dimap _theAllocated (fmap Allocated) {-# INLINE theAllocated #-}
+ src/NewtypeZoo/Available.hs view
@@ -0,0 +1,141 @@+-- | Indicate that something is `Available`.+module NewtypeZoo.Available+ ( Available(Available)+ , _theAvailable+ , theAvailable+ , AvailableIn(AvailableIn)+ , _theAvailableIn+ , theAvailableIn+ ) where++import Control.Comonad (Comonad)+import Control.DeepSeq (NFData)+import Control.Monad.Fix (MonadFix)+import Control.Monad.Zip (MonadZip)+import Data.Bits (Bits,FiniteBits)+import Data.Copointed (Copointed)+import Data.Default (Default)+import Data.Functor.Classes (Eq1, Ord1, Read1, Show1)+import Data.Functor.Identity+import Data.Ix (Ix)+import Data.Profunctor (Profunctor, dimap)+import Data.Pointed (Pointed)+import Data.String (IsString)+import Data.Typeable (Typeable)+import Foreign.Storable (Storable)+import GHC.Generics (Generic, Generic1)+import System.Random (Random)+import Test.QuickCheck (Arbitrary)++-- | A wrapper for something that is `Available`.+newtype Available a = Available a+ deriving ( Eq+ , Ord+ , Read+ , Show+ , NFData+ , Foldable+ , Traversable+ , Functor+ , Default+ , Monoid+ , Semigroup+ , Typeable+ , Generic+ , Generic1+ , Random+ , Arbitrary+ , Bounded+ , Enum+ , Floating+ , Fractional+ , Integral+ , Num+ , Real+ , RealFloat+ , RealFrac+ , Ix+ , IsString+ , Bits+ , FiniteBits+ )+ deriving ( Eq1+ , Ord1+ , Read1+ , Show1+ , Pointed+ , Copointed+ , Applicative+ , MonadFix+ , Monad+ , MonadZip+ , Comonad+ )+ via Identity++-- | An accessor function for something 'Available'.+_theAvailable :: Available x -> x+_theAvailable (Available !x) = x+{-# INLINE _theAvailable #-}++-- | A lens for something 'Available'.+theAvailable :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Available a) (f (Available b))+theAvailable = dimap _theAvailable (fmap Available)+{-# INLINE theAvailable #-}++-- | A wrapper for something that is `AvailableIn` with respect to some context+-- indicated by a (phantom-) type.+newtype AvailableIn ctx a = AvailableIn a+ deriving ( Eq+ , Ord+ , Read+ , Show+ , NFData+ , Foldable+ , Traversable+ , Functor+ , Default+ , Monoid+ , Semigroup+ , Typeable+ , Generic+ , Generic1+ , Random+ , Arbitrary+ , Bounded+ , Enum+ , Floating+ , Fractional+ , Integral+ , Num+ , Real+ , RealFloat+ , RealFrac+ , Ix+ , IsString+ , Bits+ , FiniteBits+ )+ deriving ( Eq1+ , Ord1+ , Read1+ , Show1+ , Pointed+ , Copointed+ , Applicative+ , MonadFix+ , Monad+ , MonadZip+ , Comonad+ )+ via Identity++-- | An accessor function for something 'AvailableIn'.+_theAvailableIn :: AvailableIn ctx x -> x+_theAvailableIn (AvailableIn !x) = x+{-# INLINE _theAvailableIn #-}++-- | A lens for something 'AvailableIn'.+theAvailableIn :: forall ctx a b p f. (Profunctor p, Functor f) => p a (f b) -> p (AvailableIn ctx a) (f (AvailableIn ctx b))+theAvailableIn = dimap _theAvailableIn (fmap AvailableIn)+{-# INLINE theAvailableIn #-}
src/NewtypeZoo/Broken.hs view
@@ -5,6 +5,7 @@ , theBroken ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -23,6 +24,7 @@ import System.Random (Random) import Test.QuickCheck (Arbitrary) +-- | A wrapper for something that is `Broken`. newtype Broken a = Broken a deriving ( Eq , Ord@@ -64,14 +66,16 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity +-- | An accessor function for something 'Broken'. _theBroken :: Broken x -> x _theBroken (Broken !x) = x {-# INLINE _theBroken #-} +-- | A lens for something 'Broken'. theBroken :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Broken a) (f (Broken b)) theBroken = dimap _theBroken (fmap Broken) {-# INLINE theBroken #-}
src/NewtypeZoo/Cached.hs view
@@ -5,6 +5,7 @@ , theCached ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -64,7 +65,7 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity
src/NewtypeZoo/Complete.hs view
@@ -5,6 +5,7 @@ , theComplete ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -64,7 +65,7 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity
src/NewtypeZoo/Consistent.hs view
@@ -3,8 +3,12 @@ ( Consistent(Consistent) , _theConsistent , theConsistent+ , ConsistentTo(ConsistentTo)+ , _theConsistentTo+ , theConsistentTo ) where +import Control.Comonad (Comonad) import Control.DeepSeq (NFData) import Control.Monad.Fix (MonadFix) import Control.Monad.Zip (MonadZip)@@ -23,6 +27,7 @@ import System.Random (Random) import Test.QuickCheck (Arbitrary) +-- | A wrapper for something that is `Consistent`. newtype Consistent a = Consistent a deriving ( Eq , Ord@@ -64,14 +69,74 @@ , MonadFix , Monad , MonadZip-+ , Comonad ) via Identity +-- | An accessor function for something 'Consistent'. _theConsistent :: Consistent x -> x _theConsistent (Consistent !x) = x {-# INLINE _theConsistent #-} +-- | A lens for something 'Consistent'. theConsistent :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Consistent a) (f (Consistent b)) theConsistent = dimap _theConsistent (fmap Consistent) {-# INLINE theConsistent #-}+++-- | A wrapper for something that is `ConsistentTo` some context+-- indicated by a (phantom-) type.+newtype ConsistentTo ctx a = ConsistentTo a+ deriving ( Eq+ , Ord+ , Read+ , Show+ , NFData+ , Foldable+ , Traversable+ , Functor+ , Default+ , Monoid+ , Semigroup+ , Typeable+ , Generic+ , Generic1+ , Random+ , Arbitrary+ , Bounded+ , Enum+ , Floating+ , Fractional+ , Integral+ , Num+ , Real+ , RealFloat+ , RealFrac+ , Ix+ , IsString+ , Bits+ , FiniteBits+ )+ deriving ( Eq1+ , Ord1+ , Read1+ , Show1+ , Pointed+ , Copointed+ , Applicative+ , MonadFix+ , Monad+ , MonadZip+ , Comonad+ )+ via Identity++-- | An accessor function for something 'ConsistentTo'.+_theConsistentTo :: ConsistentTo ctx x -> x+_theConsistentTo (ConsistentTo !x) = x+{-# INLINE _theConsistentTo #-}++-- | A lens for something 'ConsistentTo'.+theConsistentTo :: forall ctx a b p f. (Profunctor p, Functor f) => p a (f b) -> p (ConsistentTo ctx a) (f (ConsistentTo ctx b))+theConsistentTo = dimap _theConsistentTo (fmap ConsistentTo)+{-# INLINE theConsistentTo #-}