module NewtypeZoo.Offered
( Offered(Offered)
, _theOffered
, theOffered
) where
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)
newtype Offered a = Offered 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
)
via Identity
_theOffered :: Offered x -> x
_theOffered (Offered !x) = x
{-# INLINE _theOffered #-}
theOffered :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Offered a) (f (Offered b))
theOffered = dimap _theOffered (fmap Offered)
{-# INLINE theOffered #-}