{-# LANGUAGE DeriveDataTypeable #-}
module Data.Generics.Uniplate.Data.Instances(
Hide(..), Trigger(..), Invariant(..),
Map, fromMap, toMap,
Set, fromSet, toSet,
IntMap, fromIntMap, toIntMap,
IntSet, fromIntSet, toIntSet
) where
import Data.Data
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.IntMap as IntMap
import qualified Data.IntSet as IntSet
newtype Hide a = Hide {forall a. Hide a -> a
fromHide :: a}
deriving (ReadPrec [Hide a]
ReadPrec (Hide a)
ReadS [Hide a]
forall a. Read a => ReadPrec [Hide a]
forall a. Read a => ReadPrec (Hide a)
forall a. Read a => Int -> ReadS (Hide a)
forall a. Read a => ReadS [Hide a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Hide a]
$creadListPrec :: forall a. Read a => ReadPrec [Hide a]
readPrec :: ReadPrec (Hide a)
$creadPrec :: forall a. Read a => ReadPrec (Hide a)
readList :: ReadS [Hide a]
$creadList :: forall a. Read a => ReadS [Hide a]
readsPrec :: Int -> ReadS (Hide a)
$creadsPrec :: forall a. Read a => Int -> ReadS (Hide a)
Read,Hide a -> Hide a -> Bool
Hide a -> Hide a -> Ordering
Hide a -> Hide a -> Hide 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 (Hide a)
forall a. Ord a => Hide a -> Hide a -> Bool
forall a. Ord a => Hide a -> Hide a -> Ordering
forall a. Ord a => Hide a -> Hide a -> Hide a
min :: Hide a -> Hide a -> Hide a
$cmin :: forall a. Ord a => Hide a -> Hide a -> Hide a
max :: Hide a -> Hide a -> Hide a
$cmax :: forall a. Ord a => Hide a -> Hide a -> Hide a
>= :: Hide a -> Hide a -> Bool
$c>= :: forall a. Ord a => Hide a -> Hide a -> Bool
> :: Hide a -> Hide a -> Bool
$c> :: forall a. Ord a => Hide a -> Hide a -> Bool
<= :: Hide a -> Hide a -> Bool
$c<= :: forall a. Ord a => Hide a -> Hide a -> Bool
< :: Hide a -> Hide a -> Bool
$c< :: forall a. Ord a => Hide a -> Hide a -> Bool
compare :: Hide a -> Hide a -> Ordering
$ccompare :: forall a. Ord a => Hide a -> Hide a -> Ordering
Ord,Hide a -> Hide a -> Bool
forall a. Eq a => Hide a -> Hide a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Hide a -> Hide a -> Bool
$c/= :: forall a. Eq a => Hide a -> Hide a -> Bool
== :: Hide a -> Hide a -> Bool
$c== :: forall a. Eq a => Hide a -> Hide a -> Bool
Eq,Typeable)
instance Show a => Show (Hide a) where
show :: Hide a -> String
show (Hide a
a) = String
"Hide " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
a
instance Functor Hide where
fmap :: forall a b. (a -> b) -> Hide a -> Hide b
fmap a -> b
f (Hide a
x) = forall a. a -> Hide a
Hide forall a b. (a -> b) -> a -> b
$ a -> b
f a
x
instance Typeable a => Data (Hide a) where
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Hide a -> c (Hide a)
gfoldl forall d b. Data d => c (d -> b) -> d -> c b
k forall g. g -> c g
z Hide a
x = forall g. g -> c g
z Hide a
x
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Hide a)
gunfold forall b r. Data b => c (b -> r) -> c r
k forall r. r -> c r
z Constr
c = forall a. HasCallStack => String -> a
error String
"Data.Generics.Uniplate.Data.Instances.Hide: gunfold not implemented - data type has no constructors"
toConstr :: Hide a -> Constr
toConstr Hide a
_ = forall a. HasCallStack => String -> a
error String
"Data.Generics.Uniplate.Data.Instances.Hide: toConstr not implemented - data type has no constructors"
dataTypeOf :: Hide a -> DataType
dataTypeOf Hide a
_ = DataType
tyHide
tyHide :: DataType
tyHide = String -> [Constr] -> DataType
mkDataType String
"Data.Generics.Uniplate.Data.Instances.Hide" []
data Trigger a = Trigger {forall a. Trigger a -> Bool
trigger :: Bool, forall a. Trigger a -> a
fromTrigger :: a}
deriving (ReadPrec [Trigger a]
ReadPrec (Trigger a)
ReadS [Trigger a]
forall a. Read a => ReadPrec [Trigger a]
forall a. Read a => ReadPrec (Trigger a)
forall a. Read a => Int -> ReadS (Trigger a)
forall a. Read a => ReadS [Trigger a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Trigger a]
$creadListPrec :: forall a. Read a => ReadPrec [Trigger a]
readPrec :: ReadPrec (Trigger a)
$creadPrec :: forall a. Read a => ReadPrec (Trigger a)
readList :: ReadS [Trigger a]
$creadList :: forall a. Read a => ReadS [Trigger a]
readsPrec :: Int -> ReadS (Trigger a)
$creadsPrec :: forall a. Read a => Int -> ReadS (Trigger a)
Read,Trigger a -> Trigger a -> Bool
Trigger a -> Trigger a -> Ordering
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 (Trigger a)
forall a. Ord a => Trigger a -> Trigger a -> Bool
forall a. Ord a => Trigger a -> Trigger a -> Ordering
forall a. Ord a => Trigger a -> Trigger a -> Trigger a
min :: Trigger a -> Trigger a -> Trigger a
$cmin :: forall a. Ord a => Trigger a -> Trigger a -> Trigger a
max :: Trigger a -> Trigger a -> Trigger a
$cmax :: forall a. Ord a => Trigger a -> Trigger a -> Trigger a
>= :: Trigger a -> Trigger a -> Bool
$c>= :: forall a. Ord a => Trigger a -> Trigger a -> Bool
> :: Trigger a -> Trigger a -> Bool
$c> :: forall a. Ord a => Trigger a -> Trigger a -> Bool
<= :: Trigger a -> Trigger a -> Bool
$c<= :: forall a. Ord a => Trigger a -> Trigger a -> Bool
< :: Trigger a -> Trigger a -> Bool
$c< :: forall a. Ord a => Trigger a -> Trigger a -> Bool
compare :: Trigger a -> Trigger a -> Ordering
$ccompare :: forall a. Ord a => Trigger a -> Trigger a -> Ordering
Ord,Trigger a -> Trigger a -> Bool
forall a. Eq a => Trigger a -> Trigger a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Trigger a -> Trigger a -> Bool
$c/= :: forall a. Eq a => Trigger a -> Trigger a -> Bool
== :: Trigger a -> Trigger a -> Bool
$c== :: forall a. Eq a => Trigger a -> Trigger a -> Bool
Eq,Int -> Trigger a -> ShowS
forall a. Show a => Int -> Trigger a -> ShowS
forall a. Show a => [Trigger a] -> ShowS
forall a. Show a => Trigger a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Trigger a] -> ShowS
$cshowList :: forall a. Show a => [Trigger a] -> ShowS
show :: Trigger a -> String
$cshow :: forall a. Show a => Trigger a -> String
showsPrec :: Int -> Trigger a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Trigger a -> ShowS
Show,Typeable)
instance Functor Trigger where
fmap :: forall a b. (a -> b) -> Trigger a -> Trigger b
fmap a -> b
f (Trigger Bool
a a
b) = forall a. Bool -> a -> Trigger a
Trigger Bool
a forall a b. (a -> b) -> a -> b
$ a -> b
f a
b
instance (Data a, Typeable a) => Data (Trigger a) where
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Trigger a -> c (Trigger a)
gfoldl forall d b. Data d => c (d -> b) -> d -> c b
k forall g. g -> c g
z (Trigger Bool
_ a
x) = forall g. g -> c g
z (forall a. Bool -> a -> Trigger a
Trigger Bool
True) forall d b. Data d => c (d -> b) -> d -> c b
`k` a
x
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Trigger a)
gunfold forall b r. Data b => c (b -> r) -> c r
k forall r. r -> c r
z Constr
c = forall b r. Data b => c (b -> r) -> c r
k forall a b. (a -> b) -> a -> b
$ forall r. r -> c r
z forall a b. (a -> b) -> a -> b
$ forall a. Bool -> a -> Trigger a
Trigger Bool
True
toConstr :: Trigger a -> Constr
toConstr Trigger{} = Constr
conTrigger
dataTypeOf :: Trigger a -> DataType
dataTypeOf Trigger a
_ = DataType
tyTrigger
conTrigger :: Constr
conTrigger = DataType -> String -> [String] -> Fixity -> Constr
mkConstr DataType
tyTrigger String
"Trigger" [] Fixity
Prefix
tyTrigger :: DataType
tyTrigger = String -> [Constr] -> DataType
mkDataType String
"Data.Generics.Uniplate.Data.Instances.Trigger" [Constr
conTrigger]
data Invariant a = Invariant {forall a. Invariant a -> a -> a
invariant :: a -> a, forall a. Invariant a -> a
fromInvariant :: a}
deriving Typeable
instance Show a => Show (Invariant a) where
show :: Invariant a -> String
show (Invariant a -> a
_ a
x) = String
"Invariant " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
x
instance (Data a, Typeable a) => Data (Invariant a) where
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Invariant a -> c (Invariant a)
gfoldl forall d b. Data d => c (d -> b) -> d -> c b
k forall g. g -> c g
z (Invariant a -> a
f a
x) = forall g. g -> c g
z (forall a. (a -> a) -> a -> Invariant a
Invariant a -> a
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a
f) forall d b. Data d => c (d -> b) -> d -> c b
`k` a
x
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Invariant a)
gunfold forall b r. Data b => c (b -> r) -> c r
k forall r. r -> c r
z Constr
c = forall b r. Data b => c (b -> r) -> c r
k forall a b. (a -> b) -> a -> b
$ forall r. r -> c r
z forall a b. (a -> b) -> a -> b
$ \a
x -> forall a. (a -> a) -> a -> Invariant a
Invariant (forall a. HasCallStack => String -> a
error String
msg) (forall a. HasCallStack => String -> a
error String
msg forall a. a -> a -> a
`asTypeOf` a
x)
where msg :: String
msg = String
"Data.Generics.Uniplate.Data.Instances.Invariant: gunfold only partially implemented"
toConstr :: Invariant a -> Constr
toConstr Invariant{} = Constr
conInvariant
dataTypeOf :: Invariant a -> DataType
dataTypeOf Invariant a
_ = DataType
tyInvariant
conInvariant :: Constr
conInvariant = DataType -> String -> [String] -> Fixity -> Constr
mkConstr DataType
tyInvariant String
"Invariant" [] Fixity
Prefix
tyInvariant :: DataType
tyInvariant = String -> [Constr] -> DataType
mkDataType String
"Data.Generics.Uniplate.Data.Instances.Invariant" [Constr
conInvariant]
newtype Map k v = Map (Invariant (Trigger [k], Trigger [v], Hide (Map.Map k v)))
deriving (Map k v -> Constr
Map k v -> DataType
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 {k} {v}. (Data k, Data v) => Typeable (Map k v)
forall k v. (Data k, Data v) => Map k v -> Constr
forall k v. (Data k, Data v) => Map k v -> DataType
forall k v.
(Data k, Data v) =>
(forall b. Data b => b -> b) -> Map k v -> Map k v
forall k v u.
(Data k, Data v) =>
Int -> (forall d. Data d => d -> u) -> Map k v -> u
forall k v u.
(Data k, Data v) =>
(forall d. Data d => d -> u) -> Map k v -> [u]
forall k v r r'.
(Data k, Data v) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
forall k v r r'.
(Data k, Data v) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
forall k v (m :: * -> *).
(Data k, Data v, Monad m) =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
forall k v (m :: * -> *).
(Data k, Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
forall k v (c :: * -> *).
(Data k, Data v) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Map k v)
forall k v (c :: * -> *).
(Data k, Data v) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Map k v -> c (Map k v)
forall k v (t :: * -> *) (c :: * -> *).
(Data k, Data v, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Map k v))
forall k v (t :: * -> * -> *) (c :: * -> *).
(Data k, Data v, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Map k v))
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Map k v)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Map k v -> c (Map k v)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Map k v))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
$cgmapMo :: forall k v (m :: * -> *).
(Data k, Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
$cgmapMp :: forall k v (m :: * -> *).
(Data k, Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
$cgmapM :: forall k v (m :: * -> *).
(Data k, Data v, Monad m) =>
(forall d. Data d => d -> m d) -> Map k v -> m (Map k v)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Map k v -> u
$cgmapQi :: forall k v u.
(Data k, Data v) =>
Int -> (forall d. Data d => d -> u) -> Map k v -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Map k v -> [u]
$cgmapQ :: forall k v u.
(Data k, Data v) =>
(forall d. Data d => d -> u) -> Map k v -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
$cgmapQr :: forall k v r r'.
(Data k, Data v) =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
$cgmapQl :: forall k v r r'.
(Data k, Data v) =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Map k v -> r
gmapT :: (forall b. Data b => b -> b) -> Map k v -> Map k v
$cgmapT :: forall k v.
(Data k, Data v) =>
(forall b. Data b => b -> b) -> Map k v -> Map k v
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Map k v))
$cdataCast2 :: forall k v (t :: * -> * -> *) (c :: * -> *).
(Data k, Data v, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Map k v))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Map k v))
$cdataCast1 :: forall k v (t :: * -> *) (c :: * -> *).
(Data k, Data v, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Map k v))
dataTypeOf :: Map k v -> DataType
$cdataTypeOf :: forall k v. (Data k, Data v) => Map k v -> DataType
toConstr :: Map k v -> Constr
$ctoConstr :: forall k v. (Data k, Data v) => Map k v -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Map k v)
$cgunfold :: forall k v (c :: * -> *).
(Data k, Data v) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Map k v)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Map k v -> c (Map k v)
$cgfoldl :: forall k v (c :: * -> *).
(Data k, Data v) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Map k v -> c (Map k v)
Data, Typeable)
instance (Show k, Show v) => Show (Map k v) where; show :: Map k v -> String
show = forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k v. Map k v -> Map k v
fromMap
instance (Eq k, Eq v) => Eq (Map k v) where; Map k v
a == :: Map k v -> Map k v -> Bool
== Map k v
b = forall k v. Map k v -> Map k v
fromMap Map k v
a forall a. Eq a => a -> a -> Bool
== forall k v. Map k v -> Map k v
fromMap Map k v
b
instance (Ord k, Ord v) => Ord (Map k v) where; compare :: Map k v -> Map k v -> Ordering
compare Map k v
a Map k v
b = forall a. Ord a => a -> a -> Ordering
compare (forall k v. Map k v -> Map k v
fromMap Map k v
a) (forall k v. Map k v -> Map k v
fromMap Map k v
b)
fromMap :: Map k v -> Map.Map k v
fromMap :: forall k v. Map k v -> Map k v
fromMap (Map (Invariant (Trigger [k], Trigger [v], Hide (Map k v))
-> (Trigger [k], Trigger [v], Hide (Map k v))
_ (Trigger [k]
_,Trigger [v]
_,Hide Map k v
x))) = Map k v
x
toMap :: Ord k => Map.Map k v -> Map k v
toMap :: forall k v. Ord k => Map k v -> Map k v
toMap Map k v
x = forall k v.
Invariant (Trigger [k], Trigger [v], Hide (Map k v)) -> Map k v
Map forall a b. (a -> b) -> a -> b
$ forall a. (a -> a) -> a -> Invariant a
Invariant forall {a} {b}.
Ord a =>
(Trigger [a], Trigger [b], Hide (Map a b))
-> (Trigger [a], Trigger [b], Hide (Map a b))
inv forall a b. (a -> b) -> a -> b
$ forall {a} {b}.
Map a b -> (Trigger [a], Trigger [b], Hide (Map a b))
create Map k v
x
where
create :: Map a b -> (Trigger [a], Trigger [b], Hide (Map a b))
create Map a b
x = (forall a. Bool -> a -> Trigger a
Trigger Bool
False [a]
ks, forall a. Bool -> a -> Trigger a
Trigger Bool
False [b]
vs, forall a. a -> Hide a
Hide Map a b
x)
where ([a]
ks,[b]
vs) = forall a b. [(a, b)] -> ([a], [b])
unzip forall a b. (a -> b) -> a -> b
$ forall k a. Map k a -> [(k, a)]
Map.toAscList Map a b
x
inv :: (Trigger [a], Trigger [b], Hide (Map a b))
-> (Trigger [a], Trigger [b], Hide (Map a b))
inv (Trigger [a]
ks,Trigger [b]
vs,Hide (Map a b)
x)
| forall a. Trigger a -> Bool
trigger Trigger [a]
ks = forall {a} {b}.
Map a b -> (Trigger [a], Trigger [b], Hide (Map a b))
create forall a b. (a -> b) -> a -> b
$ forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a. Trigger a -> a
fromTrigger Trigger [a]
ks) (forall a. Trigger a -> a
fromTrigger Trigger [b]
vs)
| forall a. Trigger a -> Bool
trigger Trigger [b]
vs = forall {a} {b}.
Map a b -> (Trigger [a], Trigger [b], Hide (Map a b))
create forall a b. (a -> b) -> a -> b
$ forall k a. [(k, a)] -> Map k a
Map.fromDistinctAscList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a. Trigger a -> a
fromTrigger Trigger [a]
ks) (forall a. Trigger a -> a
fromTrigger Trigger [b]
vs)
| Bool
otherwise = (Trigger [a]
ks,Trigger [b]
vs,Hide (Map a b)
x)
newtype Set k = Set (Invariant (Trigger [k], Hide (Set.Set k)))
deriving (Set k -> Constr
Set k -> DataType
forall {k}. Data k => Typeable (Set k)
forall k. Data k => Set k -> Constr
forall k. Data k => Set k -> DataType
forall k. Data k => (forall b. Data b => b -> b) -> Set k -> Set k
forall k u.
Data k =>
Int -> (forall d. Data d => d -> u) -> Set k -> u
forall k u. Data k => (forall d. Data d => d -> u) -> Set k -> [u]
forall k r r'.
Data k =>
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
forall k r r'.
Data k =>
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
forall k (m :: * -> *).
(Data k, Monad m) =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
forall k (m :: * -> *).
(Data k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
forall k (c :: * -> *).
Data k =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Set k)
forall k (c :: * -> *).
Data k =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Set k -> c (Set k)
forall k (t :: * -> *) (c :: * -> *).
(Data k, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Set k))
forall k (t :: * -> * -> *) (c :: * -> *).
(Data k, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Set k))
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 (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Set k)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Set k -> c (Set k)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Set k))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
$cgmapMo :: forall k (m :: * -> *).
(Data k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
$cgmapMp :: forall k (m :: * -> *).
(Data k, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
$cgmapM :: forall k (m :: * -> *).
(Data k, Monad m) =>
(forall d. Data d => d -> m d) -> Set k -> m (Set k)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Set k -> u
$cgmapQi :: forall k u.
Data k =>
Int -> (forall d. Data d => d -> u) -> Set k -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Set k -> [u]
$cgmapQ :: forall k u. Data k => (forall d. Data d => d -> u) -> Set k -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
$cgmapQr :: forall k r r'.
Data k =>
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
$cgmapQl :: forall k r r'.
Data k =>
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Set k -> r
gmapT :: (forall b. Data b => b -> b) -> Set k -> Set k
$cgmapT :: forall k. Data k => (forall b. Data b => b -> b) -> Set k -> Set k
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Set k))
$cdataCast2 :: forall k (t :: * -> * -> *) (c :: * -> *).
(Data k, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Set k))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Set k))
$cdataCast1 :: forall k (t :: * -> *) (c :: * -> *).
(Data k, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Set k))
dataTypeOf :: Set k -> DataType
$cdataTypeOf :: forall k. Data k => Set k -> DataType
toConstr :: Set k -> Constr
$ctoConstr :: forall k. Data k => Set k -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Set k)
$cgunfold :: forall k (c :: * -> *).
Data k =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Set k)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Set k -> c (Set k)
$cgfoldl :: forall k (c :: * -> *).
Data k =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Set k -> c (Set k)
Data, Typeable)
instance Show k => Show (Set k) where; show :: Set k -> String
show = forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k. Set k -> Set k
fromSet
instance Eq k => Eq (Set k) where; Set k
a == :: Set k -> Set k -> Bool
== Set k
b = forall k. Set k -> Set k
fromSet Set k
a forall a. Eq a => a -> a -> Bool
== forall k. Set k -> Set k
fromSet Set k
b
instance Ord k => Ord (Set k) where; compare :: Set k -> Set k -> Ordering
compare Set k
a Set k
b = forall a. Ord a => a -> a -> Ordering
compare (forall k. Set k -> Set k
fromSet Set k
a) (forall k. Set k -> Set k
fromSet Set k
b)
fromSet :: Set k -> Set.Set k
fromSet :: forall k. Set k -> Set k
fromSet (Set (Invariant (Trigger [k], Hide (Set k)) -> (Trigger [k], Hide (Set k))
_ (Trigger [k]
_,Hide Set k
x))) = Set k
x
toSet :: Ord k => Set.Set k -> Set k
toSet :: forall k. Ord k => Set k -> Set k
toSet Set k
x = forall k. Invariant (Trigger [k], Hide (Set k)) -> Set k
Set forall a b. (a -> b) -> a -> b
$ forall a. (a -> a) -> a -> Invariant a
Invariant forall {a}.
Ord a =>
(Trigger [a], Hide (Set a)) -> (Trigger [a], Hide (Set a))
inv forall a b. (a -> b) -> a -> b
$ forall {a}. Set a -> (Trigger [a], Hide (Set a))
create Set k
x
where
create :: Set a -> (Trigger [a], Hide (Set a))
create Set a
x = (forall a. Bool -> a -> Trigger a
Trigger Bool
False forall a b. (a -> b) -> a -> b
$ forall a. Set a -> [a]
Set.toList Set a
x, forall a. a -> Hide a
Hide Set a
x)
inv :: (Trigger [a], Hide (Set a)) -> (Trigger [a], Hide (Set a))
inv (Trigger [a]
ks,Hide (Set a)
x)
| forall a. Trigger a -> Bool
trigger Trigger [a]
ks = forall {a}. Set a -> (Trigger [a], Hide (Set a))
create forall a b. (a -> b) -> a -> b
$ forall a. Ord a => [a] -> Set a
Set.fromList forall a b. (a -> b) -> a -> b
$ forall a. Trigger a -> a
fromTrigger Trigger [a]
ks
| Bool
otherwise = (Trigger [a]
ks,Hide (Set a)
x)
newtype IntMap v = IntMap (Invariant (Trigger [Int], Trigger [v], Hide (IntMap.IntMap v)))
deriving (IntMap v -> Constr
IntMap v -> DataType
forall {v}. Data v => Typeable (IntMap v)
forall v. Data v => IntMap v -> Constr
forall v. Data v => IntMap v -> DataType
forall v.
Data v =>
(forall b. Data b => b -> b) -> IntMap v -> IntMap v
forall v u.
Data v =>
Int -> (forall d. Data d => d -> u) -> IntMap v -> u
forall v u.
Data v =>
(forall d. Data d => d -> u) -> IntMap v -> [u]
forall v r r'.
Data v =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
forall v r r'.
Data v =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
forall v (m :: * -> *).
(Data v, Monad m) =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
forall v (m :: * -> *).
(Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
forall v (c :: * -> *).
Data v =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IntMap v)
forall v (c :: * -> *).
Data v =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntMap v -> c (IntMap v)
forall v (t :: * -> *) (c :: * -> *).
(Data v, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (IntMap v))
forall v (t :: * -> * -> *) (c :: * -> *).
(Data v, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (IntMap v))
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 (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IntMap v)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntMap v -> c (IntMap v)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (IntMap v))
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
$cgmapMo :: forall v (m :: * -> *).
(Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
$cgmapMp :: forall v (m :: * -> *).
(Data v, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
$cgmapM :: forall v (m :: * -> *).
(Data v, Monad m) =>
(forall d. Data d => d -> m d) -> IntMap v -> m (IntMap v)
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IntMap v -> u
$cgmapQi :: forall v u.
Data v =>
Int -> (forall d. Data d => d -> u) -> IntMap v -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> IntMap v -> [u]
$cgmapQ :: forall v u.
Data v =>
(forall d. Data d => d -> u) -> IntMap v -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
$cgmapQr :: forall v r r'.
Data v =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
$cgmapQl :: forall v r r'.
Data v =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IntMap v -> r
gmapT :: (forall b. Data b => b -> b) -> IntMap v -> IntMap v
$cgmapT :: forall v.
Data v =>
(forall b. Data b => b -> b) -> IntMap v -> IntMap v
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (IntMap v))
$cdataCast2 :: forall v (t :: * -> * -> *) (c :: * -> *).
(Data v, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (IntMap v))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (IntMap v))
$cdataCast1 :: forall v (t :: * -> *) (c :: * -> *).
(Data v, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (IntMap v))
dataTypeOf :: IntMap v -> DataType
$cdataTypeOf :: forall v. Data v => IntMap v -> DataType
toConstr :: IntMap v -> Constr
$ctoConstr :: forall v. Data v => IntMap v -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IntMap v)
$cgunfold :: forall v (c :: * -> *).
Data v =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IntMap v)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntMap v -> c (IntMap v)
$cgfoldl :: forall v (c :: * -> *).
Data v =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntMap v -> c (IntMap v)
Data, Typeable)
instance Show v => Show (IntMap v) where; show :: IntMap v -> String
show = forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall v. IntMap v -> IntMap v
fromIntMap
instance Eq v => Eq (IntMap v) where; IntMap v
a == :: IntMap v -> IntMap v -> Bool
== IntMap v
b = forall v. IntMap v -> IntMap v
fromIntMap IntMap v
a forall a. Eq a => a -> a -> Bool
== forall v. IntMap v -> IntMap v
fromIntMap IntMap v
b
instance Ord v => Ord (IntMap v) where; compare :: IntMap v -> IntMap v -> Ordering
compare IntMap v
a IntMap v
b = forall a. Ord a => a -> a -> Ordering
compare (forall v. IntMap v -> IntMap v
fromIntMap IntMap v
a) (forall v. IntMap v -> IntMap v
fromIntMap IntMap v
b)
fromIntMap :: IntMap v -> IntMap.IntMap v
fromIntMap :: forall v. IntMap v -> IntMap v
fromIntMap (IntMap (Invariant (Trigger [Int], Trigger [v], Hide (IntMap v))
-> (Trigger [Int], Trigger [v], Hide (IntMap v))
_ (Trigger [Int]
_,Trigger [v]
_,Hide IntMap v
x))) = IntMap v
x
toIntMap :: IntMap.IntMap v -> IntMap v
toIntMap :: forall v. IntMap v -> IntMap v
toIntMap IntMap v
x = forall v.
Invariant (Trigger [Int], Trigger [v], Hide (IntMap v)) -> IntMap v
IntMap forall a b. (a -> b) -> a -> b
$ forall a. (a -> a) -> a -> Invariant a
Invariant forall {b}.
(Trigger [Int], Trigger [b], Hide (IntMap b))
-> (Trigger [Int], Trigger [b], Hide (IntMap b))
inv forall a b. (a -> b) -> a -> b
$ forall {b}.
IntMap b -> (Trigger [Int], Trigger [b], Hide (IntMap b))
create IntMap v
x
where
create :: IntMap b -> (Trigger [Int], Trigger [b], Hide (IntMap b))
create IntMap b
x = (forall a. Bool -> a -> Trigger a
Trigger Bool
False [Int]
ks, forall a. Bool -> a -> Trigger a
Trigger Bool
False [b]
vs, forall a. a -> Hide a
Hide IntMap b
x)
where ([Int]
ks,[b]
vs) = forall a b. [(a, b)] -> ([a], [b])
unzip forall a b. (a -> b) -> a -> b
$ forall a. IntMap a -> [(Int, a)]
IntMap.toAscList IntMap b
x
inv :: (Trigger [Int], Trigger [b], Hide (IntMap b))
-> (Trigger [Int], Trigger [b], Hide (IntMap b))
inv (Trigger [Int]
ks,Trigger [b]
vs,Hide (IntMap b)
x)
| forall a. Trigger a -> Bool
trigger Trigger [Int]
ks = forall {b}.
IntMap b -> (Trigger [Int], Trigger [b], Hide (IntMap b))
create forall a b. (a -> b) -> a -> b
$ forall a. [(Int, a)] -> IntMap a
IntMap.fromList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a. Trigger a -> a
fromTrigger Trigger [Int]
ks) (forall a. Trigger a -> a
fromTrigger Trigger [b]
vs)
| forall a. Trigger a -> Bool
trigger Trigger [b]
vs = forall {b}.
IntMap b -> (Trigger [Int], Trigger [b], Hide (IntMap b))
create forall a b. (a -> b) -> a -> b
$ forall a. [(Int, a)] -> IntMap a
IntMap.fromDistinctAscList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a. Trigger a -> a
fromTrigger Trigger [Int]
ks) (forall a. Trigger a -> a
fromTrigger Trigger [b]
vs)
| Bool
otherwise = (Trigger [Int]
ks,Trigger [b]
vs,Hide (IntMap b)
x)
newtype IntSet = IntSet (Invariant (Trigger [Int], Hide (IntSet.IntSet)))
deriving (Typeable IntSet
IntSet -> Constr
IntSet -> DataType
(forall b. Data b => b -> b) -> IntSet -> IntSet
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) -> IntSet -> u
forall u. (forall d. Data d => d -> u) -> IntSet -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IntSet
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntSet -> c IntSet
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IntSet)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IntSet)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IntSet -> m IntSet
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IntSet -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IntSet -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> IntSet -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> IntSet -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IntSet -> r
gmapT :: (forall b. Data b => b -> b) -> IntSet -> IntSet
$cgmapT :: (forall b. Data b => b -> b) -> IntSet -> IntSet
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IntSet)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IntSet)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IntSet)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c IntSet)
dataTypeOf :: IntSet -> DataType
$cdataTypeOf :: IntSet -> DataType
toConstr :: IntSet -> Constr
$ctoConstr :: IntSet -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IntSet
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c IntSet
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntSet -> c IntSet
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IntSet -> c IntSet
Data, Typeable)
instance Show IntSet where; show :: IntSet -> String
show = forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. IntSet -> IntSet
fromIntSet
instance Eq IntSet where; IntSet
a == :: IntSet -> IntSet -> Bool
== IntSet
b = IntSet -> IntSet
fromIntSet IntSet
a forall a. Eq a => a -> a -> Bool
== IntSet -> IntSet
fromIntSet IntSet
b
instance Ord IntSet where; compare :: IntSet -> IntSet -> Ordering
compare IntSet
a IntSet
b = forall a. Ord a => a -> a -> Ordering
compare (IntSet -> IntSet
fromIntSet IntSet
a) (IntSet -> IntSet
fromIntSet IntSet
b)
fromIntSet :: IntSet -> IntSet.IntSet
fromIntSet :: IntSet -> IntSet
fromIntSet (IntSet (Invariant (Trigger [Int], Hide IntSet) -> (Trigger [Int], Hide IntSet)
_ (Trigger [Int]
_,Hide IntSet
x))) = IntSet
x
toIntSet :: IntSet.IntSet -> IntSet
toIntSet :: IntSet -> IntSet
toIntSet IntSet
x = Invariant (Trigger [Int], Hide IntSet) -> IntSet
IntSet forall a b. (a -> b) -> a -> b
$ forall a. (a -> a) -> a -> Invariant a
Invariant (Trigger [Int], Hide IntSet) -> (Trigger [Int], Hide IntSet)
inv forall a b. (a -> b) -> a -> b
$ IntSet -> (Trigger [Int], Hide IntSet)
create IntSet
x
where
create :: IntSet -> (Trigger [Int], Hide IntSet)
create IntSet
x = (forall a. Bool -> a -> Trigger a
Trigger Bool
False forall a b. (a -> b) -> a -> b
$ IntSet -> [Int]
IntSet.toList IntSet
x, forall a. a -> Hide a
Hide IntSet
x)
inv :: (Trigger [Int], Hide IntSet) -> (Trigger [Int], Hide IntSet)
inv (Trigger [Int]
ks,Hide IntSet
x)
| forall a. Trigger a -> Bool
trigger Trigger [Int]
ks = IntSet -> (Trigger [Int], Hide IntSet)
create forall a b. (a -> b) -> a -> b
$ [Int] -> IntSet
IntSet.fromList forall a b. (a -> b) -> a -> b
$ forall a. Trigger a -> a
fromTrigger Trigger [Int]
ks
| Bool
otherwise = (Trigger [Int]
ks,Hide IntSet
x)