{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingVia #-} module Language.Haskell.Liquid.Types.Variance ( Variance(..), VarianceInfo ) where import Prelude hiding (error) import Control.DeepSeq import Data.Typeable import Data.Data import GHC.Generics import Data.Binary import Data.Hashable import Text.PrettyPrint.HughesPJ import qualified Language.Fixpoint.Types as F import Language.Haskell.Liquid.Types.Generics type VarianceInfo = [Variance] data Variance = Invariant | Bivariant | Contravariant | Covariant deriving (Variance -> Variance -> Bool (Variance -> Variance -> Bool) -> (Variance -> Variance -> Bool) -> Eq Variance forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Variance -> Variance -> Bool $c/= :: Variance -> Variance -> Bool == :: Variance -> Variance -> Bool $c== :: Variance -> Variance -> Bool Eq, Typeable Variance DataType Constr Typeable Variance -> (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Variance -> c Variance) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Variance) -> (Variance -> Constr) -> (Variance -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Variance)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variance)) -> ((forall b. Data b => b -> b) -> Variance -> Variance) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r) -> (forall u. (forall d. Data d => d -> u) -> Variance -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> Variance -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Variance -> m Variance) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Variance -> m Variance) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Variance -> m Variance) -> Data Variance Variance -> DataType Variance -> Constr (forall b. Data b => b -> b) -> Variance -> Variance (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Variance -> c Variance (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Variance forall a. Typeable a -> (forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a) -> (forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a) -> (a -> Constr) -> (a -> DataType) -> (forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c a)) -> (forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)) -> ((forall b. Data b => b -> b) -> a -> a) -> (forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r) -> (forall u. (forall d. Data d => d -> u) -> a -> [u]) -> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u) -> (forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> (forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a) -> Data a forall u. Int -> (forall d. Data d => d -> u) -> Variance -> u forall u. (forall d. Data d => d -> u) -> Variance -> [u] forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Variance -> m Variance forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Variance -> m Variance forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Variance forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Variance -> c Variance forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Variance) forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variance) $cCovariant :: Constr $cContravariant :: Constr $cBivariant :: Constr $cInvariant :: Constr $tVariance :: DataType gmapMo :: (forall d. Data d => d -> m d) -> Variance -> m Variance $cgmapMo :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Variance -> m Variance gmapMp :: (forall d. Data d => d -> m d) -> Variance -> m Variance $cgmapMp :: forall (m :: * -> *). MonadPlus m => (forall d. Data d => d -> m d) -> Variance -> m Variance gmapM :: (forall d. Data d => d -> m d) -> Variance -> m Variance $cgmapM :: forall (m :: * -> *). Monad m => (forall d. Data d => d -> m d) -> Variance -> m Variance gmapQi :: Int -> (forall d. Data d => d -> u) -> Variance -> u $cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Variance -> u gmapQ :: (forall d. Data d => d -> u) -> Variance -> [u] $cgmapQ :: forall u. (forall d. Data d => d -> u) -> Variance -> [u] gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r $cgmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r $cgmapQl :: forall r r'. (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Variance -> r gmapT :: (forall b. Data b => b -> b) -> Variance -> Variance $cgmapT :: (forall b. Data b => b -> b) -> Variance -> Variance dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variance) $cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *). Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Variance) dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Variance) $cdataCast1 :: forall (t :: * -> *) (c :: * -> *). Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Variance) dataTypeOf :: Variance -> DataType $cdataTypeOf :: Variance -> DataType toConstr :: Variance -> Constr $ctoConstr :: Variance -> Constr gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Variance $cgunfold :: forall (c :: * -> *). (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Variance gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Variance -> c Variance $cgfoldl :: forall (c :: * -> *). (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Variance -> c Variance $cp1Data :: Typeable Variance Data, Typeable, Int -> Variance -> ShowS [Variance] -> ShowS Variance -> String (Int -> Variance -> ShowS) -> (Variance -> String) -> ([Variance] -> ShowS) -> Show Variance forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Variance] -> ShowS $cshowList :: [Variance] -> ShowS show :: Variance -> String $cshow :: Variance -> String showsPrec :: Int -> Variance -> ShowS $cshowsPrec :: Int -> Variance -> ShowS Show, (forall x. Variance -> Rep Variance x) -> (forall x. Rep Variance x -> Variance) -> Generic Variance forall x. Rep Variance x -> Variance forall x. Variance -> Rep Variance x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Variance x -> Variance $cfrom :: forall x. Variance -> Rep Variance x Generic) deriving Int -> Variance -> Int Variance -> Int (Int -> Variance -> Int) -> (Variance -> Int) -> Hashable Variance forall a. (Int -> a -> Int) -> (a -> Int) -> Hashable a hash :: Variance -> Int $chash :: Variance -> Int hashWithSalt :: Int -> Variance -> Int $chashWithSalt :: Int -> Variance -> Int Hashable via Generically Variance instance Binary Variance instance NFData Variance instance F.PPrint Variance where pprintTidy :: Tidy -> Variance -> Doc pprintTidy Tidy _ = String -> Doc text (String -> Doc) -> (Variance -> String) -> Variance -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . Variance -> String forall a. Show a => a -> String show