-- | Indicate that something was `Replied`. module NewtypeZoo.Replied ( Replied(Replied) , _theReplied , theReplied ) 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 Replied a = Replied 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 _theReplied :: Replied x -> x _theReplied (Replied !x) = x {-# INLINE _theReplied #-} theReplied :: forall a b p f. (Profunctor p, Functor f) => p a (f b) -> p (Replied a) (f (Replied b)) theReplied = dimap _theReplied (fmap Replied) {-# INLINE theReplied #-}