{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Trustworthy #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Functor.Identity
-- Copyright   :  (c) Andy Gill 2001,
--                (c) Oregon Graduate Institute of Science and Technology 2001
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  ross@soi.city.ac.uk
-- Stability   :  stable
-- Portability :  portable
--
-- The identity functor and monad.
--
-- This trivial type constructor serves two purposes:
--
-- * It can be used with functions parameterized by functor or monad classes.
--
-- * It can be used as a base monad to which a series of monad
--   transformers may be applied to construct a composite monad.
--   Most monad transformer modules include the special case of
--   applying the transformer to 'Identity'.  For example, @State s@
--   is an abbreviation for @StateT s 'Identity'@.
--
-- @since 4.8.0.0
-----------------------------------------------------------------------------

module Data.Functor.Identity (
    Identity(..),
  ) where

import Control.Monad.Fix
import Data.Bits (Bits, FiniteBits)
import Data.Coerce
import Data.Foldable
import Data.Functor.Utils ((#.))
import Foreign.Storable (Storable)
import GHC.Ix (Ix)
import GHC.Base ( Applicative(..), Eq(..), Functor(..), Monad(..)
                , Semigroup, Monoid, Ord(..), ($), (.) )
import GHC.Enum (Bounded, Enum)
import GHC.Float (Floating, RealFloat)
import GHC.Generics (Generic, Generic1)
import GHC.Num (Num)
import GHC.Read (Read(..), lex, readParen)
import GHC.Real (Fractional, Integral, Real, RealFrac)
import GHC.Show (Show(..), showParen, showString)
import GHC.Types (Bool(..))

-- | Identity functor and monad. (a non-strict monad)
--
-- @since 4.8.0.0
newtype Identity a = Identity { forall a. Identity a -> a
runIdentity :: a }
    deriving ( Eq (Identity a)
Identity a
Eq (Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> Identity a
-> (Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Bool)
-> (Identity a -> Maybe Int)
-> (Identity a -> Int)
-> (Identity a -> Bool)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int -> Identity a)
-> (Identity a -> Int)
-> Bits (Identity a)
Int -> Identity a
Identity a -> Bool
Identity a -> Int
Identity a -> Maybe Int
Identity a -> Identity a
Identity a -> Int -> Bool
Identity a -> Int -> Identity a
Identity a -> Identity a -> Identity a
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
forall {a}. Bits a => Eq (Identity a)
forall a. Bits a => Identity a
forall a. Bits a => Int -> Identity a
forall a. Bits a => Identity a -> Bool
forall a. Bits a => Identity a -> Int
forall a. Bits a => Identity a -> Maybe Int
forall a. Bits a => Identity a -> Identity a
forall a. Bits a => Identity a -> Int -> Bool
forall a. Bits a => Identity a -> Int -> Identity a
forall a. Bits a => Identity a -> Identity a -> Identity a
$c.&. :: forall a. Bits a => Identity a -> Identity a -> Identity a
.&. :: Identity a -> Identity a -> Identity a
$c.|. :: forall a. Bits a => Identity a -> Identity a -> Identity a
.|. :: Identity a -> Identity a -> Identity a
$cxor :: forall a. Bits a => Identity a -> Identity a -> Identity a
xor :: Identity a -> Identity a -> Identity a
$ccomplement :: forall a. Bits a => Identity a -> Identity a
complement :: Identity a -> Identity a
$cshift :: forall a. Bits a => Identity a -> Int -> Identity a
shift :: Identity a -> Int -> Identity a
$crotate :: forall a. Bits a => Identity a -> Int -> Identity a
rotate :: Identity a -> Int -> Identity a
$czeroBits :: forall a. Bits a => Identity a
zeroBits :: Identity a
$cbit :: forall a. Bits a => Int -> Identity a
bit :: Int -> Identity a
$csetBit :: forall a. Bits a => Identity a -> Int -> Identity a
setBit :: Identity a -> Int -> Identity a
$cclearBit :: forall a. Bits a => Identity a -> Int -> Identity a
clearBit :: Identity a -> Int -> Identity a
$ccomplementBit :: forall a. Bits a => Identity a -> Int -> Identity a
complementBit :: Identity a -> Int -> Identity a
$ctestBit :: forall a. Bits a => Identity a -> Int -> Bool
testBit :: Identity a -> Int -> Bool
$cbitSizeMaybe :: forall a. Bits a => Identity a -> Maybe Int
bitSizeMaybe :: Identity a -> Maybe Int
$cbitSize :: forall a. Bits a => Identity a -> Int
bitSize :: Identity a -> Int
$cisSigned :: forall a. Bits a => Identity a -> Bool
isSigned :: Identity a -> Bool
$cshiftL :: forall a. Bits a => Identity a -> Int -> Identity a
shiftL :: Identity a -> Int -> Identity a
$cunsafeShiftL :: forall a. Bits a => Identity a -> Int -> Identity a
unsafeShiftL :: Identity a -> Int -> Identity a
$cshiftR :: forall a. Bits a => Identity a -> Int -> Identity a
shiftR :: Identity a -> Int -> Identity a
$cunsafeShiftR :: forall a. Bits a => Identity a -> Int -> Identity a
unsafeShiftR :: Identity a -> Int -> Identity a
$crotateL :: forall a. Bits a => Identity a -> Int -> Identity a
rotateL :: Identity a -> Int -> Identity a
$crotateR :: forall a. Bits a => Identity a -> Int -> Identity a
rotateR :: Identity a -> Int -> Identity a
$cpopCount :: forall a. Bits a => Identity a -> Int
popCount :: Identity a -> Int
Bits       -- ^ @since 4.9.0.0
             , Identity a
Identity a -> Identity a -> Bounded (Identity a)
forall a. a -> a -> Bounded a
forall a. Bounded a => Identity a
$cminBound :: forall a. Bounded a => Identity a
minBound :: Identity a
$cmaxBound :: forall a. Bounded a => Identity a
maxBound :: Identity a
Bounded    -- ^ @since 4.9.0.0
             , Int -> Identity a
Identity a -> Int
Identity a -> [Identity a]
Identity a -> Identity a
Identity a -> Identity a -> [Identity a]
Identity a -> Identity a -> Identity a -> [Identity a]
(Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Int -> Identity a)
-> (Identity a -> Int)
-> (Identity a -> [Identity a])
-> (Identity a -> Identity a -> [Identity a])
-> (Identity a -> Identity a -> [Identity a])
-> (Identity a -> Identity a -> Identity a -> [Identity a])
-> Enum (Identity a)
forall a. Enum a => Int -> Identity a
forall a. Enum a => Identity a -> Int
forall a. Enum a => Identity a -> [Identity a]
forall a. Enum a => Identity a -> Identity a
forall a. Enum a => Identity a -> Identity a -> [Identity a]
forall a.
Enum a =>
Identity a -> Identity a -> Identity a -> [Identity a]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: forall a. Enum a => Identity a -> Identity a
succ :: Identity a -> Identity a
$cpred :: forall a. Enum a => Identity a -> Identity a
pred :: Identity a -> Identity a
$ctoEnum :: forall a. Enum a => Int -> Identity a
toEnum :: Int -> Identity a
$cfromEnum :: forall a. Enum a => Identity a -> Int
fromEnum :: Identity a -> Int
$cenumFrom :: forall a. Enum a => Identity a -> [Identity a]
enumFrom :: Identity a -> [Identity a]
$cenumFromThen :: forall a. Enum a => Identity a -> Identity a -> [Identity a]
enumFromThen :: Identity a -> Identity a -> [Identity a]
$cenumFromTo :: forall a. Enum a => Identity a -> Identity a -> [Identity a]
enumFromTo :: Identity a -> Identity a -> [Identity a]
$cenumFromThenTo :: forall a.
Enum a =>
Identity a -> Identity a -> Identity a -> [Identity a]
enumFromThenTo :: Identity a -> Identity a -> Identity a -> [Identity a]
Enum       -- ^ @since 4.9.0.0
             , Identity a -> Identity a -> Bool
(Identity a -> Identity a -> Bool)
-> (Identity a -> Identity a -> Bool) -> Eq (Identity a)
forall a. Eq a => Identity a -> Identity a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Identity a -> Identity a -> Bool
== :: Identity a -> Identity a -> Bool
$c/= :: forall a. Eq a => Identity a -> Identity a -> Bool
/= :: Identity a -> Identity a -> Bool
Eq         -- ^ @since 4.8.0.0
             , Bits (Identity a)
Bits (Identity a)
-> (Identity a -> Int)
-> (Identity a -> Int)
-> (Identity a -> Int)
-> FiniteBits (Identity a)
Identity a -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
forall {a}. FiniteBits a => Bits (Identity a)
forall a. FiniteBits a => Identity a -> Int
$cfiniteBitSize :: forall a. FiniteBits a => Identity a -> Int
finiteBitSize :: Identity a -> Int
$ccountLeadingZeros :: forall a. FiniteBits a => Identity a -> Int
countLeadingZeros :: Identity a -> Int
$ccountTrailingZeros :: forall a. FiniteBits a => Identity a -> Int
countTrailingZeros :: Identity a -> Int
FiniteBits -- ^ @since 4.9.0.0
             , Fractional (Identity a)
Identity a
Fractional (Identity a)
-> Identity a
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> Floating (Identity a)
Identity a -> Identity a
Identity a -> Identity a -> Identity a
forall {a}. Floating a => Fractional (Identity a)
forall a. Floating a => Identity a
forall a. Floating a => Identity a -> Identity a
forall a. Floating a => Identity a -> Identity a -> Identity a
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
$cpi :: forall a. Floating a => Identity a
pi :: Identity a
$cexp :: forall a. Floating a => Identity a -> Identity a
exp :: Identity a -> Identity a
$clog :: forall a. Floating a => Identity a -> Identity a
log :: Identity a -> Identity a
$csqrt :: forall a. Floating a => Identity a -> Identity a
sqrt :: Identity a -> Identity a
$c** :: forall a. Floating a => Identity a -> Identity a -> Identity a
** :: Identity a -> Identity a -> Identity a
$clogBase :: forall a. Floating a => Identity a -> Identity a -> Identity a
logBase :: Identity a -> Identity a -> Identity a
$csin :: forall a. Floating a => Identity a -> Identity a
sin :: Identity a -> Identity a
$ccos :: forall a. Floating a => Identity a -> Identity a
cos :: Identity a -> Identity a
$ctan :: forall a. Floating a => Identity a -> Identity a
tan :: Identity a -> Identity a
$casin :: forall a. Floating a => Identity a -> Identity a
asin :: Identity a -> Identity a
$cacos :: forall a. Floating a => Identity a -> Identity a
acos :: Identity a -> Identity a
$catan :: forall a. Floating a => Identity a -> Identity a
atan :: Identity a -> Identity a
$csinh :: forall a. Floating a => Identity a -> Identity a
sinh :: Identity a -> Identity a
$ccosh :: forall a. Floating a => Identity a -> Identity a
cosh :: Identity a -> Identity a
$ctanh :: forall a. Floating a => Identity a -> Identity a
tanh :: Identity a -> Identity a
$casinh :: forall a. Floating a => Identity a -> Identity a
asinh :: Identity a -> Identity a
$cacosh :: forall a. Floating a => Identity a -> Identity a
acosh :: Identity a -> Identity a
$catanh :: forall a. Floating a => Identity a -> Identity a
atanh :: Identity a -> Identity a
$clog1p :: forall a. Floating a => Identity a -> Identity a
log1p :: Identity a -> Identity a
$cexpm1 :: forall a. Floating a => Identity a -> Identity a
expm1 :: Identity a -> Identity a
$clog1pexp :: forall a. Floating a => Identity a -> Identity a
log1pexp :: Identity a -> Identity a
$clog1mexp :: forall a. Floating a => Identity a -> Identity a
log1mexp :: Identity a -> Identity a
Floating   -- ^ @since 4.9.0.0
             , Num (Identity a)
Num (Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Rational -> Identity a)
-> Fractional (Identity a)
Rational -> Identity a
Identity a -> Identity a
Identity a -> Identity a -> Identity a
forall {a}. Fractional a => Num (Identity a)
forall a. Fractional a => Rational -> Identity a
forall a. Fractional a => Identity a -> Identity a
forall a. Fractional a => Identity a -> Identity a -> Identity a
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
$c/ :: forall a. Fractional a => Identity a -> Identity a -> Identity a
/ :: Identity a -> Identity a -> Identity a
$crecip :: forall a. Fractional a => Identity a -> Identity a
recip :: Identity a -> Identity a
$cfromRational :: forall a. Fractional a => Rational -> Identity a
fromRational :: Rational -> Identity a
Fractional -- ^ @since 4.9.0.0
             , (forall x. Identity a -> Rep (Identity a) x)
-> (forall x. Rep (Identity a) x -> Identity a)
-> Generic (Identity a)
forall x. Rep (Identity a) x -> Identity a
forall x. Identity a -> Rep (Identity a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Identity a) x -> Identity a
forall a x. Identity a -> Rep (Identity a) x
$cfrom :: forall a x. Identity a -> Rep (Identity a) x
$cto :: forall a x. Rep (Identity a) x -> Identity a
Generic    -- ^ @since 4.8.0.0
             , (forall a. Identity a -> Rep1 Identity a)
-> (forall a. Rep1 Identity a -> Identity a) -> Generic1 Identity
forall a. Rep1 Identity a -> Identity a
forall a. Identity a -> Rep1 Identity a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cfrom1 :: forall a. Identity a -> Rep1 Identity a
$cto1 :: forall a. Rep1 Identity a -> Identity a
Generic1   -- ^ @since 4.8.0.0
             , Enum (Identity a)
Real (Identity a)
Real (Identity a)
-> Enum (Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> (Identity a, Identity a))
-> (Identity a -> Identity a -> (Identity a, Identity a))
-> (Identity a -> Integer)
-> Integral (Identity a)
Identity a -> Integer
Identity a -> Identity a -> (Identity a, Identity a)
Identity a -> Identity a -> Identity a
forall {a}. Integral a => Enum (Identity a)
forall {a}. Integral a => Real (Identity a)
forall a. Integral a => Identity a -> Integer
forall a.
Integral a =>
Identity a -> Identity a -> (Identity a, Identity a)
forall a. Integral a => Identity a -> Identity a -> Identity a
forall a.
Real a
-> Enum a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> (a -> a -> (a, a))
-> (a -> Integer)
-> Integral a
$cquot :: forall a. Integral a => Identity a -> Identity a -> Identity a
quot :: Identity a -> Identity a -> Identity a
$crem :: forall a. Integral a => Identity a -> Identity a -> Identity a
rem :: Identity a -> Identity a -> Identity a
$cdiv :: forall a. Integral a => Identity a -> Identity a -> Identity a
div :: Identity a -> Identity a -> Identity a
$cmod :: forall a. Integral a => Identity a -> Identity a -> Identity a
mod :: Identity a -> Identity a -> Identity a
$cquotRem :: forall a.
Integral a =>
Identity a -> Identity a -> (Identity a, Identity a)
quotRem :: Identity a -> Identity a -> (Identity a, Identity a)
$cdivMod :: forall a.
Integral a =>
Identity a -> Identity a -> (Identity a, Identity a)
divMod :: Identity a -> Identity a -> (Identity a, Identity a)
$ctoInteger :: forall a. Integral a => Identity a -> Integer
toInteger :: Identity a -> Integer
Integral   -- ^ @since 4.9.0.0
             , Ord (Identity a)
Ord (Identity a)
-> ((Identity a, Identity a) -> [Identity a])
-> ((Identity a, Identity a) -> Identity a -> Int)
-> ((Identity a, Identity a) -> Identity a -> Int)
-> ((Identity a, Identity a) -> Identity a -> Bool)
-> ((Identity a, Identity a) -> Int)
-> ((Identity a, Identity a) -> Int)
-> Ix (Identity a)
(Identity a, Identity a) -> Int
(Identity a, Identity a) -> [Identity a]
(Identity a, Identity a) -> Identity a -> Bool
(Identity a, Identity a) -> Identity a -> Int
forall a.
Ord a
-> ((a, a) -> [a])
-> ((a, a) -> a -> Int)
-> ((a, a) -> a -> Int)
-> ((a, a) -> a -> Bool)
-> ((a, a) -> Int)
-> ((a, a) -> Int)
-> Ix a
forall {a}. Ix a => Ord (Identity a)
forall a. Ix a => (Identity a, Identity a) -> Int
forall a. Ix a => (Identity a, Identity a) -> [Identity a]
forall a. Ix a => (Identity a, Identity a) -> Identity a -> Bool
forall a. Ix a => (Identity a, Identity a) -> Identity a -> Int
$crange :: forall a. Ix a => (Identity a, Identity a) -> [Identity a]
range :: (Identity a, Identity a) -> [Identity a]
$cindex :: forall a. Ix a => (Identity a, Identity a) -> Identity a -> Int
index :: (Identity a, Identity a) -> Identity a -> Int
$cunsafeIndex :: forall a. Ix a => (Identity a, Identity a) -> Identity a -> Int
unsafeIndex :: (Identity a, Identity a) -> Identity a -> Int
$cinRange :: forall a. Ix a => (Identity a, Identity a) -> Identity a -> Bool
inRange :: (Identity a, Identity a) -> Identity a -> Bool
$crangeSize :: forall a. Ix a => (Identity a, Identity a) -> Int
rangeSize :: (Identity a, Identity a) -> Int
$cunsafeRangeSize :: forall a. Ix a => (Identity a, Identity a) -> Int
unsafeRangeSize :: (Identity a, Identity a) -> Int
Ix         -- ^ @since 4.9.0.0
             , NonEmpty (Identity a) -> Identity a
Identity a -> Identity a -> Identity a
(Identity a -> Identity a -> Identity a)
-> (NonEmpty (Identity a) -> Identity a)
-> (forall b. Integral b => b -> Identity a -> Identity a)
-> Semigroup (Identity a)
forall b. Integral b => b -> Identity a -> Identity a
forall a. Semigroup a => NonEmpty (Identity a) -> Identity a
forall a. Semigroup a => Identity a -> Identity a -> Identity a
forall a b.
(Semigroup a, Integral b) =>
b -> Identity a -> Identity a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: forall a. Semigroup a => Identity a -> Identity a -> Identity a
<> :: Identity a -> Identity a -> Identity a
$csconcat :: forall a. Semigroup a => NonEmpty (Identity a) -> Identity a
sconcat :: NonEmpty (Identity a) -> Identity a
$cstimes :: forall a b.
(Semigroup a, Integral b) =>
b -> Identity a -> Identity a
stimes :: forall b. Integral b => b -> Identity a -> Identity a
Semigroup  -- ^ @since 4.9.0.0
             , Semigroup (Identity a)
Identity a
Semigroup (Identity a)
-> Identity a
-> (Identity a -> Identity a -> Identity a)
-> ([Identity a] -> Identity a)
-> Monoid (Identity a)
[Identity a] -> Identity a
Identity a -> Identity a -> Identity a
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall {a}. Monoid a => Semigroup (Identity a)
forall a. Monoid a => Identity a
forall a. Monoid a => [Identity a] -> Identity a
forall a. Monoid a => Identity a -> Identity a -> Identity a
$cmempty :: forall a. Monoid a => Identity a
mempty :: Identity a
$cmappend :: forall a. Monoid a => Identity a -> Identity a -> Identity a
mappend :: Identity a -> Identity a -> Identity a
$cmconcat :: forall a. Monoid a => [Identity a] -> Identity a
mconcat :: [Identity a] -> Identity a
Monoid     -- ^ @since 4.9.0.0
             , Integer -> Identity a
Identity a -> Identity a
Identity a -> Identity a -> Identity a
(Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Identity a -> Identity a)
-> (Integer -> Identity a)
-> Num (Identity a)
forall a. Num a => Integer -> Identity a
forall a. Num a => Identity a -> Identity a
forall a. Num a => Identity a -> Identity a -> Identity a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: forall a. Num a => Identity a -> Identity a -> Identity a
+ :: Identity a -> Identity a -> Identity a
$c- :: forall a. Num a => Identity a -> Identity a -> Identity a
- :: Identity a -> Identity a -> Identity a
$c* :: forall a. Num a => Identity a -> Identity a -> Identity a
* :: Identity a -> Identity a -> Identity a
$cnegate :: forall a. Num a => Identity a -> Identity a
negate :: Identity a -> Identity a
$cabs :: forall a. Num a => Identity a -> Identity a
abs :: Identity a -> Identity a
$csignum :: forall a. Num a => Identity a -> Identity a
signum :: Identity a -> Identity a
$cfromInteger :: forall a. Num a => Integer -> Identity a
fromInteger :: Integer -> Identity a
Num        -- ^ @since 4.9.0.0
             , Eq (Identity a)
Eq (Identity a)
-> (Identity a -> Identity a -> Ordering)
-> (Identity a -> Identity a -> Bool)
-> (Identity a -> Identity a -> Bool)
-> (Identity a -> Identity a -> Bool)
-> (Identity a -> Identity a -> Bool)
-> (Identity a -> Identity a -> Identity a)
-> (Identity a -> Identity a -> Identity a)
-> Ord (Identity a)
Identity a -> Identity a -> Bool
Identity a -> Identity a -> Ordering
Identity a -> Identity a -> Identity a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {a}. Ord a => Eq (Identity a)
forall a. Ord a => Identity a -> Identity a -> Bool
forall a. Ord a => Identity a -> Identity a -> Ordering
forall a. Ord a => Identity a -> Identity a -> Identity a
$ccompare :: forall a. Ord a => Identity a -> Identity a -> Ordering
compare :: Identity a -> Identity a -> Ordering
$c< :: forall a. Ord a => Identity a -> Identity a -> Bool
< :: Identity a -> Identity a -> Bool
$c<= :: forall a. Ord a => Identity a -> Identity a -> Bool
<= :: Identity a -> Identity a -> Bool
$c> :: forall a. Ord a => Identity a -> Identity a -> Bool
> :: Identity a -> Identity a -> Bool
$c>= :: forall a. Ord a => Identity a -> Identity a -> Bool
>= :: Identity a -> Identity a -> Bool
$cmax :: forall a. Ord a => Identity a -> Identity a -> Identity a
max :: Identity a -> Identity a -> Identity a
$cmin :: forall a. Ord a => Identity a -> Identity a -> Identity a
min :: Identity a -> Identity a -> Identity a
Ord        -- ^ @since 4.8.0.0
             , Num (Identity a)
Ord (Identity a)
Num (Identity a)
-> Ord (Identity a)
-> (Identity a -> Rational)
-> Real (Identity a)
Identity a -> Rational
forall a. Num a -> Ord a -> (a -> Rational) -> Real a
forall {a}. Real a => Num (Identity a)
forall {a}. Real a => Ord (Identity a)
forall a. Real a => Identity a -> Rational
$ctoRational :: forall a. Real a => Identity a -> Rational
toRational :: Identity a -> Rational
Real       -- ^ @since 4.9.0.0
             , Fractional (Identity a)
Real (Identity a)
Real (Identity a)
-> Fractional (Identity a)
-> (forall b. Integral b => Identity a -> (b, Identity a))
-> (forall b. Integral b => Identity a -> b)
-> (forall b. Integral b => Identity a -> b)
-> (forall b. Integral b => Identity a -> b)
-> (forall b. Integral b => Identity a -> b)
-> RealFrac (Identity a)
forall b. Integral b => Identity a -> b
forall b. Integral b => Identity a -> (b, Identity a)
forall a.
Real a
-> Fractional a
-> (forall b. Integral b => a -> (b, a))
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> RealFrac a
forall {a}. RealFrac a => Fractional (Identity a)
forall {a}. RealFrac a => Real (Identity a)
forall a b. (RealFrac a, Integral b) => Identity a -> b
forall a b.
(RealFrac a, Integral b) =>
Identity a -> (b, Identity a)
$cproperFraction :: forall a b.
(RealFrac a, Integral b) =>
Identity a -> (b, Identity a)
properFraction :: forall b. Integral b => Identity a -> (b, Identity a)
$ctruncate :: forall a b. (RealFrac a, Integral b) => Identity a -> b
truncate :: forall b. Integral b => Identity a -> b
$cround :: forall a b. (RealFrac a, Integral b) => Identity a -> b
round :: forall b. Integral b => Identity a -> b
$cceiling :: forall a b. (RealFrac a, Integral b) => Identity a -> b
ceiling :: forall b. Integral b => Identity a -> b
$cfloor :: forall a b. (RealFrac a, Integral b) => Identity a -> b
floor :: forall b. Integral b => Identity a -> b
RealFrac   -- ^ @since 4.9.0.0
             , Floating (Identity a)
RealFrac (Identity a)
RealFrac (Identity a)
-> Floating (Identity a)
-> (Identity a -> Integer)
-> (Identity a -> Int)
-> (Identity a -> (Int, Int))
-> (Identity a -> (Integer, Int))
-> (Integer -> Int -> Identity a)
-> (Identity a -> Int)
-> (Identity a -> Identity a)
-> (Int -> Identity a -> Identity a)
-> (Identity a -> Bool)
-> (Identity a -> Bool)
-> (Identity a -> Bool)
-> (Identity a -> Bool)
-> (Identity a -> Bool)
-> (Identity a -> Identity a -> Identity a)
-> RealFloat (Identity a)
Int -> Identity a -> Identity a
Integer -> Int -> Identity a
Identity a -> Bool
Identity a -> Int
Identity a -> Integer
Identity a -> (Int, Int)
Identity a -> (Integer, Int)
Identity a -> Identity a
Identity a -> Identity a -> Identity a
forall {a}. RealFloat a => Floating (Identity a)
forall {a}. RealFloat a => RealFrac (Identity a)
forall a. RealFloat a => Int -> Identity a -> Identity a
forall a. RealFloat a => Integer -> Int -> Identity a
forall a. RealFloat a => Identity a -> Bool
forall a. RealFloat a => Identity a -> Int
forall a. RealFloat a => Identity a -> Integer
forall a. RealFloat a => Identity a -> (Int, Int)
forall a. RealFloat a => Identity a -> (Integer, Int)
forall a. RealFloat a => Identity a -> Identity a
forall a. RealFloat a => Identity a -> Identity a -> Identity a
forall a.
RealFrac a
-> Floating a
-> (a -> Integer)
-> (a -> Int)
-> (a -> (Int, Int))
-> (a -> (Integer, Int))
-> (Integer -> Int -> a)
-> (a -> Int)
-> (a -> a)
-> (Int -> a -> a)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> a -> a)
-> RealFloat a
$cfloatRadix :: forall a. RealFloat a => Identity a -> Integer
floatRadix :: Identity a -> Integer
$cfloatDigits :: forall a. RealFloat a => Identity a -> Int
floatDigits :: Identity a -> Int
$cfloatRange :: forall a. RealFloat a => Identity a -> (Int, Int)
floatRange :: Identity a -> (Int, Int)
$cdecodeFloat :: forall a. RealFloat a => Identity a -> (Integer, Int)
decodeFloat :: Identity a -> (Integer, Int)
$cencodeFloat :: forall a. RealFloat a => Integer -> Int -> Identity a
encodeFloat :: Integer -> Int -> Identity a
$cexponent :: forall a. RealFloat a => Identity a -> Int
exponent :: Identity a -> Int
$csignificand :: forall a. RealFloat a => Identity a -> Identity a
significand :: Identity a -> Identity a
$cscaleFloat :: forall a. RealFloat a => Int -> Identity a -> Identity a
scaleFloat :: Int -> Identity a -> Identity a
$cisNaN :: forall a. RealFloat a => Identity a -> Bool
isNaN :: Identity a -> Bool
$cisInfinite :: forall a. RealFloat a => Identity a -> Bool
isInfinite :: Identity a -> Bool
$cisDenormalized :: forall a. RealFloat a => Identity a -> Bool
isDenormalized :: Identity a -> Bool
$cisNegativeZero :: forall a. RealFloat a => Identity a -> Bool
isNegativeZero :: Identity a -> Bool
$cisIEEE :: forall a. RealFloat a => Identity a -> Bool
isIEEE :: Identity a -> Bool
$catan2 :: forall a. RealFloat a => Identity a -> Identity a -> Identity a
atan2 :: Identity a -> Identity a -> Identity a
RealFloat  -- ^ @since 4.9.0.0
             , Ptr (Identity a) -> IO (Identity a)
Ptr (Identity a) -> Int -> IO (Identity a)
Ptr (Identity a) -> Int -> Identity a -> IO ()
Ptr (Identity a) -> Identity a -> IO ()
Identity a -> Int
(Identity a -> Int)
-> (Identity a -> Int)
-> (Ptr (Identity a) -> Int -> IO (Identity a))
-> (Ptr (Identity a) -> Int -> Identity a -> IO ())
-> (forall b. Ptr b -> Int -> IO (Identity a))
-> (forall b. Ptr b -> Int -> Identity a -> IO ())
-> (Ptr (Identity a) -> IO (Identity a))
-> (Ptr (Identity a) -> Identity a -> IO ())
-> Storable (Identity a)
forall b. Ptr b -> Int -> IO (Identity a)
forall b. Ptr b -> Int -> Identity a -> IO ()
forall a. Storable a => Ptr (Identity a) -> IO (Identity a)
forall a. Storable a => Ptr (Identity a) -> Int -> IO (Identity a)
forall a.
Storable a =>
Ptr (Identity a) -> Int -> Identity a -> IO ()
forall a. Storable a => Ptr (Identity a) -> Identity a -> IO ()
forall a. Storable a => Identity a -> Int
forall a b. Storable a => Ptr b -> Int -> IO (Identity a)
forall a b. Storable a => Ptr b -> Int -> Identity a -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: forall a. Storable a => Identity a -> Int
sizeOf :: Identity a -> Int
$calignment :: forall a. Storable a => Identity a -> Int
alignment :: Identity a -> Int
$cpeekElemOff :: forall a. Storable a => Ptr (Identity a) -> Int -> IO (Identity a)
peekElemOff :: Ptr (Identity a) -> Int -> IO (Identity a)
$cpokeElemOff :: forall a.
Storable a =>
Ptr (Identity a) -> Int -> Identity a -> IO ()
pokeElemOff :: Ptr (Identity a) -> Int -> Identity a -> IO ()
$cpeekByteOff :: forall a b. Storable a => Ptr b -> Int -> IO (Identity a)
peekByteOff :: forall b. Ptr b -> Int -> IO (Identity a)
$cpokeByteOff :: forall a b. Storable a => Ptr b -> Int -> Identity a -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> Identity a -> IO ()
$cpeek :: forall a. Storable a => Ptr (Identity a) -> IO (Identity a)
peek :: Ptr (Identity a) -> IO (Identity a)
$cpoke :: forall a. Storable a => Ptr (Identity a) -> Identity a -> IO ()
poke :: Ptr (Identity a) -> Identity a -> IO ()
Storable   -- ^ @since 4.9.0.0
             )

-- | This instance would be equivalent to the derived instances of the
-- 'Identity' newtype if the 'runIdentity' field were removed
--
-- @since 4.8.0.0
instance (Read a) => Read (Identity a) where
    readsPrec :: Int -> ReadS (Identity a)
readsPrec Int
d = Bool -> ReadS (Identity a) -> ReadS (Identity a)
forall a. Bool -> ReadS a -> ReadS a
readParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ReadS (Identity a) -> ReadS (Identity a))
-> ReadS (Identity a) -> ReadS (Identity a)
forall a b. (a -> b) -> a -> b
$ \ String
r ->
        [(a -> Identity a
forall a. a -> Identity a
Identity a
x,String
t) | (String
"Identity",String
s) <- ReadS String
lex String
r, (a
x,String
t) <- Int -> ReadS a
forall a. Read a => Int -> ReadS a
readsPrec Int
11 String
s]

-- | This instance would be equivalent to the derived instances of the
-- 'Identity' newtype if the 'runIdentity' field were removed
--
-- @since 4.8.0.0
instance (Show a) => Show (Identity a) where
    showsPrec :: Int -> Identity a -> ShowS
showsPrec Int
d (Identity a
x) = Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
        String -> ShowS
showString String
"Identity " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11 a
x

-- ---------------------------------------------------------------------------
-- Identity instances for Functor and Monad

-- | @since 4.8.0.0
instance Foldable Identity where
    foldMap :: forall m a. Monoid m => (a -> m) -> Identity a -> m
foldMap                = (a -> m) -> Identity a -> m
forall a b. Coercible a b => a -> b
coerce

    elem :: forall a. Eq a => a -> Identity a -> Bool
elem                   = ((a -> Bool) -> (Identity a -> a) -> Identity a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identity a -> a
forall a. Identity a -> a
runIdentity) ((a -> Bool) -> Identity a -> Bool)
-> (a -> a -> Bool) -> a -> Identity a -> Bool
forall b c a. Coercible b c => (b -> c) -> (a -> b) -> a -> c
#. a -> a -> Bool
forall a. Eq a => a -> a -> Bool
(==)
    foldl :: forall b a. (b -> a -> b) -> b -> Identity a -> b
foldl                  = (b -> a -> b) -> b -> Identity a -> b
forall a b. Coercible a b => a -> b
coerce
    foldl' :: forall b a. (b -> a -> b) -> b -> Identity a -> b
foldl'                 = (b -> a -> b) -> b -> Identity a -> b
forall a b. Coercible a b => a -> b
coerce
    foldl1 :: forall a. (a -> a -> a) -> Identity a -> a
foldl1 a -> a -> a
_               = Identity a -> a
forall a. Identity a -> a
runIdentity
    foldr :: forall a b. (a -> b -> b) -> b -> Identity a -> b
foldr a -> b -> b
f b
z (Identity a
x) = a -> b -> b
f a
x b
z
    foldr' :: forall a b. (a -> b -> b) -> b -> Identity a -> b
foldr'                 = (a -> b -> b) -> b -> Identity a -> b
forall a b. (a -> b -> b) -> b -> Identity a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr
    foldr1 :: forall a. (a -> a -> a) -> Identity a -> a
foldr1 a -> a -> a
_               = Identity a -> a
forall a. Identity a -> a
runIdentity
    length :: forall a. Identity a -> Int
length Identity a
_               = Int
1
    maximum :: forall a. Ord a => Identity a -> a
maximum                = Identity a -> a
forall a. Identity a -> a
runIdentity
    minimum :: forall a. Ord a => Identity a -> a
minimum                = Identity a -> a
forall a. Identity a -> a
runIdentity
    null :: forall a. Identity a -> Bool
null Identity a
_                 = Bool
False
    product :: forall a. Num a => Identity a -> a
product                = Identity a -> a
forall a. Identity a -> a
runIdentity
    sum :: forall a. Num a => Identity a -> a
sum                    = Identity a -> a
forall a. Identity a -> a
runIdentity
    toList :: forall a. Identity a -> [a]
toList (Identity a
x)    = [a
x]

-- | @since 4.8.0.0
instance Functor Identity where
    fmap :: forall a b. (a -> b) -> Identity a -> Identity b
fmap     = (a -> b) -> Identity a -> Identity b
forall a b. Coercible a b => a -> b
coerce

-- | @since 4.8.0.0
instance Applicative Identity where
    pure :: forall a. a -> Identity a
pure     = a -> Identity a
forall a. a -> Identity a
Identity
    <*> :: forall a b. Identity (a -> b) -> Identity a -> Identity b
(<*>)    = Identity (a -> b) -> Identity a -> Identity b
forall a b. Coercible a b => a -> b
coerce
    liftA2 :: forall a b c.
(a -> b -> c) -> Identity a -> Identity b -> Identity c
liftA2   = (a -> b -> c) -> Identity a -> Identity b -> Identity c
forall a b. Coercible a b => a -> b
coerce

-- | @since 4.8.0.0
instance Monad Identity where
    Identity a
m >>= :: forall a b. Identity a -> (a -> Identity b) -> Identity b
>>= a -> Identity b
k  = a -> Identity b
k (Identity a -> a
forall a. Identity a -> a
runIdentity Identity a
m)

-- | @since 4.8.0.0
instance MonadFix Identity where
    mfix :: forall a. (a -> Identity a) -> Identity a
mfix a -> Identity a
f   = a -> Identity a
forall a. a -> Identity a
Identity ((a -> a) -> a
forall a. (a -> a) -> a
fix (Identity a -> a
forall a. Identity a -> a
runIdentity (Identity a -> a) -> (a -> Identity a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Identity a
f))